¿Necesitas ayuda para obtener un diseño personalizado para trabajar con mi Android AlertDialog

He creado con éxito un trabajo AlertDialog para mi aplicación de Android:

public class MyClass extends DialogFragment{ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { ArrayList selectedItems = new ArrayList(); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.pick_toppings) builder.setMultiChoiceItems(R.array.my_array, null, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { if (isChecked) { selectedItems.add(which); } else if (selectedItems.contains(which)) { selectedItems.remove(Integer.valueOf(which)); } } }); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // do stuff here ... } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // do stuff here ... } }); return builder.create(); } } 

Esta lista MultiChoiceItems está respaldada por una matriz en /res/values/array.xml

 <resources> <array name="my_array"> <item>item 01</item> <item>item 02</item> <item>item 03</item> <item>item 04</item> <item>item 05</item> </array> </resources> 

De mi actividad, llamo al AlertDialog de esta manera:

 MyClass myClass = new MyClass(); myClass.show(getSupportFragmentManager(), "My Dialog"); 

Lo que quiero hacer ahora es utilizar un diseño personalizado con el AlertDialog para que pueda hacer cosas como sombreado de fila alternativa, botones personalizados y agregar un EditText para que pueda tener una opción "other" con la capacidad de rellenar el " otro".

Después de hacer algo de google, parece que necesito crear un nuevo diseño, y establecer la vista de AlertDialog a este diseño. Por lo tanto, he creado un diseño:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <CheckBox android:id="@+id/checkBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="other" android:textSize="18sp"/> <EditText android:id="@+id/editText" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> 

Entonces agregué esto a mi clase de DialogFragment:

 LayoutInflater layoutInflater = getActivity().getLayoutInflater(); View view = layoutInflater.inflate(R.layout.my_new_layout, null); 

entonces

 builder.setView(view); 

Como se puede adivinar, esto no funcionó. El nuevo CheckBox y EditText se insertó después de mis otras casillas de verificación que se rellenaron de mi matriz, pero se ve terrible, y no parecen tener ningún control sobre la apariencia de las casillas de verificación creadas a partir de la matriz.

Como he dicho, me gustaría la capacidad de agregar esta nueva combinación CheckBox / EditText, así como tener la capacidad de personalizar el aspecto de todo el AlertDialog.

Realmente quiero usar la matriz de /res/values/array.xml para que no tenga que codificar una nueva opción si quiero agregar nuevos elementos a la lista.

¿Es lo que quiero hacer posible? Si es así, algunos consejos sería genial.

Gracias

Esto es lo que me gustaría que mi AlertDialog buscar / actuar como:

Ok, finalmente me di cuenta de esto por mi cuenta. Aquí está mi resolución:

Nuevo diseño:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="right"> </LinearLayout> 

Nueva Clase:

 public class MyClass extends DialogFragment{ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { String[] theOptions = getResources().getStringArray(R.array.options); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.pick_toppings) LayoutInflater layoutInflater = getActivity().getLayoutInflater(); LinearLayout view = (LinearLayout) layoutInflater.inflate(R.layout.my_layout, null); for(String option : theOptions){ CheckBox checkbox = new CheckBox(getContext()); checkbox.setText(option); view.addView(checkbox); } LinearLayout otherLinearLayout = new LinearLayout(getContext()); otherLinearLayout.setOrientation(LinearLayout.HORIZONTAL); otherLinearLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); otherLinearLayout.setId(R.id.otherLinearLayout); CheckBox otherCheckBox = new CheckBox(getContext()); otherCheckBox.setText("other"); otherCheckBox.setId(R.id.otherCheckBox); EditText otherEditText = new EditText(getContext()); otherEditText.setId(R.id.otherEditText); otherLinearLayout.addView(otherCheckBox); otherLinearLayout.addView(otherEditText); view.addView(otherLinearLayout); builder.setView(view); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // do stuff here ... } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // do stuff here ... } }); return builder.create(); } } 

Puedes hacer algo como esto, obtener la matriz usando

 String[] myarray = getResources().getStringArray(R.array.testArray); 

Y la creación de nuevos objetos de casilla de verificación utilizando cada elemento de matriz y establecerlo en la vista inflada

 LinearLayout layout2 = new LinearLayout(context); layout2.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 

Y realizar un bucle a través de la lista de matrices

 layout2.addView(new Checkbox(context)); 

Y finalmente agregue el diseño lineal de los padres a la vista inflatedView.addView(layout2);

Crear Fragmento de cuadro de diálogo personalizado y agregar todos los elementos y casillas de verificación dentro de la nueva disposición definida por programaticamente es decir dinámicamente. Escriba el código para checkItemSelectedListener en su código.

  • Android: ¿Cómo crear un GridLayout de forma programática?
  • ¿Cómo mover el icono de búsqueda de SearchView a la derecha?
  • Android layout_width & layout_height, cómo funciona?
  • Dibuja una imagen en modo FullScreen Android
  • Android: Hacer el botón holo predeterminado opaco
  • Cómo colocar una imagen en la parte superior de otra imagen en android
  • Android especificando unidades de píxeles (como sp, px, dp) sin utilizar XML
  • Android, cambiar el tamaño de la imagen en ImageView
  • Alinear un icono con el icono de la barra de herramientas - Android Material Design
  • Aplicación personalizada de cronómetro android
  • ¿Cómo cambiar el color predeterminado de la barra de progreso?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.