Cómo utilizar el incorporado en AlertDialog_listItemLayout

Don Box:

Estoy mostrando un AlertDialog utilizando el mismo integrado en android.R.layout.select_dialog_itemel que Android utiliza para visualizar el AlertDialog:

    void showCustomAlertDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Choose any item");

        final List<String> items = new ArrayList<String>();
        items.add("Red");
        items.add("Green");
        items.add("Blue");

        final TypedArray a = obtainStyledAttributes(null,
                R.styleable.AlertDialog, R.attr.alertDialogStyle, 0);

        final int listItemLayoutId = a.getResourceId(
                R.styleable.AlertDialog_listItemLayout,
                android.R.layout.select_dialog_item);

        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
                listItemLayoutId, items);

        builder.setAdapter(dataAdapter, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();
    }

El código es similar a lo que veo en el código fuente: https://github.com/aosp-mirror/platform_frameworks_base/blob/master/core/java/com/android/internal/app/AlertController.java#L229

También estoy mostrando otra AlertDialog pero utilizando setItems():

    void showStandardAlertDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Choose any item");

        final CharSequence[] items = {"Red", "Green", "Blue"};
        builder.setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();
    }

Los dos cuadros de diálogo mostrados han mostrado los elementos de una manera ligeramente diferente, el relleno es diferente:

introducir descripción de la imagen aquí

¿Por qué es diferente, ¿de dónde viene la diferencia viene?

¿Cómo puedo mostrar un AlertDialog con un diseño de elemento personalizado, pero que se ve exactamente lo mismo que cuando se utiliza setItems`, sin importar el tema actual?

Para darle un poco de información de fondo: Lo que realmente estoy tratando de hacer es mostrar una AlertDialogque muestra elementos similares a cómo se ve con setItems(), pero muestran conjunto elemento seleccionado actualmente por dialog.getListView().setSelection(somePos). Para esto, necesito un diseño de elemento que tiene fondo conjunto a android:attr/activatedBackgroundIndicator. Pero primero, tengo que encontrar la manera de obtener el aspecto exacto que los setItemsusos.

arekolek:

La diferencia está en el tema aprobada en el Contextdel adaptador se crea y el adaptador que se crea cuando se utiliza internamente setItems.

Usted tiene que pasar un contexto que utiliza el tema de diálogo por defecto, en lugar de this(que utiliza el tema de la actividad). Usted puede conseguir que el contexto de la AlertDialog.Builder:

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(builder.getContext(),
                listItemLayoutId, items);

AlertDialog.Builder#getContext()docs dicen:

Devuelve un contexto con el tema apropiado para los diálogos creados por este constructor. Las aplicaciones deben utilizar este contexto para la obtención de LayoutInflaters para inflar vistas que serán utilizados en los diálogos resultantes, ya que esto haría vistas a ser inflados con el tema correcto.

Pero deberían haber mencionado que en la documentación setAdapter().

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=230968&siteId=1
Recomendado
Clasificación