多屏幕分辨率

gow*_*wri 3 android screen-resolution

我正在开发320*480的应用程序.如何让应用程序在480*854屏幕上运行?当我试图在480*854屏幕上运行时,应用程序的原始设计看起来很小.我想为android中的每个屏幕创建单独的布局吗?如果是这样,请提供样品提示以继续.

Muh*_*bar 8

我已经实现了自己的处理多屏幕分辨率的方法.

您可以通过LayoutParams在运行时设置百分比来避免此问题

问题只与发生Views/Layouts具有某种恒定的宽度高度让说280dp.解决方案非常简单,如果我们Views/Layouts百分比的形式设置我们的布局参数,并且只在必要时使用恒定的宽度高度,其他地方尝试match_parent用来填充空白空间或使用weights和定义每个View相对于其他的相对,Views这将有助于您的布局看起来几乎每个屏幕分辨率都很好

这是一个示例xml

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:id="@+id/mLayout"
            android:layout_width="280px"
            android:layout_height="300px" />

    </RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

注意:我已经使用PX为固定大小的布局的宽度/高度,因为在LayoutParams layoutParams = new LayoutParams(int width, int height);widthheight取的值作为像素

以下是以百分比表示设置宽度高度的示例代码

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;

            float heightInPercentage =  ( (float) 300 / 480 ) * 100;

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

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

            LayoutParams layoutParams = new LayoutParams(mLayoutWidth, mLayoutHeight);

            mLayout.setLayoutParams(layoutParams);
        }
    });
Run Code Online (Sandbox Code Playgroud)

现在可能有些人想知道这里发生了什么

float widthInPercentage = ( (float) 280 / 320 ) * 100

让我解释280是我的宽度LinearLayout320是我的设备屏幕的宽度(我正在开发),我知道目前我正在测试分辨率为320 x 480的设备,我正在做的是计算我的布局覆盖了多少面积百分比然后

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

这里我根据屏幕分辨率计算布局的新宽度,这样你的Views/Layouts每个屏幕分辨率看起来都一模一样.

结论:如果你需要设置一些固定宽度/高度为您Views/Layouts在始终设置值像素的布局文件(即XML),然后以编程方式设置LayoutParams.

谷歌Android工程师的建议,我猜你们应该认真考虑改变dp/dip单位percentage