14

AlertDialogue我使用以下代码创建了一个:

 int selectedModeId=0;
 public void sortTypeModeSelection(){

    AlertDialog.Builder alertBuilder=new AlertDialog.Builder(WatchListDetailActivity.this);

    alertBuilder.setSingleChoiceItems(R.array.watchlist_sorting_modes,selectedModeId, new DialogInterface.OnClickListener(){
        public void onClick(DialogInterface dialog, int which) {
            switch (which){
                case 0:
                    selectedModeId=0;
                    break;
                case 1:
                    selectedModeId=1;
                    break;
                case 2:
                    selectedModeId=2;
                    break;
                case 3:
                    selectedModeId=3;
                    break;
                case 4:
                    selectedModeId=4;
                    break;
                case 5:
                    selectedModeId=5;
                    break;
                case 6:
                    selectedModeId=6;
                    break;
                case 7:
                    selectedModeId=7;
                    break;
            }
            dialog.cancel();
        }
    });
    alertBuilder.show();
}

在此处输入图像描述

我发出了警报,但我想减小对话框列表项的字体大小。我怎样才能做到这一点?

注意:不建议膨胀自定义布局来完成此操作,我想知道是否有另一种方法。

4

4 回答 4

45

我能够通过样式来实现这一点。我将此样式添加到styles.xml值目录中的文件中:

<style name="AlertDialogTheme" parent="android:Theme.Dialog">
    <item name="android:textSize">14sp</item>
</style>

然后在创建时AlertDialog,我将活动上下文包装在 a 中ContextThemeWrapper并将其传递给Builder构造函数:

ContextThemeWrapper cw = new ContextThemeWrapper( this, R.style.AlertDialogTheme );
AlertDialog.Builder b = new AlertDialog.Builder( cw );

这为对话框中的列表项产生了较小的文本大小。

在此处输入图像描述

于 2013-02-23T02:35:47.927 回答
6

您必须为此使用自定义布局。

在此处输入图像描述

检查下面的代码它肯定对你有帮助

AlertDialog.Builder builder = new AlertDialog.Builder(forgatps.this);
            builder.setTitle("Select Your Account");

            builder.setAdapter(new ArrayAdapter<String>(forgatps.this,
                    R.layout.row_email, R.id.textView1, emails),
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub
                            MainEmail = emails.get(which);
                            editEmail.setText("" + MainEmail);

                        }
                    });

            builder.show();

行文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="60dp"
    android:background="#ffffff"
    android:gravity="center"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="#000000"
        android:textSize="26dp" />

</LinearLayout>
于 2013-02-15T05:40:27.940 回答
3

尝试如下:

这只是我向你展示它可能的方式的一种方式。

  final CharSequence[] itemsMark =
   {getResources().getString(R.string.Mark_As_Beautiful),
              getResources().getString(R.string.Mark_As_Fun),
              getResources().getString(R.string.Mark_As_Not_A_Portrait),
              getResources().getString(R.string.Mark_As_Offensive),
              getResources().getString(R.string.Mark_As_Spam),
              getResources().getString(R.string.Mark_As_Cancel)
   };
   ArrayAdapter<CharSequence> itemsAdapter = new
   ArrayAdapter<CharSequence> (this,
            R.layout.menu_items, itemsMark);
   builder = new AlertDialog.Builder(this);
   builder.setTitle("My Title");
   builder.setIcon(R.drawable.icon);
   builder.setAdapter(itemsAdapter, new DialogInterface.OnClickListener()
   {
       public void onClick(DialogInterface dialog, int item) {
                  switch(item) {
                          case 0:
                      //Mark as Beautiful
                          break;
                       case 1:
                      //Mark as Beautiful
                          break;
                    case 2: 
                        //Mark as Not a Portrait
                          break;
                    case 3:
                      //Mark as Offensive
                          break;
                   case 4:
                      //Mark as Spam
                          break;
                   case 5:
                      //cancel
                   break;
           }
       }
   });

在 layout/menu_items.xml 中:

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@android:id/text1"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:padding="10dip"
       android:layout_margin="5dip"
       android:gravity="center_vertical"
       android:textSize="22dip"
       android:textColor="#ff000000"
       android:typeface="normal"
       android:lineSpacingExtra="0dip"/>

我希望它会帮助你。

谢谢。

于 2013-02-15T05:47:06.550 回答
3

我不明白为什么您需要在不使用当前答案中显示的自定义布局文件的情况下更改文本大小(除非您可能正在实施某种可访问性选项以保持当前平台的外观和感觉?)。无论如何,您仍然可以通过直接修改对话框列表来修改文本大小。像这样的东西:

private static int mTextSize = 5;
private static int mFirstVisible = -1;
private static int mLastVisible = -1;

v.post(new Runnable() {

                @Override
                public void run() {
                    changeCurrentVisibleSize(ad.getListView());
                    // ad is the AlertDialog resulted from alertBuilder.create
                    ad.getListView().setOnScrollListener(
                            new OnScrollListener() {

                                @Override
                                public void onScrollStateChanged(
                                        AbsListView view, int scrollState) {
                                    // TODO Auto-generated method stub

                                }

                                @Override
                                public void onScroll(AbsListView view,
                                        int firstVisibleItem,
                                        int visibleItemCount,
                                        int totalItemCount) {
                                    if (visibleItemCount != 0) {
                                        if (mFirstVisible != firstVisibleItem
                                                || mLastVisible != (firstVisibleItem
                                                        + visibleItemCount - 1)) {
                                            updateRow((ListView) view);
                                        }
                                    }
                                }
                            });
                }

            });

其中changeCurrentVisibleSize()andupdateRow()方法是:

static void updateRow(ListView listView) {
    final int count = listView.getChildCount();
    final View firstRow = listView.getChildAt(0);
    final View secondRow = listView.getChildAt(count - 1);
    if (firstRow instanceof TextView) {
        ((TextView) firstRow).setTextSize(mTextSize);
        ((TextView) secondRow).setTextSize(mTextSize);
    }
}

static void changeCurrentVisibleSize(ListView listView) {
    final int count = listView.getChildCount();
    mFirstVisible = listView.getFirstVisiblePosition();
    mLastVisible = listView.getLastVisiblePosition();
    for (int i = 0; i < count; i++) {
        final View rowView = listView.getChildAt(i);
        if (rowView instanceof TextView) {
            ((TextView) rowView).setTextSize(mTextSize);
        }
    }
}

增加文本应该可以正常工作,再次减少文本应该可以正常工作(但在这种情况下,根据使用的布局文件,该行将继续具有一定的高度)。

于 2013-02-21T13:22:29.180 回答