マテリアルのスタイルを設定しようとしていますEditText
ビュー:
<style name="AppTheme.EditText" parent="@style/Widget.AppCompat.EditText">
<item name="Android:textColor">@color/white</item>
<item name="Android:textColorHint">#8AFFFFFF</item>
<item name="colorControlNormal">@color/white</item>
<item name="colorControlActivated">@color/white</item>
<item name="colorControlHighlight">@color/white</item>
</style>
次に、テーマにスタイルを適用します。
<style name="AppTheme">
<item name="editTextStyle">@style/AppTheme.EditText</item>
</style>
そして、テーマをアクティビティに適用します。
<activity
Android:name=".MyActivity"
Android:configChanges="keyboardHidden|orientation|screenSize"
Android:windowSoftInputMode="stateAlwaysHidden"
Android:theme="@style/AppTheme">
ただし、これは下線の色を変更するものではありません。
アクセントカラーを変更して下線の色を変更できることは知っていますが、他のいくつかのコントロールではアクセントカラーを変える必要があるため、これは行いたくありません。
コントロールの下線の色をこのようにスタイル設定できますか?
機能しない理由:colorControlNormal
はthemeの属性であり、Android:textColor
はstyle属性です。 colorControlNormal
を変更するには、Themeをオーバーライドする必要があり、Android:textColor
値を変更するには、styleをオーバーライドする必要があります。 @style/Widget.AppCompat.EditText
またはその親にはcolorControlNormal
という名前の属性はありません。したがって、これを行うときは何もオーバーライドしません。
<style name="AppTheme.EditText" parent="@style/Widget.AppCompat.EditText">
<item name="colorControlNormal">@color/white</item>
</style>
解決策:colorControlNormal
の値を実際に変更するには、テーマで値を変更する必要があります。アクティビティのテーマを変更せずにそれを行うには、次のことができます。
1 /変更するテーマ属性のみを使用してThemeOverlayを作成します。
<style name="AppTheme.EditText">
<item name="colorControlNormal">@color/white</item>
</style>
2/EditText
ビューでのみ使用します。
<EditText
Android:layout_width="match_parent"
Android:theme="@style/AppTheme.EditText"
/>
ここで実際に行われているのは、ビューのテーマ属性(存在する場合)が使用されることです。アクティビティのテーマはフォールバックとして使用されます。
アクティビティのテーマのcolorControlNormal
をいつでも変更して、アクティビティ全体に影響を与えることができます。
ここでは、以下の手順に従うだけで完了です。
ステップ1:スタイルを作成する
Android:textCursorDrawable
属性を@nullに設定すると、カーソルの色としてAndroid:textColor
が使用されます。
<style name="editTextTheme" parent="@style/Widget.AppCompat.EditText">
<item name="Android:textColorHint">@color/white</item>
<item name="colorControlNormal">@color/white</item>
<item name="colorControlActivated">@color/white</item>
<item name="colorControlHighlight">@color/white</item>
<item name="colorAccent">@color/white</item>
<item name="Android:textCursorDrawable">@null</item>
<item name="Android:textColorPrimary">@color/white</item>
</style>
ステップ2:そのスタイルをテーマとして使用する
<style name="MyTheme">
<item name="theme">@style/editTextTheme</item>
</style>
ステップ3:そのテーマをコンポーネントに実装する
<Android.support.v7.widget.AppCompatEditText
Android:id="@+id/editText"
style="@style/MyTheme"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:hint="Enter Name"
Android:inputType="textPersonName" />
あなたのstyle.xml:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="editTextStyle">@style/MyEditTextStyle</item>
</style>
<style name="MyEditTextStyle" parent="@style/Widget.AppCompat.EditText">
<item name="Android:textColor">#FF0</item>
</style>
<style name="AppTheme.MyEditTextTheme">
<item name="Android:textColorHint">#8AFFFFFF</item>
<item name="colorControlNormal">#FF0</item>
<item name="colorControlActivated">#FF0</item>
<item name="colorControlHighlight">#FF0</item>
</style>
次に、EditTextのテーマとしてMyEditTextThemeを適用します。
<EditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/AppTheme.MyEditTextTheme"/>
これで、このEditTextでのみ黄色の下線が表示されます。また、MyEditTextThemeでcolorAccentを変更できますが、AppThemeのcolorAccent値は変更されません。
この解決策は私のために働いています。 sこれは、edittextスタイルテーマのcolorControlActivated
、colorControlHighlight
、およびcolorControlNormal
の値をオーバーライドするだけで構成されます。他の考えとしては、カーソルの色も変更したい場合は、_Android:textCursorDrawable
_このプロパティを使用します。このエディットテキストスタイルもstyle.xml(v21)
に入れました。それなら、このテーマを好きなアクティビティに使用することを考えてください。以下に例を示します。
最初の解決策
_<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!--Edittext theme -->
<item name="editTextStyle">@style/App_EditTextStyle</item>
</style>
<style name="App_EditTextStyle" parent="@style/Widget.AppCompat.EditText">
<item name="Android:textColor">@color/white</item>
<item name="Android:textColorHint">@color/black</item>
<item name="colorControlNormal">@color/white</item>
<item name="colorControlActivated">@color/white</item>
<item name="colorControlHighlight">@color/white</item>
<item name="Android:backgroundTint" >@color/white</item>
<item name="backgroundTint">@color/white</item>
<item name="Android:textCursorDrawable">@color/white</item>
</style>
_
その他の解決策
プログラムで設定することもできます。これがAPI <21以上のソリューションです
_Drawable drawable = yourEditText.getBackground(); // get current EditText drawable
drawable.setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP); // change the drawable color
if(Build.VERSION.SDK_INT > 16) {
yourEditText.setBackground(drawable); // set the new drawable to EditText
}else{
yourEditText.setBackgroundDrawable(drawable); // use setBackgroundDrawable because setBackground required API 16
}
_
次の手順で下線の色を変更できます。
<style name="AppTheme.EditText" parent="@style/Widget.AppCompat.EditText">
<item name="Android:textColor">@color/white</item>
<item name="Android:textColorHint">#8AFFFFFF</item>
<item name="Android:backgroundTint">@color/white</item>
<item name="backgroundTint">@color/white</item>
</style>
Android Studioの警告を回避するために、item
名前空間を含むAndroid
を独自のstyles-v21.xml
ファイルに配置する必要がありますが、100%必要というわけではありません。 。これをAPI19エミュレーターでテストしたところ、問題なく動作し、クラッシュは発生しませんでした。