Уменьшение размера шрифта компонентов AlertDialog.Builder
Я создал 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();
}
![enter image description here]()
Я сделал предупреждение, но хочу уменьшить размер шрифта элементов списка диалога. Как я могу это сделать?
Примечание. Не рекомендуется раздувать пользовательский макет для этого, я хочу знать, есть ли другой подход.
Ответы
Ответ 1
Я смог добиться этого через стили. Я добавил этот стиль в свой 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 );
Это привело к уменьшению размера текста для элементов списка в диалоговом окне.
![enter image description here]()
Ответ 2
для этого вам нужно использовать пользовательский макет.
![enter image description here]()
проверьте ниже код, он поможет вам
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>
Ответ 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);
}
}
}
Увеличение текста должно работать нормально, уменьшение текста снова должно работать нормально (но в этом случае строка будет по-прежнему иметь определенную высоту на основе используемого файла макета).
Ответ 4
Попробуйте выполнить следующие действия:
Это просто способ показать вам, как это возможно.
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;
}
}
});
И в макете /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"/>
Надеюсь, это поможет вам.
Спасибо.