Android: fuente de ancho fijo en AlertDialog

Estoy mostrando una lista de cadenas en un AlertDialog como se muestra a continuación:

enter image description here

1.¿Cómo puedo configurar una fuente de ancho fijo como la que se muestra a continuación?

enter image description here

2.El AlertDialog tiene habilitado el desplazamiento vertical de forma predeterminada. ¿Cómo puedo habilitar el desplazamiento horizontal para que la última línea permanezca en la línea anterior?

preguntado el 22 de mayo de 12 a las 21:05

2 Respuestas

Infle su propia vista para AlertDialog y establezca android:typeface="monospace" en esa vista. Lograr esto:

enter image description here

Utilice este diseño:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/dlgView"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <LinearLayout android:id="@+id/dlgLayout"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="5dp">
    <TextView android:id="@+id/dlgText"
      android:layout_width="wrap_content"
      android:layout_height="fill_parent"
      android:textColor="#FFF"
      android:typeface="monospace"/>
  </LinearLayout>
</ScrollView>

Este código para la actividad principal genera un AlertDialog (soltar un botón en el diseño predeterminado).

public class MonospacedAlertActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //attach an instance of HandleClick to the Button
        findViewById(R.id.button1).setOnClickListener(new HandleClick());
    }
    private class HandleClick implements OnClickListener{
        public void onClick(View arg0) {
            ShowAlert(MonospacedAlertActivity.this);
        }

        private void ShowAlert(Activity callingActivity) {
            //Generate views to pass to AlertDialog.Builder and to set the text
            View dlg;
            TextView tvText;
            try {
              //Inflate the custom view
              LayoutInflater inflater = callingActivity.getLayoutInflater();
              dlg = inflater.inflate(R.layout.alertmono, (ViewGroup) callingActivity.findViewById(R.id.dlgView));
              tvText = (TextView) dlg.findViewById(R.id.dlgText);
            } catch(InflateException e) {
              //Inflater can throw exception, unlikely but default to TextView if it occurs
              dlg = tvText = new TextView(callingActivity);
            }
            //Set the text
            tvText.setText( "22-05-2012 20:51:13 114 58 00:04:19\n"+
                            "22-05-2012 20:59:15  84 52 00:01:25\n"+
                            "22-05-2012 22:49:48  96 51 00:01:32\n"+
                            "23-05-2012 00:08:52  79 58 00:01:26");
            //Build and show the dialog
            new AlertDialog.Builder(callingActivity)
              .setTitle(callingActivity.getString(R.string.app_name))
              .setCancelable(true)
              .setIcon(R.drawable.ic_launcher)
              .setPositiveButton("OK", null)
              .setView(dlg)
              .show();    //Builder method returns allow for method chaining
        }
    }
}

contestado el 28 de mayo de 12 a las 15:05

Qué es alertmono y/o R.layout? - DSlomer64

R.layout es la forma en que Android hace referencia a los diseños compilados, alertmono era el nombre del archivo de diseño de diálogo guardado. - Daniel S. Fowler

Sé que esto es muy antiguo, pero... Acabo de descubrir esto y pensé que alguien más podría estar interesado. Ya en API 19, hay varios tipos de letra diferentes definidos en Typeface.java: uno de los cuales es MONOSPACE. Mi diálogo de alerta en Kotlin es:

private fun showDialog(mess:String) : Boolean {
    val tv = TextView(requireActivity())
    tv.typeface = Typeface.MONOSPACE
    tv.text = mess
    AlertDialog.Builder(this.requireContext())
        .setTitle("Changes in deck")
        .setView(tv)
        .show()
    return true
}

Respondido el 26 de Septiembre de 21 a las 20:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.