Android: fuente de ancho fijo en AlertDialog
Frecuentes
Visto 7,709 veces
13
Estoy mostrando una lista de cadenas en un AlertDialog como se muestra a continuación:
1.¿Cómo puedo configurar una fuente de ancho fijo como la que se muestra a continuación?
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?
2 Respuestas
17
Infle su propia vista para AlertDialog y establezca android:typeface="monospace" en esa vista. Lograr esto:
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
0
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 android android-alertdialog android-2.3-gingerbread or haz tu propia pregunta.
Qué es
alertmono
y/oR.layout
? - DSlomer64R.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