多个屏幕分辨率
我正在开发320 * 480的应用程序。 如何使应用程序在480 * 854屏幕上运行? 当我试图在480 * 854屏幕上运行,应用程序的原始devise看起来像小。 我想为Android中的每个屏幕创build单独的布局吗? 如果是这样,请提供示例提示继续。
我已经实现了我自己的处理多屏幕分辨率的方式 。
通过在运行时按百分比设置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>
注意:由于在LayoutParams layoutParams = new LayoutParams(int width, int height);
所以我使用了px作为固定大小的布局的宽度/高度 LayoutParams layoutParams = new LayoutParams(int width, int height);
width
和height
以像素为单位
以下是以百分比forms设置宽度和高度的示例代码
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); } });
现在可能有人想知道这里发生了什么事
float widthInPercentage = ( (float) 280 / 320 ) * 100
让我来解释280是我的LinearLayout
的宽度和320是我的设备屏幕(我正在开发)的宽度,目前我知道我testing的设备有分辨率320 x 480 ,我正在做的是根据百分比计算我的布局覆盖了多less区域
int mLayoutWidth = (int) ( (widthInPercentage * deviceWidth) / 100 )
在这里,我正在根据屏幕分辨率为我的布局计算新的宽度,通过这种方式,您的Views/Layouts
将在每个屏幕分辨率上看起来完全一样。
结论:如果你需要为你的Views/Layouts
设置一些常数宽度/高度 ,在布局文件(例如xml)中总是设置px值,然后以编程方式设置LayoutParams
。
对Google Android Engineers的build议,我想你们应该认真考虑把dp/dip
单位dp/dip
percentage
为此,您可以根据设备的可用宽度和高度使您的布局dynamic化
Display mDisplay= activity.getWindowManager().getDefaultDisplay(); int width= mDisplay.getWidth(); int Height= mDisplay.getHeight();
根据可用尺寸设置您的布局
巴巴先生,
我想你应该按照下面的公式来代替计算
float widthInPercentage = ( (float) 280 / 320 ) * 100; float heightInPercentage = ( (float) 300 / 480 ) * 100; int mLayoutWidth = (int) ( (widthInPercentage * deviceWidth) / 100 ); int mLayoutHeight = (int) ( (heightInPercentage * deviceHeight) / 100 );
我会build议,如果你把这个如下:
int baseWidth=320; int baseHeight=480; int mLayoutWidth = (int) ( (280* deviceWidth) / baseWidth); int mLayoutHeight = (int) ( (300* deviceHeight) / baseHeight);
此外,这将工作的意见,而不是文字大小;
在Android中,你绝对不会select绝对分辨率,而是专注于屏幕密度。 是的,你可能需要创build不同的布局来支持各种密度和屏幕尺寸。 一般Android有四种密度(低,中,高,特高)
我build议你阅读支持 Android的多屏幕 。 我认为这将帮助你实现你需要做的事情。 它有devise替代布局和可绘制的其他有用的信息与支持多个屏幕分辨率的各个部分。
嗨欢迎堆栈溢出…
从1.6版本开始,Android支持多种屏幕分辨率和密度分为三类:
- 小:像HTC Tattoo一样屏幕尺寸小于T-Mobile G1或三星I7500的设备
- 正常:屏幕尺寸与G1或I7500大致相同的设备。
- Large(大):屏幕尺寸大于G1或I7500的设备(如平板式设备)。
开发人员可以通过使用Android框架API和SDK中引入的工具来控制每个组中的设备是否以及如何显示。 有关实现的详细信息,请参阅Android开发人员指南文章支持多屏幕。 你可以参考这个链接多分辨率
或可以使用
Display displayparm= activity.getWindowManager().getDefaultDisplay(); int width= displayparm.getWidth(); int Height= displayparm.getHeight();