2012-05-11 4 views
0

응용 프로그램을 개발했습니다. 내가 개발 한 크기는 3.7in WVGA Nexus One입니다.자바 코드 다중 화면 크기 지원 방법

그래서이 화면보다 큰 화면을 표시하면 문제가 없습니다. 3.7in보다 작게 표시하면 문제가 발생했습니다.

여기 내 XML입니다. 일부 위젯에는 고정 픽셀을 사용하고 있습니다.

<LinearLayout 
    android:id="@+id/layout_content" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_below="@id/layout_title" 
    android:background="@drawable/backrepeat" 
    android:gravity="center_vertical|center_horizontal" > 

    <ScrollView 
     android:id="@+id/scrollView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center_vertical|center_horizontal" > 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:gravity="center_vertical|center_horizontal" > 

      <TableLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:gravity="center_vertical|center_horizontal" > 

       <TableRow 
        android:layout_width="fill_parent" 
        android:gravity="center_vertical|center_horizontal" 
        android:paddingBottom="10px" 
        android:paddingTop="10px" > 

        <LinearLayout 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:gravity="center_vertical|center_horizontal" > 

         <TextView 
          android:id="@+id/fixtext_name" 
          android:layout_width="80px" 
          android:layout_height="wrap_content" 
          android:gravity="right" 
          android:paddingBottom="10px" 
          android:text="姓名 :" 
          android:textColor="#000000" 
          android:textSize="30px" /> 

         <EditText 
          android:id="@+id/text_name" 
          android:layout_width="400px" 
          android:layout_height="wrap_content" 
          android:ems="15" 
          android:gravity="left" 
          android:inputType="textPersonName" 
          android:paddingBottom="10px" 
          android:textSize="30px" > 
         </EditText> 
        </LinearLayout> 
       </TableRow>       
      </TableLayout> 
     </LinearLayout> 
    </ScrollView> 
</LinearLayout> 

이것은 내 애플리케이션 레이아웃의 한 예입니다. 총 폭은 그래서 높이가 문제가되지 않습니다

fill_parent

를 사용하여 480 픽셀과 높이입니다.

<supports-screens 
    android:anyDensity="true" 
    android:largeScreens="true" 
    android:normalScreens="true" 
    android:resizeable="true" 
    android:smallScreens="true" 
    android:xlargeScreens="true" 
    android:requiresSmallestWidthDp="480" 
    android:compatibleWidthLimitDp="480" 
    android:largestWidthLimitDp="480" > 
</supports-screens> 

이것은 manifest xml의 지원 화면 속성입니다. 나는 이미 모든 것을 설정했다.

2.7in QVGA (SG Mini와 같은 것)에 표시 할 때 문제가 발생했습니다. 전체 화면 항목 대신에만 240px 너비가 표시됩니다.

애플리케이션 화면 크기에서 애플리케이션 기준을 짜내거나 크기를 조정하는 방법을 묻고 싶습니다.

내가 할 수있는 일은 모든 활동에 대해 동일한 코드를 작성해야합니까?

답변

0

작은 화면에서만 작동하는 새 XML 파일을 지정할 수 있습니다. 당신이
2) 완료, 새로운 레이아웃을 확인)> 안드로이드 XML 파일
3을 새로 만들기를 선택합니다 (원본 파일 및 다음을 누릅니다과 동일한 이름을 입력하지 프로젝트에

1) 오른쪽 클릭)
4) 예를 들어 "크기"와 같은 한정자를 선택하고 작은 화면에 적합하도록 XML을 지정하십시오. 5) 한정자와 속성을 지정한 후에 마침을 누릅니다.
6) 이제이 새로운 레이아웃이 코드에서 아무것도 변경하지 않고 작은 화면에 맞게 수정할 수 있습니다이 경우 레이아웃 작은)

에서 폴더라는 레이아웃 SOMETHING (의 XML 파일이 있습니다. NULLPOINTER 예외를 피하기 위해 같은 ID를 사용하고 있는지 확인하십시오.

희망이 도움이됩니다.

+0

나는 20 개의 xml을 가지므로 작은 크기의 새 것을 만들 필요가 있다는 것을 의미합니까? 예를 들어, 원본은 a.xml과 b.xml을 얻었고 small_a.xml과 small_b.xml에 대해 새로 만들 필요가 있습니다. 내부도 변경하지 않고 완전히 복사해야합니다. –

+0

새 레이아웃을 res/layout 폴더에 넣어야합니까? –

+0

Java 클래스는 어떻습니까? 구현하지 않으면 응용 프로그램에서 사용중인 폴더를 확인하는 방법은 무엇입니까? –

1

"px"를 사용하려는 것 같습니다. 이것은 문제 일 수 있습니다. 대신 XML에서 width 및 padding 속성에 "dip"을 시도하십시오.

여기 PX, DP의 차이점에 대해 설명하는 아주 좋은 예입니다, 작은 에뮬레이터보기에 따라 등

What is the difference between "px", "dp", "dip" and "sp" on Android?

0

디자인의 새로운 xml 파일을 찍어. .xml 파일을 디자인 한 후이 코드를 사용하십시오.

.java 파일을 사용해보십시오.

.xml 파일 ID를 전달할 스위치 케이스를 적용하십시오.

0

최종 ViewTreeObserver mLayoutObserver = mLayout.getViewTreeObserver();

mLayoutObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() 
{ 

    @Override 
    public void onGlobalLayout() 
    { 
     DisplayMetrics metrics = getResources().getDisplayMetrics(); 

     int deviceWidth = metrics.widthPixels; 

     int deviceHeight = metrics.heightPixels; 

     float widthInPercentage = ((float) 280/320) * 100; // 280 is the width of my LinearLayout and 320 is device screen width as i know my current device resolution are 320 x 480 so i'm calculating how much space (in percentage my layout is covering so that it should cover same area (in percentage) on any other device having different resolution 

     float heightInPercentage = ((float) 300/480) * 100; // same procedure 300 is the height of the LinearLayout and i'm converting it into percentage 

     int mLayoutWidth = (int) ((widthInPercentage * deviceWidth)/100); 

     int mLayoutHeight = (int) ((heightInPercentage * deviceHeight)/100); 

     LayoutParams layoutParams = new LayoutParams(mLayoutWidth, mLayoutHeight); 

     mLayout.setLayoutParams(layoutParams); 
    } 
}); 
+0

제공하는 솔루션에 대한 설명을 추가하여 답을 더 자세히 설명해 주시겠습니까? – abarisone

+0

xml 파일을 변경하지 않고이 작업을이 작업에 추가해야합니다. – Andriya

관련 문제