デフォルトのandroid AlertDialog
からappCompat-22.1に含まれる新しいandroidに移行しようとしています。これまでのところ、android.support.v7.app.AlertDialog
パッケージをインポートするだけで使用できることを理解しています。
しかし、どのようにスタイルを設定できますか?たとえば、正/負のボタンの色、タイトルの色、メッセージの色、背景色を変更しますか?
デフォルトのandroid AlertDialog
からappCompat-22.1に含まれる新しいandroidに移行しようとしています。これまでのところ、android.support.v7.app.AlertDialog
パッケージをインポートするだけで使用できることを理解しています。
しかし、どのようにスタイルを設定できますか?たとえば、正/負のボタンの色、タイトルの色、メッセージの色、背景色を変更しますか?
回答:
作成時に、AlertDialog
使用するテーマを設定できます。
例-ダイアログの作成
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle);
builder.setTitle("AppCompatDialog");
builder.setMessage("Lorem ipsum dolor...");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();
styles.xml-カスタムスタイル
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Used for the buttons -->
<item name="colorAccent">#FFC107</item>
<!-- Used for the title and text -->
<item name="android:textColorPrimary">#FFFFFF</item>
<!-- Used for the background -->
<item name="android:background">#4CAF50</item>
</style>
結果
編集する
タイトルの外観を変更するには、次の操作を実行できます。最初に新しいスタイルを追加します。
<style name="MyTitleTextStyle">
<item name="android:textColor">#FFEB3B</item>
<item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
</style>
その後、単にあなたの中でこのスタイルを参照してくださいMyAlertDialogStyle
:
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
...
<item name="android:windowTitleStyle">@style/MyTitleTextStyle</item>
</style>
このようにして、スタイルを介してtextColor
メッセージにandroid:textColorPrimary
別のタイトルを、タイトルに別のを定義できます。
appcompat-v7
、新しいコンポーネントの下位互換性をAPIレベル7(Android 2.1)に
すべてのアプリケーションにテーマを使用し、2番目のパラメーターを使用してダイアログのスタイルを設定しない
<style name="MyTheme" parent="Base.Theme.AppCompat.Light">
<item name="alertDialogTheme">@style/dialog</item>
<item name="colorAccent">@color/accent</item>
</style>
<style name="dialog" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">@color/accent</item>
</style>
テーマでカラーアクセントを使用するアプリで、alertDialogのボタンにテーマcolorAccentが表示されないテーマにダイアログスタイルを追加する必要があります。
新しいandroid.support.v7.app.AlertDialogを使用し、ボタンに異なる色を使用し、カスタムレイアウトも使用する場合は、https://gist.github.com/JoachimR/6bfbc175d5c8116d411eをご覧ください。
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.custom_layout, null);
initDialogUi(v);
final AlertDialog d = new AlertDialog.Builder(activity, R.style.AppCompatAlertDialogStyle)
.setTitle(getString(R.string.some_dialog_title))
.setCancelable(true)
.setPositiveButton(activity.getString(R.string.some_dialog_title_btn_positive),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
doSomething();
dismiss();
}
})
.setNegativeButton(activity.getString(R.string.some_dialog_title_btn_negative),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
})
.setView(v)
.create();
// change color of positive button
d.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
Button b = d.getButton(DialogInterface.BUTTON_POSITIVE);
b.setTextColor(getResources().getColor(R.color.colorPrimary));
}
});
return d;
}
Builder setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener)
。アダプターをサブクラス化し、そこでビューを調整することはしたくありません。
@reVerseの回答に従ってくださいが、私の場合、私はすでにいくつかのプロパティがAppTheme
好きでした
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="android:textColor">#111</item>
<item name="android:textSize">13sp</item>
</style>
私はそれを解決しました
1)インポートandroid.app.AlertDialog
を
android.support.v7.app.AlertDialog
2に変更します。2)プロパティAppTheme
をnull値でオーバーライドします。
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Used for the buttons -->
<item name="colorAccent">#FFC107</item>
<!-- Used for the title and text -->
<item name="android:textColorPrimary">#FFFFFF</item>
<!-- Used for the background -->
<item name="android:background">#4CAF50</item>
<item name="android:textColor">@null</item>
<item name="android:textSize">@null</item>
</style>
。
AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.MyAlertDialogStyle);
それが他の人々を助けることを願って
私のような場合は、AppCompatの一部の色を変更するだけで、ダイアログで一意に変更する必要がある唯一の色は背景です。次に、に色を設定するだけですcolorBackgroundFloating
。
これは、ネストされたテーマなしでいくつかの色を単に変更する私の基本的なテーマです:
<style name="AppTheme" parent="Theme.AppCompat">
<item name="colorPrimary">@color/theme_colorPrimary</item>
<item name="colorPrimaryDark">@color/theme_colorPrimaryDark</item>
<item name="colorAccent">@color/theme_colorAccent</item>
<item name="colorControlActivated">@color/theme_colorControlActivated</item>
<item name="android:windowBackground">@color/theme_bg</item>
<item name="colorBackgroundFloating">@color/theme_dialog_bg</item><!-- Dialog background color -->
<item name="colorButtonNormal">@color/theme_colorPrimary</item>
<item name="colorControlHighlight">@color/theme_colorAccent</item>
</style>
<item name="editTextColor">@color/white</item>
<item name="android:textColor">@color/white</item>
<item name="android:textColorHint">@color/gray</item>
<item name="android:textColorPrimary">@color/gray</item>
<item name="colorControlNormal">@color/gray</item>
<item name="colorControlActivated">@color/white</item>
<item name="colorControlHighlight">#30FFFFFF</item>