"android:theme" 属性忽略重力
"android:theme" attribute ignore gravity
有我的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"
/>
如您所见,我通过 android:theme
属性应用 EditText.LargePassword
样式:
存在一个问题:应用了每个属性,除了 android:gravity
。
好的,让我们试试 style
属性:
style="@style/EditText.LargePassword"
轰!指示器和光标不见了:
但现在 android:gravity="center_horizontal"
有效。
据我阅读,style
== theme
,但 style
不适用于 children View
。有什么不同吗?这是一个错误吗?
样式和主题虽然相似但并不完全相同。样式仅适用于一个特定视图,而主题将适用于 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"
/>
有我的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"
/>
如您所见,我通过 android:theme
属性应用 EditText.LargePassword
样式:
存在一个问题:应用了每个属性,除了 android:gravity
。
好的,让我们试试 style
属性:
style="@style/EditText.LargePassword"
轰!指示器和光标不见了:
但现在 android:gravity="center_horizontal"
有效。
据我阅读,style
== theme
,但 style
不适用于 children View
。有什么不同吗?这是一个错误吗?
样式和主题虽然相似但并不完全相同。样式仅适用于一个特定视图,而主题将适用于 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"
/>