以维度分配包装内容

问题描述 投票:4回答:4

我想支持小屏幕和大屏幕

我的布局中有一个图像视图 - 在小屏幕中,它需要布局高度为“wrap_content”

在大屏幕上它需要400dp(包装内容太小)

而不是创建另一个布局,我想创建一个维度

<dimen name="layout_height">wrap_content</dimen>

<dimen name="layout_height">400dp</dimen>

并将它们分配到正确的文件夹和我的imageview写入

layout_height=@dimen/layout_height

这有可能以任何方式,而不创建另一个布局?

android android-layout dimensions
4个回答
8
投票

你可以有一个不同的style小屏幕和大屏幕,覆盖layout_height属性。不幸的是你无法在wrap_content中设置dimen


12
投票

要从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 - 以编程方式执行:

步骤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_widthImageView

方法2 - 完成XML:

在你的/res目录中,制作两个文件夹layout-smalllayout-large。在这两个文件夹中,放置相同的XML布局文件,并在android:layout_width="wrap_content"文件夹中的XML文件和layout-small文件夹中的XML文件中的android:layout_height="400dp"中手动设置layout-large。现有的layout文件夹将包含normal大小屏幕的XML布局。

参考文献:

1. Supporting Multiple Screens


0
投票

你可以在当时使用layout_height和minHeight。对于小屏幕,将minHeight设置为0dp,但是,对于大屏幕,将其设置为400dp。始终将layout_height设置为warp_content。

我认为这对你的情况有用。

© www.soinside.com 2019 - 2024. All rights reserved.