2012-05-11 24 views
0

我开发了一个应用程序。我开发的尺寸是3.7in WVGA Nexus Onejava代码如何支持多屏大小

所以,当显示比这个屏幕大,它没有问题。当我显示小于3.7in时,出现了问题。

这里是我的XML,我使用固定PX一些部件。

<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> 

这是我的应用程序布局的一个例子。总宽度为480像素,并使用高度

FILL_PARENT

所以,高度不会有问题。

<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文件。

1)右键点击你的项目
2)选择新建 - > Android的XML文件
3)创建一个新的布局,作为您的原始文件,然后按NEXT键入相同的名称(不能完成)
4)您现在可以选择限定符 - 例如“大小”并指定XML仅适用于小屏幕。 5)一旦您指定了限定符及其属性,请按完成。
6)你现在有一个文件夹,名为布局SOMETHING(在这种情况下,布局小)

这种新的布局可以被修改,以适应小屏幕没有在代码中进行任何更改的XML文件。只要确保你有相同的ID和类似的名称以避免NULLPOINTER异常。

希望这会有所帮助。

+0

这意味着我得到20 xml还需要创建一个适合小尺寸的新的?例如,原来我有a.xml和b.xml,然后我需要为small_a.xml和small_b.xml创建一个新的。里面的一个也需要完全复制而不改变 –

+0

新的布局需要放到res/layout文件夹中? –

+0

java类怎么样?如果没有实现,应用程序如何确定使用哪个文件夹? –

0

设计新的.xml文件。 设计.xml文件后,使用此代码。

。java文件试试这个:

DisplayMetrics displaymetrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
screenHeight = displaymetrics.heightPixels; 
screenWidth = displaymetrics.widthPixels; 
screendensity = displaymetrics.densityDpi; 
Log.i("screenHeight",""+screenHeight); 
Log.i("screenWidth",""+screenWidth); 
Log.i("screendensity",""+screendensity); 

然后应用开关的情况下,你会通过.xml文件ID。

0

final 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