最近、サポートライブラリからcom.google.Android.material:material:1.0.0に切り替えました
しかし今、私は問題を抱えています、このページには注意事項があります https://github.com/material-components/material-components-Android/blob/master/docs/getting-started.md
注:マテリアルコンポーネントテーマを使用すると、デフォルトのコンポーネントを対応するマテリアルに置き換えるカスタムビューインフレータが有効になります。現在、これはButton XMLコンポーネントのみをMaterialButtonに置き換えます。
そして、私が使用しているテーマ
Theme.MaterialComponents.Light.NoActionBar
そのメモで述べられているとおりに、AlertDialog ButtonsをMaterialButtonsに置き換えますが、問題はデフォルトでMaterialButtonsが背景色になり、ボタンが次のようになることです:
どうすればボーダーレスやバックグラウンドレスにできますか?
PSアラートビルダーを使用してアラートダイアログを作成しています。
Android.app.AlertDialog.Builder
この問題の原因を突き止めました。別のAlertDialogクラスを使用する必要があります。
androidx.appcompat.app.AlertDialog
これに切り替えると、すべてが期待どおりに動作し始めました。私が解決策を見つけた場所は次のとおりです。
https://github.com/material-components/material-components-Android/issues/162
com.google.Android.material:material:1.0.0
およびandroidx.appcompat.app.AlertDialog
を使用する場合、Widget.MaterialComponents.Button.TextButton
を親として使用して、buttonBar
の各ボタンをカスタマイズできます。
val builder: AlertDialog.Builder = AlertDialog.Builder(ContextThemeWrapper(context, R.style.AlertDialogTheme))
デフォルトのレイアウトを使用するか、builder.setView(R.layout.my_dialog)
でカスタムを追加します
あなたのスタイルで:
<style name="AlertDialogTheme" parent="Theme.MaterialComponents.Light.Dialog.Alert">
<item name="buttonBarPositiveButtonStyle">@style/Alert.Button.Positive</item>
<item name="buttonBarNegativeButtonStyle">@style/Alert.Button.Neutral</item>
<item name="buttonBarNeutralButtonStyle">@style/Alert.Button.Neutral</item>
</style>
<style name="Alert.Button.Positive" parent="Widget.MaterialComponents.Button.TextButton">
<item name="backgroundTint">@color/transparent</item>
<item name="rippleColor">@color/colorAccent</item>
<item name="Android:textColor">@color/colorPrimary</item>
<item name="Android:textSize">14sp</item>
<item name="Android:textAllCaps">false</item>
</style>
<style name="Alert.Button.Neutral" parent="Widget.MaterialComponents.Button.TextButton">
<item name="backgroundTint">@color/transparent</item>
<item name="rippleColor">@color/colorAccent</item>
<item name="Android:textColor">@color/gray_dark</item>
<item name="Android:textSize">14sp</item>
</style>
MaterialComponentsを使用して、このための別のソリューションを見つけました: https://issuetracker.google.com/issues/116861837#comment9
<style name="Theme.Custom.Material.Alert.Dialog.Light" parent="Theme.MaterialComponents.Light.Dialog.Alert">
<item name="materialButtonStyle">@style/Widget.AppCompat.Button.Borderless</item>
</style>
<style name="Theme.Custom.Material.Base.Light" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="Android:dialogTheme">@style/Theme.Custom.Material.Alert.Dialog.Light</item>
<item name="Android:alertDialogTheme">@style/Theme.Custom.Material.Alert.Dialog.Light</item>
....
</style>
それはまだ私にとって「意図された行動」ではありませんが。
androidx.appcompat.app.AlertDialog
を使用したくない場合は、ダイアログボタンのスタイルを再定義できます。
Style.xmlで:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
...
<item name="Android:buttonBarButtonStyle">@style/DialogButton</item>
...
</style>
<style name="DialogButton" parent="Widget.MaterialComponents.Button.TextButton"/>
com.Android.support:design:28.0.0
ライブラリを使用している場合、Android.support.v7.app.AlertDialog
を使用しても期待どおりに機能します。