13

以下に示すように、AlertDialogに文字列のリストを表示しています。

ここに画像の説明を入力してください

1.以下のような固定幅フォントを設定するにはどうすればよいですか?

ここに画像の説明を入力してください

2.AlertDialogでは、デフォルトで垂直スクロールが有効になっています。最後の行が前の行にとどまるように水平スクロールを有効にするにはどうすればよいですか?

4

2 に答える 2

17

AlertDialogの独自のビューを膨らませ、そのビューでandroid:typeface="monospace"を設定します。これを達成するには:

ここに画像の説明を入力してください

このレイアウトを使用します。

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

メインアクティビティのこのコードは、AlertDialogを作成します(デフォルトのレイアウトにボタンをドロップします)。

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
        }
    }
}
于 2012-05-28T14:10:19.983 に答える
0

私はこれがかなり古いことを知っていますが...私はちょうどこれを発見し、他の誰かが興味を持っているかもしれないと思いました。API 19までさかのぼると、Typeface.javaで定義されているいくつかの異なる書体があります。そのうちの1つはMONOSPACEです。Kotlinでのアラートダイアログは次のとおりです。

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
}
于 2021-09-26T00:46:02.793 に答える