1

当我使用静态定义的布局时,我可以通过设置wrap_contentasLinearLayout layout_widthmatch_parentas its children'来做到这一点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 遮住了):

在此处输入图像描述

这是期望的结果。但是,如果我在通过 LayoutInflater 动态扩展和添加视图时使用相同的技术,LinearLayout 会被拉伸到屏幕宽度。(通过使用 LayoutInflater,我的意思是使用这种方法root,并且我为参数传递了正确的值)
) 为什么会发生这种情况?那我怎样才能动态地做类似的事情呢?是否可以在 XML 中定义它,或者我注定要自己实现该逻辑?

更新:

我在 PopupWindow 中显示布局。当我在 Hierarchy Viewer 中查看 LinearLayout 时,它有 layout_width= match_parent,这很奇怪,因为它wrap_content在我的 XML 中。

更新 2:

问题是由添加另一个宽度引起View的。match_parent(它被用作分隔符)像这样:

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

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

4

1 回答 1

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" />
于 2013-11-10T12:31:24.827 回答