多屏幕分辨率

时间:2011-08-23 05:45:04

标签: android screen-resolution

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

5 个答案:

答案 0 :(得分: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>

注意:我已将 px 用于固定大小的布局宽度/高度,因为在LayoutParams layoutParams = new LayoutParams(int width, int height); width heightfinal 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); } }); 取值像素

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

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

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

LinearLayout

让我解释 280 是我的int mLayoutWidth = (int) ( (widthInPercentage * deviceWidth) / 100 )的宽度, 320 是我设备屏幕的宽度(我正在开发),我知道目前我正在测试分辨率 320 x 480 的设备,我正在做的是计算我的布局覆盖的面积 百分比,然后

Views/Layouts

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

结论:如果您需要为布局中 px 中的LayoutParams始终设置值设置一些常量宽度/高度 file(即xml)然后以编程方式设置dp/dip

Google Android Engineers 的建议,我猜你们应该认真考虑将percentage单位更改为{{1}}

答案 1 :(得分:1)

为此,您可以参考设备的可用宽度和高度来使您的布局动态

Display mDisplay= activity.getWindowManager().getDefaultDisplay();
int width= mDisplay.getWidth();
int Height= mDisplay.getHeight();

参考可用尺寸

以perecentage设置您的布局

答案 2 :(得分:1)

先生。巴巴尔,

我认为你应该遵循以下公式,而不是像

那样计算
float widthInPercentage =  ( (float) 280 / 320 )  * 100;
float heightInPercentage =  ( (float) 300 / 480 ) * 100;
int mLayoutWidth = (int) ( (widthInPercentage * deviceWidth) / 100 );
int mLayoutHeight = (int) ( (heightInPercentage * deviceHeight) / 100 );

我建议您如果按照以下方式执行此操作:

int baseWidth=320;
int baseHeight=480;

int mLayoutWidth = (int) ( (280* deviceWidth) / baseWidth);
int mLayoutHeight = (int) ( (300* deviceHeight) / baseHeight);

此外,这适用于视图,而不适用于文本大小;

答案 3 :(得分:0)

在Android中,您不会选择绝对分辨率,而是专注于屏幕密度。 是的,您可能需要创建不同的布局以支持各种密度和屏幕尺寸。一般来说,Android支持四种密度(低,中,高,超高)

我建议您阅读Android Supporting Multiple Screens。我认为它将帮助您实现您需要做的事情。它有各种关于设计替代布局和绘图的部分以及与支持多种屏幕分辨率相关的其他有用信息。

答案 4 :(得分:0)

嗨欢迎堆叠溢出...
从版本1.6开始,Android支持多种屏幕分辨率和密度,分为三类:

  • 小:屏幕尺寸小于T-Mobile G1或Samsung I7500的设备,如HTC Tattoo
  • 正常:屏幕尺寸与G1或I7500大致相同的设备。
  • 大:屏幕尺寸大于G1或I7500的设备(例如平板电脑式设备。)

开发人员可以使用Android框架API和SDK中引入的工具控制应用程序是否以及如何在每个组中显示设备。有关实施的详细信息,请参阅Android Dev Guide文章Supporting Multiple Screens。您可以参考此链接MultiResolution

 或者可以使用

Display displayparm= activity.getWindowManager().getDefaultDisplay();
int width= displayparm.getWidth();
int Height= displayparm.getHeight();