当我使用静态定义的布局时,我可以通过设置wrap_content
asLinearLayout
layout_width
和match_parent
as 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" />
似乎它没有“所需宽度”的概念并强制其父级拉伸。