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、アクティビティ コンテキストを でラップし、それをコンストラクター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()メソッドとupdateRow()メソッドは次のとおりです。

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 に答える