Pertanyaan Android Alert Dialog Background Issue API 11+


Saya membuat AlertDialog dengan kode di bawah ini. Untuk beberapa alasan saya mendapatkan latar belakang tambahan (lihat gambar) di Honeycomb dan di atasnya. Kode crash baik untuk apa pun di bawah sarang lebah. MyCustomDialog adalah secara sederhana Theme.Dialog untuk <API-11 dan Theme.Holo.Dialog untuk API-11 dan lebih tinggi.

  1. Tahu mengapa saya mendapatkan latar belakang tambahan?
  2. Ada yang tahu mengapa crash untuk API <11? Ini berfungsi dengan baik jika saya menghapus Tema.

Memperbarui tahu jawabannya untuk Pertanyaan # 2. Sepertinya konstruktor AlertDialog.Builder(Context context, int theme) diperkenalkan di API 11. Perbaikan saya hanya mengubah baris menjadi:

final AlertDialog.Builder builder = (Integer.parseInt(android.os.Build.VERSION.SDK) < 11)? new AlertDialog.Builder(this) : new AlertDialog.Builder(this,R.style.JumpDialog);

Saya masih butuh bantuan dengan Pertanyaan # 1

enter image description here

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;
}

13
2017-12-31 00:24


asal


Jawaban:


Tahu jawabannya

  1. AlertDialog memiliki konstanta statis untuk setiap tema di Kelas AlertDialog dan tidak mengambil tema standar. ketika saya diganti R.style.MyTheme atau android.R.style.Theme_Holo_Dialog dengan AlertDialog.THEME_HOLO_LIGHT kode bekerja dengan baik baik.
  2. Sepertinya konstruktor AlertDialog.Builder(Context context, int theme) diperkenalkan di API 11. Perbaikan saya hanya untuk mengubah baris ke:

    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);
    }
    

17
2017-12-31 08:26



Anda dapat mencoba menggunakannya new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.JumpDialog)) dari pada new AlertDialog.Builder(this, R.style.JumpDialog)


6
2017-08-21 16:32



Bagi mereka yang mencari cara untuk menyesuaikan tema dialog tanpa harus tetap dengan yang default (seperti pada solusi yang diterima), dimulai dengan Lollipop tampaknya latar belakang tambahan telah akhirnya dihapus. Jadi, sekarang Anda dapat membuat tema yang mewarisi dari default (misalnya dengan 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>

Dan instantiate pembangun Anda dengan kode ini:

AlertDialog.Builder builder = new AlertDialog.Builder(
            getActivity(),                
            Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT ?
                    R.style.SelectionDialog :
                    R.style.SelectionDialog_PreL);

Tentu saja ini juga bisa dilakukan dengan folder sumber daya (values/ dan values-v21/).


2
2018-02-17 12:41