对话框不显示正面和负面按钮
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对话框不显示正面和负面按钮相关的知识,希望对你有一定的参考价值。
我使用AlertDialog提醒用户确认删除。我检查了我的设备(android 5.1),它显示得很好
但在另一台设备上(也运行Android 5.1),对话框错过了正面和负面按钮。
我查了一下,发现设备发生这个问题有中等分辨率(960x540,854x480)。
解决方案是否涉及此问题?如果没有,你能告诉我原因以及如何解决这个问题吗?
我的显示对话框代码:
public static final Dialog yesNoDialog(Context context,
String message,
DialogInterface.OnClickListener yesAction, DialogInterface.OnClickListener noAction) {
AlertDialog.Builder builder = new AlertDialog.Builder(context,R.style.todoDialogLight);
builder.setTitle(context.getString(R.string.app_name))
.setMessage(message)
.setCancelable(false)
.setPositiveButton("YES", yesAction)
.setNegativeButton("NO", noAction);
return builder.create();
}
和styles.xml
<style name="todoDialogLight" parent="Theme.AppCompat.Light.Dialog">
<!-- Used for the buttons -->
<item name="colorAccent">@color/colorPrimaryDark</item>
<item name="android:textStyle">bold</item>
<!-- Used for the title and text -->
<item name="android:textColorPrimary">@color/colorText</item>
<!-- Used for the background -->
<!-- <item name="android:background">#4CAF50</item>-->
<item name="android:fontFamily">sans-serif</item>
<item name="android:windowAnimationStyle">@style/RemindDialogAnimation</item>
<item name="android:layout_width">@dimen/width_remind_dialog</item>
<item name="android:layout_height">wrap_content</item>
</style>
答案
按钮就在我身边。不幸的是,他们是白色背景上的白色文本。它与分辨率无关,但更多与您选择的主题有关。要解决此问题,您需要在对话框主题中设置正确的文本颜色。
例如,在styles.xml中添加
<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorPrimary">@color/colorPrimaryDarkBlue</item>
</style>
并在您的活动中添加
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MyActivity.this, R.style.MyDialogTheme);
希望这可以帮助。
另一答案
在style.xml中添加:
<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:textColor">@color/colorAccent</item>
</style>
和活动使用
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MyActivity.this, R.style.MyDialogTheme);
另一答案
阿里的解决方案对我有用。我的原始代码适用于以前的Android版本<7。但是在我的Pixel上进行测试会产生隐形按钮。我添加了阿里详细描述的风格概念,如下所示,一切都很好:
return new AlertDialog.Builder(getActivity(),R.style.MyDialogTheme)
.setView(v)
.setTitle(R.string.filter_picker_title)
.setPositiveButton(android.R.string.ok,
// when the user presses the button to select a new number
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Integer markerIndex = mNumberPicker.getValue();
stringFilter=uniqueValues[markerIndex];
sendResult(Activity.RESULT_OK, stringFilter);
}
})
.create();
另一答案
如果您在styles.xml
中使用自定义主题,则将colorAccent
的颜色设置为较暗的颜色。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimary</item>
<item name="colorAccent">@color/colorPrimary</item>
</style>
另一答案
它确实与解决方案有关,我不知道确切的原因,只是做一个if else条件来解决这个问题。
public static String getDensity(Context context) {
float density = context.getResources().getDisplayMetrics().density;
if (density >= 4.0) {
return "xxxhdpi";
}
if (density >= 3.0) {
return "xxhdpi";
}
if (density >= 2.0) {
return "xhdpi";
}
if (density >= 1.5) {
return "hdpi";
}
if (density >= 1.0) {
return "mdpi";
}
return "ldpi";
}
AlertDialog
public static Dialog yesNoDialog(final Context context,
final String message,
final DialogInterface.OnClickListener yesAction,
final DialogInterface.OnClickListener noAction) {
int theme = PreferenceUtil.getThemeSetting(context, PreferenceUtil.PREF_THEME);
AlertDialog.Builder builder = null;
String density = AppUtil.getDensity(context);
if (theme == ThemeUtil.THEME_LIGHT) {
if(density.equals("hdpi")){
builder = new AlertDialog.Builder(context);
}else{
builder = new AlertDialog.Builder(context, R.style.todoDialogLight);
}
} else {
if(density.equals("hdpi")){
builder = new AlertDialog.Builder(context);
}else{
builder = new AlertDialog.Builder(context, R.style.todoDialogDark);
}
}
builder.setTitle(context.getString(R.string.app_name))
.setMessage(message)
.setCancelable(false)
.setPositiveButton("YES", yesAction)
.setNegativeButton("NO", noAction);
return builder.create();
}
希望对有同样问题的其他开发人员有所帮助。
另一答案
对话框对话框;
public void startAlertDialog(String message)
{
AlertDialog.Builder alertDialog=new AlertDialog.Builder(this);
alertDialog.setCancelable(false);
LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View view=inflater.inflate(R.layout.alertdialoglayout,null);
TextViewRagular textViewRagular=(TextViewRagular)view.findViewById(R.id.textviewMessage);
textViewRagular.setText(message);
alertDialog.setView(view);
dialog=alertDialog.create();
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.show();
}
以上是关于对话框不显示正面和负面按钮的主要内容,如果未能解决你的问题,请参考以下文章