如何将几个视图的宽度设置为其中最大的内容宽度? (动态地)

时间:2013-11-10 11:24:49

标签: android android-layout

当我使用静态定义的布局时,我可以通过将wrap_content设置为LinearLayout layout_widthmatch_parent作为其子级layout_width来实现此目的。
例如,以下XML布局定义:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#f88"
    android:orientation="vertical" >

    <TextView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#8f8"
        android:text="Smaller"
        />

    <TextView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#8f8"
        android:text="I'm a bigger view"
        />
</LinearLayout>

如下所示(请注意,您无法看到LinearLayout背景颜色,因为它完全被TextViews遮挡):

enter image description here

这是期望的结果。但是如果我在通过LayoutInflater动态地膨胀和添加视图时使用相同的技术,则LinearLayout会被拉伸到屏幕宽度。 (通过使用LayoutInflater我的意思是使用this method并传递root参数的正确值) 为什么会这样?我怎样才能动态地制作类似的东西呢?是否有可能在XML中定义,或者我注定要自己实现该逻辑?

更新

我在PopupWindow中显示布局。当我在层次结构查看器中查看LinearLayout时,它有layout_width = match_parent,这很奇怪,因为它在我的XML中是wrap_content

更新2:

问题是由添加Viewmatch_parent的其他<View xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="1dp" android:background="#777" /> 引起的。 (它用作分隔符)像这样:

{{1}}

似乎它没有“必需宽度”的概念并强制其父级伸展。

1 个答案:

答案 0 :(得分:0)

只需将“分隔符”的视图类从View更改为TextView即可解决问题。后者并不试图占用所有可用空间。但是如果有更优雅的解决方案仍然很有意思(我怀疑为此目的使用TextView是过度杀伤并且效率不高)。

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#777" />