【发布时间】:2011-08-23 05:45:03
【问题描述】:
我正在开发 320*480 的应用程序。如何让应用在 480*854 屏幕上运行?当我尝试在 480*854 屏幕上运行时,应用程序的原始设计看起来很小。我想为android中的每个屏幕创建单独的布局吗?如果是这样,请向我提供示例提示以继续。
【问题讨论】:
我正在开发 320*480 的应用程序。如何让应用在 480*854 屏幕上运行?当我尝试在 480*854 屏幕上运行时,应用程序的原始设计看起来很小。我想为android中的每个屏幕创建单独的布局吗?如果是这样,请向我提供示例提示以继续。
【问题讨论】:
我已经实现了自己的处理多个屏幕分辨率的方法。
您当然可以通过在运行时根据百分比
设置LayoutParams来避免这个问题
问题只发生在 这是一个示例 xml 注意:我已将 px 用于固定大小的布局的 width/height,因为在 这是一个以百分比设置width和height的示例代码 现在可能有些人想知道这里发生了什么 让我解释一下 280 是我的 我在这里根据屏幕分辨率计算我的布局的新宽度,这样您的 结论:如果您需要为您的 给Google Android 工程师的建议,我想你们应该认真考虑将Views/Layouts 具有一些恒定的宽度或高度假设280dp。如果我们以百分比的形式以编程方式设置Views/Layouts的布局参数并且只使用常量width或height,解决方案非常简单
<?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); 中,width 和 height将值作为像素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 ) * 100LinearLayout 的宽度,320 是我的设备屏幕的宽度(我正在开发),我目前知道我在分辨率为 320 x 480 的设备上进行测试,我正在做的是计算我的布局在 百分比方面覆盖了多少 区域强>然后int mLayoutWidth = (int) ( (widthInPercentage * deviceWidth) / 100 )Views/Layouts 在每个屏幕分辨率上看起来都完全相同。Views/Layouts 设置一些恒定的宽度/高度,请始终在布局文件中的 px 中设置值(即xml),然后以编程方式设置LayoutParams。dp/dip 单位更改为percentage
【讨论】:
为此,您可以参考设备的可用宽度和高度使布局动态化
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 );
我建议你按照以下方式进行:
int baseWidth=320;
int baseHeight=480;
int mLayoutWidth = (int) ( (280* deviceWidth) / baseWidth);
int mLayoutHeight = (int) ( (300* deviceHeight) / baseHeight);
这也适用于视图而不是文本大小;
【讨论】:
在 Android 中,您不会追求绝对分辨率,而是关注屏幕密度。 是的,您可能需要创建不同的布局来支持各种密度和屏幕尺寸。一般来说,Android 支持四种密度(低、中、高、超高)
我建议您阅读适用于 Android 的 Supporting Multiple Screens。我认为它会帮助你实现你需要做的事情。它包含有关设计替代布局和可绘制对象的各个部分以及与支持多种屏幕分辨率相关的其他有用信息。
【讨论】:
您好,欢迎来到堆栈溢出...
从 1.6 版开始,Android 支持多种屏幕分辨率和密度,分为三类:
开发人员可以使用 Android 框架 API 和 SDK 中引入的工具来控制应用是否以及如何出现在每个组中的设备上。有关实现的详细信息,请参阅 Android 开发指南文章 Supporting Multiple Screens。你可以参考这个链接MultiResolution
或者可以使用
Display displayparm= activity.getWindowManager().getDefaultDisplay();
int width= displayparm.getWidth();
int Height= displayparm.getHeight();
【讨论】: