我在Android Oreo 8.0上的AlertDialogs中的操作按钮,普通的AlertDilogs或PreferenceFragment中的AlertDialogs(例如EditTextPreference)中存在问题。
无论对话框或支持库的类型如何,问题都出现在所有弹出窗口中
这是API 23中的EditTextPreference完美运行
这是Android Oreo 8.0按钮隐藏或白色
这是我的样式文件
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowContentTransitions">true</item>
<item name="android:buttonStyle">@style/RoundedButtons</item>
<item name="buttonStyle">@style/RoundedButtons</item>
<item name="android:fontFamily">@font/roboto_regular</item>
<item name="android:windowActionBarOverlay">true</item>
<item name="android:dialogTheme">@style/DatePickerTheme</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light">
<item name="android:background">@drawable/cuju_gradient_background</item>
</style>
<style name="RoundedButtons" parent="Widget.AppCompat.Button">
<item name="android:background">@drawable/rounded_gradient_bg</item>
<item name="android:padding">4dp</item>
<item name="android:textSize">20sp</item>
<item name="android:minHeight">48dp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textAllCaps">false</item>
</style>
<style name="HollowButtons" parent="Widget.AppCompat.Button.Borderless.Colored">
<item name="android:background">@drawable/rounded_hollow_botton</item>
<item name="android:textColor">@android:color/white</item>
<item name="android:textAllCaps">false</item>
</style>
<style name="HollowRegisterButtons" parent="Widget.AppCompat.Button.Borderless.Colored">
<item name="android:background">@drawable/registration_hollow_botton</item>
<item name="android:minHeight">56dp</item>
<item name="android:textColor">@color/startColor</item>
<item name="android:textAllCaps">false</item>
</style>
<style name="HollowButtonsLeaderBoard" parent="Widget.AppCompat.Button.Borderless.Colored">
<item name="android:background">@drawable/rounded_hollow_leaderboard_botton</item>
<item name="android:textColor">@color/colorPrimaryDark</item>
<item name="android:paddingStart">20dp</item>
<item name="android:paddingLeft">20dp</item>
<item name="android:paddingEnd">20dp</item>
<item name="android:paddingRight">20dp</item>
<item name="android:maxHeight">36dp</item>
<item name="android:maxButtonHeight">36dp</item>
<item name="android:textSize">14sp</item>
<item name="android:textAllCaps">false</item>
</style>
<style name="HollowButtonsTags" parent="Widget.AppCompat.Button.Borderless.Colored">
<item name="android:background">@drawable/rounded_hollow_tags_button</item>
<item name="android:textColor">@android:color/white</item>
<item name="android:textAllCaps">false</item>
</style>
<style name="RegisterRoundedButtons" parent="Widget.AppCompat.Button">
<item name="android:background">@drawable/white_rounded_rectangle</item>
<item name="android:textColor">@android:color/black</item>
<item name="android:paddingLeft">16dp</item>
<item name="android:paddingRight">16dp</item>
<item name="android:paddingStart">16dp</item>
<item name="android:paddingEnd">16dp</item>
<item name="android:textAllCaps">false</item>
</style>
<style name="NextButtons" parent="Widget.AppCompat.Button">
<item name="android:background">@drawable/next_button</item>
<item name="android:textColor">#ff4a4a4a</item>
<item name="android:textAllCaps">false</item>
<item name="android:textSize">17sp</item>
</style>
<style name="CoachButton" parent="Widget.AppCompat.Button">
<item name="android:background">@drawable/white_rounded_rectangle</item>
<item name="android:textColor">@color/black</item>
<item name="android:textAllCaps">false</item>
<item name="android:textSize">16sp</item>
</style>
<style name="CoachButtons1" parent="CoachButton">
<item name="android:background">@drawable/yellow_rounded_rectangle</item>
</style>
<style name="CoachButtons2" parent="CoachButton">
<item name="android:background">@drawable/green_rounded_rectangle</item>
</style>
<style name="RegisterText" parent="android:TextAppearance">
<item name="android:textColor">@android:color/white</item>
<item name="android:textSize">17sp</item>
<item name="android:gravity">center</item>
<item name="android:layout_gravity">center</item>
</style>
<style name="RegisterEditText" parent="Widget.AppCompat.EditText">
<item name="android:textSize">15sp</item>
<item name="android:background">@drawable/registration_edittext_selector</item>
<item name="android:minHeight">56dp</item>
<item name="android:paddingLeft">30dp</item>
<item name="android:paddingRight">16dp</item>
<item name="android:paddingTop">4dp</item>
<item name="android:paddingBottom">4dp</item>
<item name="android:textColor">@android:color/black</item>
<item name="android:textColorHint">#FF9B9B9B</item>
</style>
<style name="cujuEditText" parent="Widget.AppCompat.EditText">
<item name="android:textSize">15sp</item>
<item name="android:background">@drawable/rounded_edittext</item>
<item name="android:minHeight">48dp</item>
<item name="android:paddingLeft">16dp</item>
<item name="android:textColorHint">#8F8F8F</item>
<item name="android:paddingRight">16dp</item>
<item name="android:paddingTop">4dp</item>
<item name="android:paddingBottom">4dp</item>
</style>
<style name="homeEditText" parent="Widget.AppCompat.EditText">
<item name="android:textSize">15sp</item>
<item name="android:background">@drawable/status_field</item>
<item name="android:minHeight">48dp</item>
<item name="android:paddingLeft">16dp</item>
<item name="android:textColorHint">@color/black</item>
<item name="android:paddingRight">16dp</item>
<item name="android:paddingTop">4dp</item>
<item name="android:paddingBottom">4dp</item>
</style>
<style name="RegisterAutoCompleteTextView" parent="Widget.AppCompat.AutoCompleteTextView">
<item name="android:textSize">15sp</item>
<item name="android:background">@drawable/registration_edittext_selector</item>
<item name="android:minHeight">56dp</item>
<item name="android:paddingLeft">30dp</item>
<item name="android:paddingRight">16dp</item>
<item name="android:paddingTop">4dp</item>
<item name="android:paddingBottom">4dp</item>
<item name="android:textColor">@android:color/black</item>
<item name="android:textColorHint">#FF9B9B9B</item>
</style>
<style name="SeekBar" parent="Widget.AppCompat.SeekBar">
<item name="android:thumb">@drawable/hype_cujuball</item>
<item name="android:height">2dp</item>
<item name="android:progressDrawable">@drawable/cuju_custom_seekbar</item>
<item name="android:indeterminateOnly">false</item>
<item name="android:splitTrack">false</item>
</style>
<style name="Spinner" parent="Widget.AppCompat.DropDownItem.Spinner">
</style>
<style name="my_facebook" parent="com_facebook_loginview_default_style">
<item name="android:background">@drawable/facebook_rounded_botton</item>
<item name="android:paddingBottom">16dp</item>
<item name="android:paddingTop">16dp</item>
<item name="android:textColor">@android:color/black</item>
<item name="android:textSize">18sp</item>
</style>
<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
<style name="DatePickerTheme" parent="Theme.AppCompat.Light.Dialog">
<item name="colorControlActivated">@color/colorPrimary</item>
<item name="colorControlHighlight">@color/colorPrimary</item>
</style>
我应该在样式中写什么来解决问题?
答案 0 :(得分:1)
我知道这不是你想要的答案,但是因为我曾经试图调整系统警报对话框的风格,并且真的厌倦了尝试按照我想要的方式调整样式我的应用程序,只是为了你的情况厌倦了找到解决方案考虑编写自定义警报对话框并自己完成整个布局: - )
以下是您可以调整的简单标题,消息和两个按钮对话框的示例(此示例使用数据绑定):
public class StyledAlertDialog {
public static class Builder {
private Context context;
private String title;
private String message;
private int resPositiveButton;
private DialogInterface.OnClickListener positiveListener;
private int resNegativeButton;
private DialogInterface.OnClickListener negativeListener;
private boolean cancelable = true;
public Builder(Context context) {
this.context = context;
// default value for cancel button
this.resNegativeButton = R.string.button_cancel;
}
public Builder setTitle(int resTitle) {
this.title = context.getString(resTitle);
return this;
}
public Builder setTitle(String title) {
this.title = title;
return this;
}
public Builder setMessage(int resMessage) {
this.message = context.getString(resMessage);
return this;
}
public Builder setMessage(String message) {
this.message = message;
return this;
}
public Builder setPositiveButton(int resPositiveButton, DialogInterface.OnClickListener positiveListener) {
this.resPositiveButton = resPositiveButton;
this.positiveListener = positiveListener;
return this;
}
public Builder setNegativeButton(int resNegativeButton, DialogInterface.OnClickListener negativeListener) {
this.resNegativeButton = resNegativeButton;
this.negativeListener = negativeListener;
return this;
}
public Builder create() {
return this;
}
public void setCancelable(boolean cancelable) {
this.cancelable = cancelable;
}
public void show() {
final AlertDialog alertDialog = new AlertDialog.Builder(context).create();
LayoutInflater inflater = LayoutInflater.from(context);
// In this special case null is the only valid choice as the root
// of the alertDialog does not exist yet.
View inflatedView = inflater.inflate(R.layout.dialog_styled_layout, null);
DialogStyledLayoutBinding viewBinding = DialogStyledLayoutBinding.bind(inflatedView);
if (title != null && title.length() > 0) {
viewBinding.customDialogTitle.setText(title);
viewBinding.customDialogTitle.setVisibility(View.VISIBLE);
} else {
viewBinding.customDialogTitle.setVisibility(View.GONE);
}
viewBinding.customDialogMessage.setText(message);
viewBinding.customPositiveButton.setText(resPositiveButton);
viewBinding.customPositiveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.hide();
if (positiveListener != null) {
positiveListener.onClick(alertDialog, 0);
}
}
});
viewBinding.customNegativeButton.setText(resNegativeButton);
viewBinding.customNegativeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.hide();
if (negativeListener != null) {
negativeListener.onClick(alertDialog, 0);
}
}
});
alertDialog.setCancelable(cancelable);
alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
alertDialog.setView(inflatedView, 40, 0, 40, 0);
alertDialog.show();
}
}
}
答案 1 :(得分:0)
我找到了解决方案。
事实证明,Android Oreo中AlertDialog中的按钮以及之后的应用程序默认按钮样式的按钮样式。
<item name="buttonStyle">@style/RoundedButtons</item>
<style name="RoundedButtons" parent="Widget.AppCompat.Button">
<item name="android:background">@drawable/rounded_gradient_bg</item>
<item name="android:padding">4dp</item>
<item name="android:textSize">20sp</item>
<item name="android:minHeight">48dp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textAllCaps">false</item>
</style>
所以当我删除这一行
<item name="android:textColor">@color/white</item>
它有效。