Android - AppCompatEditText 主题未在片段内部应用
Android - AppCompatEditText theme doesn't get applied inside of fragment
我已将新的应用程序兼容库 'com.android.support:appcompat-v7:22.1.0' 添加到我的项目中,但似乎无法将主题应用于 AppCompatEditText,当它在一个片段中。
这是我的 EditText:
<android.support.v7.widget.AppCompatEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:textColor="@color/teal_300"
android:textCursorDrawable="@null"
android:textColorHint="@color/text_hint"
style="@style/TextAppearance.AppCompat.Display1"
android:theme="@style/Theme.MyTheme.EditText"/>
这是主题:
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/teal_500</item>
<item name="colorPrimaryDark">@color/teal_700</item>
<item name="colorAccent">@color/orange_500</item>
<item name="colorControlNormal">@color/grey</item>
<item name="colorControlActivated">@color/teal_300</item>
<item name="colorControlHighlight">@color/teal_300</item>
<item name="colorSwitchThumbNormal">@color/teal_300</item>
</style>
<style name="Theme.MyTheme.EditText" parent="Theme.MyTheme">
<item name="colorControlNormal">@color/orange_500</item>
<item name="colorControlActivated">@color/orange_500</item>
</style>
所以基本上我只是想将 EditText 的下划线颜色更改为橙色而不是 grey/teal。
当我将这段代码直接放在 activity 的布局中时,它工作得很好,所以下划线是橙色的。但是如果我将相同的代码放在片段的布局中,下划线是 grey/teal。所以主题似乎没有得到应用。
谢谢
您应该为 EditText 使用样式而不是主题,例如:
<style name="EditText" parent="Widget.AppCompat.EditText">
<item name="colorControlNormal">@color/orange_500</item>
<item name="colorControlActivated">@color/orange_500</item>
<item name="android:textAppearance">@style/TextAppearance.AppCompat.Display1</item>
</style>
比只应用样式而不应用主题。
这是 22.1 引入的问题
当您使用传递给 Fragment#onCreateView() 的 inflater 实例时出现问题。
目前的解决方法是改用 getActivity().getLayoutInflater() 中的 LayoutInflater。
我已将新的应用程序兼容库 'com.android.support:appcompat-v7:22.1.0' 添加到我的项目中,但似乎无法将主题应用于 AppCompatEditText,当它在一个片段中。
这是我的 EditText:
<android.support.v7.widget.AppCompatEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:textColor="@color/teal_300"
android:textCursorDrawable="@null"
android:textColorHint="@color/text_hint"
style="@style/TextAppearance.AppCompat.Display1"
android:theme="@style/Theme.MyTheme.EditText"/>
这是主题:
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/teal_500</item>
<item name="colorPrimaryDark">@color/teal_700</item>
<item name="colorAccent">@color/orange_500</item>
<item name="colorControlNormal">@color/grey</item>
<item name="colorControlActivated">@color/teal_300</item>
<item name="colorControlHighlight">@color/teal_300</item>
<item name="colorSwitchThumbNormal">@color/teal_300</item>
</style>
<style name="Theme.MyTheme.EditText" parent="Theme.MyTheme">
<item name="colorControlNormal">@color/orange_500</item>
<item name="colorControlActivated">@color/orange_500</item>
</style>
所以基本上我只是想将 EditText 的下划线颜色更改为橙色而不是 grey/teal。
当我将这段代码直接放在 activity 的布局中时,它工作得很好,所以下划线是橙色的。但是如果我将相同的代码放在片段的布局中,下划线是 grey/teal。所以主题似乎没有得到应用。
谢谢
您应该为 EditText 使用样式而不是主题,例如:
<style name="EditText" parent="Widget.AppCompat.EditText">
<item name="colorControlNormal">@color/orange_500</item>
<item name="colorControlActivated">@color/orange_500</item>
<item name="android:textAppearance">@style/TextAppearance.AppCompat.Display1</item>
</style>
比只应用样式而不应用主题。
这是 22.1 引入的问题
当您使用传递给 Fragment#onCreateView() 的 inflater 实例时出现问题。
目前的解决方法是改用 getActivity().getLayoutInflater() 中的 LayoutInflater。