0

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

所以当显示大于这个屏幕时,它没有问题。当我显示小于 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>

这是我的应用程序布局的一个示例。总宽度为 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>

这是清单 xml 中的 support-screen 属性。我已经设置好了。

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

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

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

4

4 回答 4

1

您可以指定一个仅适用于小屏幕的新 XML 文件。

1) 右键单击​​您的项目
2) 选择 new->Android XML 文件
3) 制作新布局,输入与您的原始文件相同的名称,然后按 NEXT(未完成)
4) 您现在可以选择限定符 - 例如“大小" 并指定 XML 仅适用于小屏幕 5) 一旦您指定了限定符及其属性,请按完成。
6) 您现在在名为 layout-SOMETHING 的文件夹中有一个 XML 文件(在本例中为 layout-small)

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

希望这可以帮助。

于 2012-05-11T02:59:06.313 回答
1

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

这是一个很好的例子,它向您解释了 px、dp、dip 等之间的区别。

Android上的“px”、“dp”、“dip”和“sp”有什么区别?

于 2012-05-11T04:09:29.160 回答
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);

然后在您将传递 .xml 文件 id 的地方应用 switch case。

于 2013-10-16T09:06:33.980 回答
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);
    }
});
于 2015-06-23T09:34:27.570 回答