0

Android Studio를 개발 환경으로 사용하고 Android 앱 크기를 설정하는 방법은 다음과 같습니다.안드로이드 앱 크기를 올바르게 설정하는 방법이 있습니까?

1- Android Studio에서 제공하는 Nexus S 기반 hdpi 장치 용 레이아웃을 만듭니다.

2 모든 치수를 (dp 및 sp 단위를 사용하여) 값 -hdpi 폴더에 넣습니다.

3- I이 폴더 9 개 복사하고 다음으로 이들의 이름을 변경

  1. 값-420dpi
  2. 값-560dpi
  3. 값-LDPI
  4. 값-MDPI
  5. 값 - sw480dp
  6. 값 - sw600dp
  7. 값 - sw720dp
  8. 값-xhdpi
  9. 값-xxhdpi

3- 그 후, 나는 그 크기를 구성 할 레이아웃 파일을 열고 난 다음 선택에 대한

  1. 넥서스 5 배 420dpi
  2. 넥서스 6P 560dpi
  3. 2.7 "LDPI
  4. FOR QVGA
  5. 3.2"QVGA MDPI
  6. 012,351 FOR xxhdpi

5- xhdpi

  • 넥서스 5 sw720dp
  • FOR sw600dp FOR sw480dp FOR 6,
  • 5.4 "FWVGA
  • 넥서스 7
  • 넥서스 9
  • 넥서스 4 I는 각각의 치수를 변경 시작할 선택한 장치 내에 레이아웃이 맞을 때까지 파일을 저장하십시오.

    이것은 안드로이드 앱 크기를 설정하는 나의 방법이었고, 그것이 맞는지 알고 싶습니다. 같은 일을 쉽게하지만 쉽게 할 수있는 또 다른 방법이 있다면?

  • +1

    장치가 420dpi와 560dpi 사이에 있으면 어떻게됩니까? 490dpi라고할까요? xml에서 너비와 높이를 하드 코딩하지 않기를 바랍니다. – RadekJ

    +0

    @RadekJ 내 방법이 잘못되었다는 것을 의미합니까 ?? –

    +0

    그렇다면 올바르게 구성하는 다른 방법이 있습니까? 충분히 모든 장치에 좋아 보이는 레이아웃을 제공하기 위해 밤은, 당신이 정의하는 고려해야 –

    답변

    0

    선택자 유형은 하나만 사용해야합니다. 예를 들어, 귀하의 경우 :

    1. values-sw420dp
    2. values-sw480dp
    3. values-sw560dp
    4. values-sw600dp
    5. values-sw720dp

    은 충분해야한다 (하지만 분명히 그 앱의 요구 사항에 따라 달라집니다 및 완벽하게 지원하려는 장치)를 선택하십시오. 밀도 기반 선택기 (예 : values-mdpi)를 사용하는 이유는 무엇입니까?아시다시피, dpsp 크기는 밀도에 영향을받지 않습니다.

    그것은 당신이 신중하게 레이아웃을 디자인 할 경우, 당신은 많은 당신이 명시 적으로 선언 할 필요가 차원의 수를 줄일 수 있다고 덧붙였다 가치가있다. 예를 들어, 체중이있는 어린이와 함께 LinearLayout을 사용할 수 있습니다. 복잡한 프로젝트에서

    , 나는 앱이 화면 크기에 따라 확장 할 때, 나는 보통 모든 화면 클래스에 원하는 승수를 적용, 참조 하나에서 시작하는 모든 dimens 파일을 생성하는 스크립트를 사용합니다. 실제 코드는 사용자의 특정 요구에 따라 많이 달라질 수 있지만 Java의 예는 다음과 같습니다.

    public class GenerateDimens { 
    
        public static void main(String[] args) throws Exception { 
         String resFolder = "app/src/main/res/"; 
         String dimensFileName = "dimens.xml"; 
         File source = new File(resFolder + "values-sw800dp", dimensFileName); 
         File target = new File(resFolder + "values-sw0dp", dimensFileName); 
         DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
         Document document = builder.parse(source); 
         NodeList nodeList = document.getElementsByTagName("dimen"); 
         Pattern pattern = Pattern.compile("(\\d+).*"); 
         for (int i = 0; i < nodeList.getLength(); i++) { 
          Node dimen = nodeList.item(i); 
          String textContent = dimen.getTextContent(); 
          Matcher matcher = pattern.matcher(textContent); 
          if (matcher.find()) { 
           String oldValue = matcher.group(1); 
           String newValue = String.valueOf((int) (Integer.parseInt(oldValue)/1.33)); 
           dimen.setTextContent(textContent.replaceFirst(oldValue, newValue)); 
          } 
         } 
         TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
         Transformer transformer = transformerFactory.newTransformer(); 
         transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
         transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "yes"); 
         document.setXmlStandalone(true); 
         transformer.transform(new DOMSource(document), new StreamResult(target)); 
        } 
    
    } 
    
    +0

    좋아요, 고맙습니다. 복잡한 프로젝트에서 사용한다고 말한 차원 생성기 소스 코드를 제공해 주시겠습니까? –

    +1

    @yassinelafryhi 답변을 업데이트했습니다. – manfcas

    +0

    덕분에 많이 사용하겠다 !! –

    관련 문제