java代码如何支持多种屏幕大小

时间:2012-05-11 02:52:47

标签: android xml resize screen-size

我开发了一个应用程序。我开发的尺寸在WVGA Nexus One中 3.7

因此,当显示大于此屏幕时,它没有问题。当我显示小于3.7英寸时,出现了问题。

这是我的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>

这是我的应用程序布局的一个示例。使用

,总宽度为480px和高度
  

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中的support-screen属性。我已经准备好了所有。

问题是当我在 2.7in QVGA (类似于SG Mini)中显示时,它只显示240px宽度而不是全屏项目。

我想问一下如何根据应用程序屏幕尺寸来挤压或重新调整应用程序的大小?

如果可以,我是否需要为所有活动编码相同的内容?

4 个答案:

答案 0 :(得分:1)

您可以指定一个只能在小屏幕上工作的新XML文件。

1)右键点击你的项目
2)选择new-&gt; Android XML文件
3)制作新布局,输入与原始文件相同的名称,然后按下一步(不完成)
4)您现在可以选择限定符 - 例如“Size”并指定XML仅适合小屏幕 5)一旦你指定了限定符及其属性,请按完成 6)您现在在名为layout-SOMETHING的文件夹中有一个XML文件(在本例中为layout-small)

可以修改此新布局以适应较小的屏幕,而无需更改代码中的任何内容。只需确保您具有相同的ID等,以避免出现NULLPOINTER异常。

希望这有帮助。

答案 1 :(得分:1)

看起来你正在尝试使用“px”。这可能是问题所在。而是尝试“dip”获取XML中的width和padding属性。

这是一个非常好的例子,可以解释px,dp,dip等之间的区别。

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

答案 2 :(得分:1)

根据小型仿真器视图设计新的.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);

然后应用switch case,你将传递.xml文件id。

答案 3 :(得分: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);
    }
});