我想支持小屏幕和大屏幕
我的布局中有一个图像视图 - 在小屏幕中,它需要布局高度为“wrap_content”
在大屏幕上它需要400dp(包装内容太小)
而不是创建另一个布局,我想创建一个维度
<dimen name="layout_height">wrap_content</dimen>
<dimen name="layout_height">400dp</dimen>
并将它们分配到正确的文件夹和我的imageview写入
layout_height=@dimen/layout_height
这有可能以任何方式,而不创建另一个布局?
你可以有一个不同的style
小屏幕和大屏幕,覆盖layout_height
属性。不幸的是你无法在wrap_content
中设置dimen
要从dimens.xml文件中创建这些项所需的资源中分配wrap_content或match_parent:
<item name="match_parent" format="integer" type="dimen">-1</item>
<item name="wrap_content" format="integer" type="dimen">-2</item>
然后你可以像这样简单地使用它:
<dimen name="layout_height">@dimen/wrap_content</dimen>
方法1 - 以编程方式执行:
步骤1.将以下内容添加到onCreate()
的Activity
中:
ImageView i = (ImageView)findViewById(R.id.myimageview);
int screenSize = getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK;
switch(screenSize) {
case Configuration.SCREENLAYOUT_SIZE_LARGE:
i.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,dpi(400)));
break;
case Configuration.SCREENLAYOUT_SIZE_NORMAL:
i.setLayoutParams(new ImageView.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));
break;
case Configuration.SCREENLAYOUT_SIZE_SMALL:
i.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));
break;
}
步骤2.函数dpi()
定义如下:
private int dpi(int i) {
int value = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, i,
getResources().getDisplayMetrics());
return value;
}
注意:请确保您没有在XML布局中为此android:layout_height
设置android:layout_width
和ImageView
。
方法2 - 完成XML:
在你的/res
目录中,制作两个文件夹layout-small
和layout-large
。在这两个文件夹中,放置相同的XML布局文件,并在android:layout_width="wrap_content"
文件夹中的XML文件和layout-small
文件夹中的XML文件中的android:layout_height="400dp"
中手动设置layout-large
。现有的layout
文件夹将包含normal
大小屏幕的XML布局。
参考文献:
你可以在当时使用layout_height和minHeight。对于小屏幕,将minHeight设置为0dp,但是,对于大屏幕,将其设置为400dp。始终将layout_height设置为warp_content。
我认为这对你的情况有用。