Android 如何设置AlertDialog项目高度?
目前在安卓4.3设备上。我使用的是一个极好的答案,我能够减少Android 如何设置AlertDialog项目高度?,android,android-alertdialog,android-styles,Android,Android Alertdialog,Android Styles,目前在安卓4.3设备上。我使用的是一个极好的答案,我能够减少AlertDialog单个项目的字体大小: <style name="AlertDialogTheme" parent="android:Theme.Dialog"> <item name="android:textSize">13sp</item> </style> 但是,问题是项目的各个高度仍然保持不变-事实上,当您在对话框中滚动时,第五个元素刚刚显示: 我试过了,但那只是
AlertDialog
单个项目的字体大小:
<style name="AlertDialogTheme" parent="android:Theme.Dialog">
<item name="android:textSize">13sp</item>
</style>
但是,问题是项目的各个高度仍然保持不变-事实上,当您在对话框中滚动时,第五个元素刚刚显示:
我试过了,但那只是增加了间隔。我还将layout\u margin
属性设置为0dp
,但没有成功
为减少标签之间的空间,此对话框的正确样式定义是什么
请注意,我不想再次使用视图构建整个对话框。我想保留现有的AlertDialog。这里有一个棘手的解决方案–覆盖
AlertDialog
中ListView
的getView
方法,并以编程方式更改TextView
样式属性:
ContextThemeWrapper cw = new ContextThemeWrapper(MainActivity.this, R.style.AlertDialogTheme);
AlertDialog.Builder builder = new AlertDialog.Builder(cw);
AlertDialog dialog = builder.create();
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialogInterface) {
ListView listView = ((AlertDialog) dialogInterface).getListView();
final ListAdapter originalAdapter = listView.getAdapter();
listView.setAdapter(new ListAdapter() {
@Override
public int getCount() {
return originalAdapter.getCount();
}
@Override
public Object getItem(int id) {
return originalAdapter.getItem(id);
}
@Override
public long getItemId(int id) {
return originalAdapter.getItemId(id);
}
@Override
public int getItemViewType(int id) {
return originalAdapter.getItemViewType(id);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = originalAdapter.getView(position, convertView, parent);
TextView textView = (TextView) view;
//textView.setTextSize(16); set text size programmatically if needed
textView.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 32 /* this is item height */));
return view;
}
@Override
public int getViewTypeCount() {
return originalAdapter.getViewTypeCount();
}
@Override
public boolean hasStableIds() {
return originalAdapter.hasStableIds();
}
@Override
public boolean isEmpty() {
return originalAdapter.isEmpty();
}
@Override
public void registerDataSetObserver(DataSetObserver observer) {
originalAdapter.registerDataSetObserver(observer);
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
originalAdapter.unregisterDataSetObserver(observer);
}
@Override
public boolean areAllItemsEnabled() {
return originalAdapter.areAllItemsEnabled();
}
@Override
public boolean isEnabled(int position) {
return originalAdapter.isEnabled(position);
}
});
}
});
dialog.show();
您可以通过为主题中的android属性
listPreferredItemHeight
(默认)或listPreferredItemHeightSmall
(Holo)指定维度来配置列表项高度。很高兴为您提供帮助;)
ContextThemeWrapper cw = new ContextThemeWrapper(MainActivity.this, R.style.AlertDialogTheme);
AlertDialog.Builder builder = new AlertDialog.Builder(cw);
AlertDialog dialog = builder.create();
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialogInterface) {
ListView listView = ((AlertDialog) dialogInterface).getListView();
final ListAdapter originalAdapter = listView.getAdapter();
listView.setAdapter(new ListAdapter() {
@Override
public int getCount() {
return originalAdapter.getCount();
}
@Override
public Object getItem(int id) {
return originalAdapter.getItem(id);
}
@Override
public long getItemId(int id) {
return originalAdapter.getItemId(id);
}
@Override
public int getItemViewType(int id) {
return originalAdapter.getItemViewType(id);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = originalAdapter.getView(position, convertView, parent);
TextView textView = (TextView) view;
//textView.setTextSize(16); set text size programmatically if needed
textView.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 32 /* this is item height */));
return view;
}
@Override
public int getViewTypeCount() {
return originalAdapter.getViewTypeCount();
}
@Override
public boolean hasStableIds() {
return originalAdapter.hasStableIds();
}
@Override
public boolean isEmpty() {
return originalAdapter.isEmpty();
}
@Override
public void registerDataSetObserver(DataSetObserver observer) {
originalAdapter.registerDataSetObserver(observer);
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
originalAdapter.unregisterDataSetObserver(observer);
}
@Override
public boolean areAllItemsEnabled() {
return originalAdapter.areAllItemsEnabled();
}
@Override
public boolean isEnabled(int position) {
return originalAdapter.isEnabled(position);
}
});
}
});
dialog.show();