在dimens中分配wrap content

9

我希望支持小屏幕和大屏幕

我的布局中有一个图片视图,在小屏幕中它需要一个 "wrap_content" 的布局高度

而在大屏幕中,它需要 400dp(wrap content 太小了)

为了避免创建另一个布局,我想创建一个尺寸

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

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

将它们分配到正确的文件夹中, 并在我的ImageView中编写

layout_height=@dimen/layout_height

这种情况是否有其他解决方案,而无需创建另一个布局?

在某些布局中需要使用"wrap_content"。 - Lena Bru
4个回答

19

如果您想从资源中分配wrap_content或match_parent,请在dimens.xml文件中创建这些项:

<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>

4
你的方法不起作用,出现了错误:android.view.InflateException: Binary XML file line #57: Can't convert to dimension: type=0x10。请检查代码并解决该问题。 - kumar
我希望你在样式中使用了这个。 - Killer

10

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


有一种方法可以做到这一点,请在此处查看答案。 https://dev59.com/x2Mm5IYBdhLWcg3wi_i0#19027178 - user2968401

1

方法一 - 编程实现:

步骤1. 在您的ActivityonCreate()中添加以下内容:

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;
}

第二步。函数 dpi() 的定义如下:
private int dpi(int i) {
    int value = (int) TypedValue.applyDimension(
        TypedValue.COMPLEX_UNIT_DIP, i,
        getResources().getDisplayMetrics());
    return value;
}

注意: 确保在XML布局中不设置android:layout_heightandroid:layout_width

方法2 - 通过XML实现:

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

参考资料:

1. 支持多个屏幕


1
在每个活动(我有10个)和一堆片段中添加不必要的代码,这不是我想做的事情... - Lena Bru

0

你可以同时使用layout_height和minHeight。对于小屏幕,将minHeight设置为0dp,而对于大屏幕,则将其设置为400dp。始终将layout_height设置为wrap_content。

我认为这对你的情况会起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接