当我使用静态定义的布局时,我可以通过将wrap_content
设置为LinearLayout
layout_width
和match_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遮挡):
这是期望的结果。但是如果我在通过LayoutInflater动态地膨胀和添加视图时使用相同的技术,则LinearLayout会被拉伸到屏幕宽度。
(通过使用LayoutInflater我的意思是使用this method并传递root
参数的正确值)
为什么会这样?我怎样才能动态地制作类似的东西呢?是否有可能在XML中定义,或者我注定要自己实现该逻辑?
我在PopupWindow中显示布局。当我在层次结构查看器中查看LinearLayout时,它有layout_width
= match_parent
,这很奇怪,因为它在我的XML中是wrap_content
。
问题是由添加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" />
引起的。 (它用作分隔符)像这样:
{{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" />