web-dev-qa-db-ja.com

サポートライブラリ付きのプレロリポップのボーダーレスボタン

サポートライブラリ(23.0.1)を使用してボーダレスフラットボタンを作成しています。 Lollipopでは正常に動作します。しかし、Lollipopより前のボタンを押すと、通常のボタンのように色がcolorButtonNormalに変わります。

私はそうは思わないので、それは正常な動作であり、フォーカスされた色はロリポップのように灰色になるはずです。

これがLollipopとPre-Lollipopのスクリーンショットです。

Lollipopの最初の通常の動作:通常の状態とLollipopにフォーカスした状態のボーダーレスボタン

enter image description here

Pre-Lollipopでの通常の動作ではない(Desireの色は上記のように灰色ですが、そうではありません):Pre-Lollipopでのボーダーレスボタンの通常の状態とフォーカスされた状態- enter image description here

テーマ

<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テーマとスタイルを使用して書き込む方法。

15
Sharj

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以降)であるためです。

24
Sharj

Buttonstyle="?borderlessButtonStyle"を追加するとうまくいきました。

3
arekolek

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);
0
yennsarah

なぜこれでうまくいくのかと心配するのですか

<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のものについて不注意

0
Elltz