I create a AlertDialog
with the code below. For some reason I'm getting an extra background (see pic) on Honeycomb and above. The code crashes fine for anything below honeycomb. MyCustomDialog
is simply Theme.Dialog
for < API-11 and Theme.Holo.Dialog
for API-11 and up.
Update figured out the answer to Question #2. Seems the constructor AlertDialog.Builder(Context context, int theme)
was introduced in API 11. My fix was simply to change the line to:
final AlertDialog.Builder builder = (Integer.parseInt(android.os.Build.VERSION.SDK) < 11)? new AlertDialog.Builder(this) : new AlertDialog.Builder(this,R.style.JumpDialog);
I still need help with Question #1
private Dialog setupKeyBoardDialog() {
if (mContact.getLocaleId() != -1) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this,R.style.MyCustomDialog);
builder.setTitle("Keyboards");
mKeyboardLayouts = new KeyboardLayoutGroup();
mKeyboardLayouts.layoutNames = new CharSequence[(int) jni.getNumKeyLayouts()];
mKeyboardLayouts.layoutValue = new ArrayList<Integer>();
for (int i = 0; i < jni.getNumKeyLayouts(); i++) {
mKeyboardLayouts.layoutNames[i] = jni.LayoutInfoForIndex(i).getName();
mKeyboardLayouts.layoutValue.add(i, (int) jni.LayoutInfoForIndex(i).getLocale_id());
}
final int selectedItem = mKeyboardLayouts.layoutValue.indexOf(mContact.getLocaleId());
builder.setSingleChoiceItems(mKeyboardLayouts.layoutNames, selectedItem, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
mContact.setLocaleId(mKeyboardLayouts.layoutValue.get(item));
mContactsDB.saveContact(mContact, true);
dialog.dismiss();
initializeSettingsList();
}
});
final AlertDialog dialog = builder.create();
dialog.setButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogBox, int arg1) {
dialogBox.cancel();
}
});
return dialog;
}
return null;
}
Figured out the answers
R.style.MyTheme
or android.R.style.Theme_Holo_Dialog
with AlertDialog.THEME_HOLO_LIGHT
the code worked just fine. Seems the constructor AlertDialog.Builder(Context context, int theme)
was introduced in API 11. My fix was simply to change the line to:
final AlertDialog.Builder builder; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { builder = new AlertDialog.Builder(this); } else { builder = new AlertDialog.Builder(this,R.style.JumpDialog); }
您可以尝试使用new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.JumpDialog))
而不是new AlertDialog.Builder(this, R.style.JumpDialog)
For those looking for a way to customize the dialog theme without having to stick with the default ones (as in the accepted solution), starting with Lollipop it seems that the extra background has been finally removed. So, now you can create a theme inheriting from the default one (example with AppCompat):
<!-- default theme for L devices -->
<style name="SelectionDialog" parent="Theme.AppCompat.Light.Dialog">
<item name="android:textColor">@color/default_text_color_holo_light</item>
</style>
<!-- theme for Pre-L devices -->
<style name="SelectionDialog.PreL">
<!-- remove the dialog window background -->
<item name="android:windowBackground">@color/transparent</item>
</style>
And instantiate your builder with this code:
AlertDialog.Builder builder = new AlertDialog.Builder(
getActivity(),
Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT ?
R.style.SelectionDialog :
R.style.SelectionDialog_PreL);
Of course this could also be done with resource folders ( values/
and values-v21/
).
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.