gpt4 book ai didi

android - Android XML Layout 的 'include' 标签真的有效吗?

转载 作者:IT老高 更新时间:2023-10-28 13:08:43 28 4
gpt4 key购买 nike

在我的 Android 布局文件中使用 时,我无法覆盖属性。当我搜索错误时,我发现已拒绝 Issue 2863 :

“包含标签已损坏(覆盖布局参数永远不会起作用)”

由于 Romain 表示这在测试套件和他的示例中有效,我一定是做错了什么。

我的项目是这样组织的:

res/layout
buttons.xml

res/layout-land
receipt.xml

res/layout-port
receipt.xml

buttons.xml 包含如下内容:

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">

<Button .../>

<Button .../>
</LinearLayout>

纵向和横向的receipt.xml 文件看起来像:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

...

<!-- Overridden attributes never work. Nor do attributes like
the red background, which is specified here. -->
<include
android:id="@+id/buttons_override"
android:background="#ff0000"
android:layout_width="fill_parent"
layout="@layout/buttons"/>

</LinearLayout>

我错过了什么?

最佳答案

我刚刚发现了问题。首先,您只能覆盖 layout_* 属性,因此背景将不起作用。这是记录在案的行为,只是我的疏忽。

真正的问题在 LayoutInflater.java 中找到:

// We try to load the layout params set in the <include /> tag. If
// they don't exist, we will rely on the layout params set in the
// included XML file.
// During a layoutparams generation, a runtime exception is thrown
// if either layout_width or layout_height is missing. We catch
// this exception and set localParams accordingly: true means we
// successfully loaded layout params from the <include /> tag,
// false means we need to rely on the included layout params.
ViewGroup.LayoutParams params = null;
try {
params = group.generateLayoutParams(attrs);
} catch (RuntimeException e) {
params = group.generateLayoutParams(childAttrs);
} finally {
if (params != null) {
view.setLayoutParams(params);
}
}

如果 标签不包含 both layout_width 和 layout_height,则会发生 RuntimeException 并被静默处理,甚至没有任何日志语句。

如果您想覆盖任何 layout_* 属性,解决方案是在使用 标记时始终包含 layout_width 和 layout_height。

我的例子应该改为:

<include
android:id="@+id/buttons_override"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
layout="@layout/buttons"/>

关于android - Android XML Layout 的 'include' 标签真的有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2631614/

28 4 0