Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何设置AlertDialog项目高度?_Android_Android Alertdialog_Android Styles - Fatal编程技术网

Android 如何设置AlertDialog项目高度?

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> 但是,问题是项目的各个高度仍然保持不变-事实上,当您在对话框中滚动时,第五个元素刚刚显示: 我试过了,但那只是

目前在安卓4.3设备上。我使用的是一个极好的答案,我能够减少
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();