是的,我已经找到了解决方案,我个人认为为每个屏幕分辨率制作布局很耗时间,会使项目变得更大。
为了创建适合所有屏幕分辨率的布局,我采用了自己的技巧,即按百分比设置宽度和高度。
当我们使用某些常量宽度或高度值(例如100dp)来设置视图/布局时,就会出现问题。
解决方案很简单,尝试使用match_parent,这样视图将填充空白空间,或者使用weight并相对于其他视图定义每个视图。这将帮助您的布局在几乎所有屏幕分辨率下都看起来很好,并在运行时设置只有那些以百分比为单位具有某些常量宽度或高度的视图/布局的LayoutParams。
<?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
和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);
}
});
如果有人仍需要帮助,我想代码已经很容易理解了,您可以立即提出问题。
结论:如果您需要为您的Views/Layouts
设置一些常量宽度/高度,请在布局文件(即xml)中以px为单位设置值,然后编程方式设置LayoutParams
。
建议:我认为Google Android Guys应该认真考虑将dp/dip
单位替换为百分比
。