web-dev-qa-db-ja.com

AppCompatマテリアルボタンのスタイルをカスタマイズする方法

AppCompatテーマを使用していて、ボタンにminHeight属性を設定します。

<style name="Theme.MyTheme" parent="Theme.AppCompat">
    <item name="Android:buttonStyle">@style/MyButtonStyle</item>
</style>

<style name="MyButtonStyle" parent="...?">
    <item name="Android:minHeight">60dp</item>
</style>

ただし、MyButtonStyleの親として設定するWidget.AppCompat.Buttonスタイルはありません。 Android:Widget.Buttonを使用すると、すべてのボタンが古い安っぽいスタイルのように見えます。 TextAppearance.AppCompat.Buttonなどの他のさまざまなAppCompatテーマを試しましたが、機能しません。

ボタンスタイルの親テーマを除外すると、ボタンのスタイルが正しく設定されなくなります。

デフォルトのTheme.AppCompatbuttonStyleをカスタマイズするにはどうすればよいですか?

13
Jeff Mixon

あなたが持つことができます Base.MyButtonStyle拡張Android:Widget.Holo.Button AP​​I 14以降(res/values-v14/styles.xml)およびAndroid:Widget.Material.Button AP​​I 21以降(res/values-v21/styles.xml。このスタイルは、デバイスのシステムバージョンによって異なります。ここにプラットフォーム固有の変更を加えます。

次にMyButtonStyleを拡張しますBase.MyButtonStyleを定義し、Android:minHeightここ(res/values/styles.xml)。これはすべてのプラットフォームに適用されます。

ボタンはスタイルMyButtonStyleを使用できます。

この例では、最小SDKが14であると想定しています。

はい、appcompat-v7ボタンスタイルはありません(少なくとも、まだです)。

[〜#〜]編集[〜#〜]

これは、Lollipopより古いプラットフォームのHoloボタンで問題ないと想定しています。それは邪魔にならない感じがして、波紋なしでできるなら、それはうまくいくはずです。波紋が必要な場合は、サードパーティのLollipopボタンライブラリをグーグル検索することをお勧めします。

3
Eugen Pechanec

私自身の質問に答えるために、それは表示されます AppCompatは実際にはサポートしていません 現在Buttonウィジェット:

AppCompatは、UIウィジェットのサブセットに対して、Androidの以前のバージョンで同様の動作を提供します。

  • AppCompatのツールバーによって提供されるすべてのもの(アクションモードなど)
  • EditText
  • スピナー
  • チェックボックス
  • ラジオボタン
  • スイッチ(新しいAndroid.support.v7.widget.SwitchCompatを使用)
  • CheckedTextView

私が目にする唯一の回避策は、Androidソースコードからマテリアルボタンのスタイルを再作成することです。これは、私の望みの範囲外に広がるタスクです。

4
Jeff Mixon

Styles.xmlでAppCompat +22を使用したカスタムボタンスタイル

<style name="Button.Tinted" parent="Widget.AppCompat.Button">
        <item name="colorButtonNormal">YOUR_TINT_COLOR</item>
        <item name="colorControlHighlight">@color/colorAccent</item>
        <item name="Android:textColor">@Android:color/white</item> </style>

あなたのlayout.xmlで

<Button
        Android:id="@+id/but_next"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="@string/but_continue"
        Android:theme="@style/Button.Tinted" />
3
ingyesid

新しいMaterialComponentを使用すると、com.google.Android.material.button.MaterialButton通常のButtonの代わりに。

しかし、スタイルを設定するために、テーマには別の属性materialButtonStyleが使用され、この親テーマTheme.MaterialComponents.DayNight.NoActionBar

すると、テーマは次のようになります。

<style name="NewAppTheme" 
       parent="Theme.MaterialComponents.DayNight.NoActionBar">
    .......
    <-- IMPORTANT if you are using com.google.Android.material.button.MaterialButton to style them use this parameter
    <item name="materialButtonStyle">@style/ButtonStyle</item>
</style>

ButtonStyleでは、次のようにボタンの属性を変更できます。

<style name="ButtonStyle" parent="Widget.MaterialComponents.Button.UnelevatedButton">
    <item name="Android:minHeight">60dp</item>
</style>
1

Android:を削除します

<style name="Theme.MyTheme" parent="Theme.AppCompat">
    <item name="buttonStyle">@style/MyButtonStyle</item>
</style>

https://stackoverflow.com/a/323638

0