我有以下对话框
它是使用以下代码创建的
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Random random = new Random();
// 0 or 1.
final int value = random.nextInt(2);
final int title = R.string.we_love_you_0;
final int content = R.string.rate_us_with_5_stars_review_0;
final AlertDialog dialog = new AlertDialog.Builder(this.getActivity())
.setTitle(title)
.setMessage(content)
// Add action buttons
.setPositiveButton(R.string.rate_5_stars, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
})
.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
})
.setNeutralButton(R.string.later, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
})
.create();
dialog.setCanceledOnTouchOutside(false);
return dialog;
}
Run Code Online (Sandbox Code Playgroud)
既然如此,我们想吸引用户注意肯定按钮(“ 5星”)。我们倾向于
我们在返回之前添加以下代码 dialog
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface d) {
Button positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
positiveButton.setTextColor(rateAppDialogPositiveButtonTextColor);
positiveButton.setBackgroundColor(rateAppDialogPositiveButtonBackgroundColor);
}
});
Run Code Online (Sandbox Code Playgroud)
我们得到以下结果
它没有实现我们想要的
这是在按下普通按钮的情况下进行的比较。就我们而言,当我们按下肯定按钮时,没有视觉变化。
是否有适当的方法来更改材质设计的对话框正按钮背景,而又不丢失其默认边距,填充和波纹选择器行为?
通过参考/sf/answers/1925366061/,我能够更改正按钮的背景,而不影响其默认边距、填充和选择器行为。
请注意,我们不使用colorButtonNormal,因为无法在 Java 代码中更改按钮样式。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Default insets (outer padding) around buttons -->
<dimen name="button_inset_vertical_material">6dp</dimen>
<dimen name="button_inset_horizontal_material">@dimen/control_inset_material</dimen>
<!-- Default inner padding within buttons -->
<dimen name="button_padding_vertical_material">@dimen/control_padding_material</dimen>
<dimen name="button_padding_horizontal_material">8dp</dimen>
<!-- Default insets (outer padding) around controls -->
<dimen name="control_inset_material">4dp</dimen>
<!-- Default inner padding within controls -->
<dimen name="control_padding_material">4dp</dimen>
<!-- Default rounded corner for controls -->
<dimen name="control_corner_material">2dp</dimen>
</resources>
Run Code Online (Sandbox Code Playgroud)
<color name="rate_app_dialog_positive_button_text_color_material_light">#ffffffff</color>
<color name="rate_app_dialog_positive_button_background_color_material_light">#ff0091ea</color>
<color name="rate_app_dialog_positive_button_pressed_background_color_material_light">#7f0091ea</color>
Run Code Online (Sandbox Code Playgroud)
<attr name="rateAppDialogPositiveButtonTextColor" format="color" />
<attr name="rateAppDialogPositiveButtonSelector" format="color" />
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<!-- Used as the canonical button shape. -->
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/button_inset_horizontal_material"
android:insetTop="@dimen/button_inset_vertical_material"
android:insetRight="@dimen/button_inset_horizontal_material"
android:insetBottom="@dimen/button_inset_vertical_material">
<shape android:shape="rectangle"
android:tint="@color/rate_app_dialog_positive_button_background_color_material_light">
<corners android:radius="@dimen/control_corner_material" />
<solid android:color="#ffffffff" />
<padding android:left="@dimen/button_padding_horizontal_material"
android:top="@dimen/button_padding_vertical_material"
android:right="@dimen/button_padding_horizontal_material"
android:bottom="@dimen/button_padding_vertical_material" />
</shape>
</inset>
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<!-- /sf/ask/1993905861/ -->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/ripple_material_dark">
<!-- @color/ripple_material_light -->
<!-- @color/ripple_material_dark -->
<item android:drawable="@drawable/rate_app_dialog_positive_button_selector_for_ripple_material_light" />
</ripple>
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- pressed state -->
<item android:state_pressed="true">
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/button_inset_horizontal_material"
android:insetTop="@dimen/button_inset_vertical_material"
android:insetRight="@dimen/button_inset_horizontal_material"
android:insetBottom="@dimen/button_inset_vertical_material">
<shape android:shape="rectangle">
<corners android:radius="@dimen/control_corner_material" />
<solid android:color="@color/rate_app_dialog_positive_button_pressed_background_color_material_light" />
<padding android:left="@dimen/button_padding_horizontal_material"
android:top="@dimen/button_padding_vertical_material"
android:right="@dimen/button_padding_horizontal_material"
android:bottom="@dimen/button_padding_vertical_material" />
</shape>
</inset>
</item>
<!-- focused state -->
<item android:state_focused="true">
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/button_inset_horizontal_material"
android:insetTop="@dimen/button_inset_vertical_material"
android:insetRight="@dimen/button_inset_horizontal_material"
android:insetBottom="@dimen/button_inset_vertical_material">
<shape android:shape="rectangle">
<corners android:radius="@dimen/control_corner_material" />
<solid android:color="@color/rate_app_dialog_positive_button_pressed_background_color_material_light" />
<padding android:left="@dimen/button_padding_horizontal_material"
android:top="@dimen/button_padding_vertical_material"
android:right="@dimen/button_padding_horizontal_material"
android:bottom="@dimen/button_padding_vertical_material" />
</shape>
</inset>
</item>
<!-- normal state -->
<item>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/button_inset_horizontal_material"
android:insetTop="@dimen/button_inset_vertical_material"
android:insetRight="@dimen/button_inset_horizontal_material"
android:insetBottom="@dimen/button_inset_vertical_material">
<shape android:shape="rectangle">
<corners android:radius="@dimen/control_corner_material" />
<solid android:color="@color/rate_app_dialog_positive_button_background_color_material_light" />
<padding android:left="@dimen/button_padding_horizontal_material"
android:top="@dimen/button_padding_vertical_material"
android:right="@dimen/button_padding_horizontal_material"
android:bottom="@dimen/button_padding_vertical_material" />
</shape>
</inset>
</item>
</selector>
Run Code Online (Sandbox Code Playgroud)
<item name="rateAppDialogPositiveButtonTextColor">@color/rate_app_dialog_positive_button_text_color_material_light</item>
<item name="rateAppDialogPositiveButtonSelector">@drawable/rate_app_dialog_positive_button_selector_material_light</item>
Run Code Online (Sandbox Code Playgroud)
TypedValue typedValue = new TypedValue();
Resources.Theme theme = this.getContext().getTheme();
theme.resolveAttribute(R.attr.rateAppDialogPositiveButtonTextColor, typedValue, true);
final int rateAppDialogPositiveButtonTextColor = typedValue.data;
theme.resolveAttribute(R.attr.rateAppDialogPositiveButtonSelector, typedValue, true);
final int rateAppDialogPositiveButtonSelectorResourceId = typedValue.resourceId;
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface d) {
Button positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
positiveButton.setTextColor(rateAppDialogPositiveButtonTextColor);
positiveButton.setBackgroundResource(rateAppDialogPositiveButtonSelectorResourceId);
}
});
Run Code Online (Sandbox Code Playgroud)
这对于 Android 4 及以上版本非常有效。
| 归档时间: |
|
| 查看次数: |
1704 次 |
| 最近记录: |