“...必须提供 layout_height...” 但它在我的样式资源中吗?

Posted

技术标签:

【中文标题】“...必须提供 layout_height...” 但它在我的样式资源中吗?【英文标题】:"...must supply a layout_height..." but its in my style resources? 【发布时间】:2011-08-04 07:07:33 【问题描述】:

在我尝试使用样式主题清理我的初始布局之前,我有一个 2.1 及更高版本的应用程序。现在,应用程序甚至不会以“您必须提供 layout_height 属性”失败消息开始,指向我在布局中的第一个 EditText 视图。

为什么我不能将在每个 EditText 上运行良好的“layout_height=30dp”移动到一个 ... item name="android:layout_height">30dp

我像这样抽象出来的几乎所有其他样式效果都可以正常工作。

[得知这一定是对 LinearLayout 的某种样式覆盖,而不是 EditText 的,我不会感到惊讶。或者它必须是视图的样式项,而不是小部件。我不知道。]

想法?任何人?什么是显而易见的被忽视的? 提前感谢您的任何建议!

AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
<application    android:label="xxx"
    android:icon="@drawable/xxx" >

<activity   android:name="DataEntry"
    android:label="xxx"
    android:theme="@style/xxx_theme.A" >
...

xxx_theme.A.xml

<style name="xxx_theme" parent="@android:Theme" >
  <item name="android:windowNoTitle">true</item>
</style>

<style name="xxx_theme.A" >
  <item name="android:textViewStyle">@style/xxx_TextView_widget</item>
  <item name="android:editTextStyle">@style/xxx_EditText_widget</item>
  <item name="android:checkboxStyle">@style/xxx_CheckBox_widget</item>
  <item name="android:radioButtonStyle">@style/xxx_Radio_widget</item>
</style>

<style name="xxx_EditText_widget" parent="@android:style/Widget.EditText" >
  <item name="android:textSize">9dp</item>
  <item name="android:layout_height">30dp</item>
  <item name="android:paddingLeft">8dp</item>
  <item name="android:paddingTop">1dp</item>
  <item name="android:paddingBottom">1dp</item>
  <item name="android:textColorHint">@color/texthint</item>
  <item name="android:singleLine">true</item>
  <item name="android:selectAllOnFocus">true</item>
  <item name="android:inputType">textNoSuggestions</item>
</style>
...

【问题讨论】:

尝试为你的样式添加一个 android:layout_width 属性。 感谢@MiguelMorales,但该实验在抱怨我必须声明 layout_width 后导致它崩溃。它几乎就像这些不能是 Widget.EditText 属性,而是别的...... 【参考方案1】:

你有 <item name="android:layout_height">30dp</item> 但你的风格中没有android:layout_width

两者都需要。

【讨论】:

没有雪茄。实际上,不同的雪茄。在样式中指定并从第一个 EditText 中删除后,它现在抱怨(崩溃)“...必须指定 layout_width ...”。我非常感谢你们给了我一个开箱即用的想法,让我知道我一直在想什么。我将不得不看看这是否会在 2.1 之后消失。 嗯,@Jon,它在 2.1、2.2 和 2.3.3 模拟器中的行为相同。将 android:layout_height 和 android:layout_width 从 main.xml 中的 EditText 中删除,并将其设置为 Widget.EditText 样式的属性,它仍然会崩溃,指向我的第一个 EditText 视图实例,因为缺少 layout_width。 如果我样式=布局中的单个 EditText,指向相同的样式,我希望他们通过主题化我的活动继承 EditText 的工作。不太确定我想称之为“修复”,但它使原始问题的定义不同。这是某种主题继承问题,恕我直言。 需要版主的帮助。您的回答绝对准确且有帮助,但原来的问题陈述被证明是错误的。 您可以尝试编辑您的问题,但我不确定您还能做什么:P【参考方案2】:

查看我的回答here。这很可能与您的 styles.xml 文件中缺少属性有关。

【讨论】:

试过这个(在 Android Studio 2.2 RC2 中)。您是对的,缺少 xmlns 标头,但是添加它并进行干净的构建并没有影响问题。 :(

以上是关于“...必须提供 layout_height...” 但它在我的样式资源中吗?的主要内容,如果未能解决你的问题,请参考以下文章