“android:theme”属性忽略重力

时间:2016-08-27 19:22:02

标签: android android-layout android-edittext android-styles

有我的app_style.xml

<style name="EditText.LargePassword" parent="Widget.AppCompat.EditText">
    <item name="android:gravity">center_horizontal</item>
    <item name="android:imeOptions">flagNoExtractUi</item>
    <item name="android:inputType">numberPassword</item>

    <item name="android:textColorPrimary">@color/white</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:textColorHint">@color/white</item>
    <item name="android:textSize">56sp</item>

    <item name="colorControlNormal">@color/white</item>
    <item name="colorControlActivated">@color/white</item>
    <item name="colorControlHighlight">@color/white</item>
</style>

部分布局:

<EditText
    android:id="@+id/password_edit_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="@dimen/giant_margin"
    android:layout_marginRight="@dimen/giant_margin"
    android:theme="@style/EditText.LargePassword"
    tools:text="12345"
    tools:ignore="TextFields"
    />

如您所见,我通过EditText.LargePassword属性应用android:theme样式:

via android:theme

存在问题:应用了每个属性,android:gravity除外。

好的,让我们试试style属性:

style="@style/EditText.LargePassword"

轰!指标和光标消失了:

enter image description here

但现在android:gravity="center_horizontal"有效。

在我阅读时,style == theme,但style不适用于View的孩子。有什么不同吗?这是一个错误吗?

1 个答案:

答案 0 :(得分:3)

类似的样式和主题并不完全相同。样式仅适用于一个特定视图,而主题将应用于View / ViewGroup / Activity及其所有子项。

在您的情况下,您实际上是将样式和主题的属性混合到一个设置中,这就是它无法正常工作的原因。要获得两者,您需要获取三个colorControl属性并将它们定义为主题:

<style name="LargePasswordTheme" >
    <item name="colorControlNormal">@color/white</item>
    <item name="colorControlActivated">@color/white</item>
    <item name="colorControlHighlight">@color/white</item>
</style>

其余的可以作为一种风格。然后你可以将这个和你的风格添加到EditText:

<EditText
    android:id="@+id/password_edit_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="@dimen/giant_margin"
    android:layout_marginRight="@dimen/giant_margin"
    android:theme="@style/LargePasswordTheme"
    android:style="@style/EditText.LargePassword"
    tools:text="12345"
    tools:ignore="TextFields"
    />

可以找到herehere进行详细解释的进一步阅读。