サポートライブラリ(23.0.1)を使用してボーダレスフラットボタンを作成しています。 Lollipopでは正常に動作します。しかし、Lollipopより前のボタンを押すと、通常のボタンのように色がcolorButtonNormal
に変わります。
私はそうは思わないので、それは正常な動作であり、フォーカスされた色はロリポップのように灰色になるはずです。
これがLollipopとPre-Lollipopのスクリーンショットです。
Lollipopの最初の通常の動作:通常の状態とLollipopにフォーカスした状態のボーダーレスボタン
Pre-Lollipopでの通常の動作ではない(Desireの色は上記のように灰色ですが、そうではありません):Pre-Lollipopでのボーダーレスボタンの通常の状態とフォーカスされた状態-
テーマ
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
//other stuff
<item name="colorButtonNormal">@color/orangeColor</item>
<item name="buttonBarButtonStyle">@style/BorderlessButtonStyle</item>
</style>
<style name="BorderlessButtonStyle" parent="Widget.AppCompat.Button.Borderless">
<item name="Android:textColor">@color/blueTextColor</item>
</style>
そして今レイアウトのボタン:
<Button
Android:id="@+id/btnForgotPassword"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/forgot_your_password"
style="?attr/buttonBarButtonStyle"
/>
個別のDrawableを作成せずに、AppCompatテーマとスタイルを使用して書き込む方法。
Borderless ButtonはPost LibraryとPre Lollipopの両方のバージョンでSupport Libraryを使用できますが、onPressedの色にはわずかな違いがあります。
プリロリポップ:デフォルトでは、onPressedの色はcolorButtonNormal
を使用して設定されたデフォルトのボタンの色と同じです。
ロリポップ:デフォルトでは、onPressedの色はライトグレーで理想的です。
次のようにボーダーレスボタンを作成できます。
<Button
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Name"
style="@style/Widget.AppCompat.Button.Borderless"/>
すべてのバージョンで同じonPressed色を使用したい場合は、colorControlHighlight
を新しいテーマに設定し、そのテーマをボタンに設定できます。
<Button
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Name"
Android:theme="@style/BorderlessButton"
style="@style/Widget.AppCompat.Button.Borderless"/>
そしてあなたのスタイルのテーマ:
<style name="BorderlessButton" parent="Theme.AppCompat.Light">
<item name="colorControlHighlight">YOUR COLOR</item>
</style>
更新済み:View
にはAndroid:theme
属性を使用できます。これは、Android 5.0 LollipopおよびAppCompat v22.1.0以降)であるためです。
Button
にstyle="?borderlessButtonStyle"
を追加するとうまくいきました。
Android "buttonBarButtonStyle"の実装スタイルを使用しています。これは、?atr
を介して呼び出すためです。代わりにstyle="@style/BorderlessButtonStyle
を使用してください。
編集:xmlはそのままにしますが、次のように目的の動作に変更できます。
AppCompatButton button = (AppCompatButton) findViewById(R.id.btnForgotPassword);
ColorStateList colorStateList = new ColorStateList(new int[][] {{0}}, new int[] {0xFF969696});
//969696 is your wanted grey color, just change it
button.setSupportBackgroundTintList(colorStateList);
なぜこれでうまくいくのかと心配するのですか
<Button
Android:id="@+id/btnForgotPassword"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/forgot_your_password"
Android:background="@drawable/abc_btn_borderless_material"
/>
そして今APIのものについて不注意