当对话框包含 a 时,我遇到了对话框宽度的问题ListView
:对话框总是几乎填满屏幕的宽度。这是问题的一个例子:
我需要对话框宽度来匹配图标。我尝试通过使用此处和此处描述的对话框样式来解决此问题,但无济于事。我认为这些线程在错误的轨道上(至少对于这个问题),因为(1)它们不能解决问题,(2)我可以通过简单地不使用ListView
. 例如,如果我将 替换ListView
为简单的TextView
(详情如下),则所有内容都可以根据需要进行调整:
这是我用来显示对话框的代码:
private void showDisplayStyleDialog(int id, int choices, int values) {
final Dialog dlg = new Dialog(this);
dlg.requestWindowFeature(Window.FEATURE_NO_TITLE);
dlg.setContentView(R.layout.display_style_dialog);
final ListView lv = (ListView) dlg.findViewById(android.R.id.list);
if (lv != null) {
displayStyleAdapter.setChoices(choices, values);
lv.setAdapter(displayStyleAdapter);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long itemId) {
dlg.dismiss();
setDisplayStyle(DisplayStyle
.valueOf(displayStyleAdapter.mValues[position]));
}
});
}
dlg.setCanceledOnTouchOutside(true);
dlg.show();
}
我还尝试使用 . 创建对话框AlertDialog.Builder
,但没有任何改进。对话框布局 ( display_style_dialog.xml
) 为:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ListView
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/white" >
</ListView>
</LinearLayout>
适配器从此布局加载每一行:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/holder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:padding="5dp" >
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/display_style_image_bg"
android:contentDescription="@string/cd_display_style" />
</LinearLayout>
用 Android Debug Monitor 检查视图层次结构,发现只有它ListView
本身是整个对话框的宽度;每行(根据需要)调整大小以匹配图标宽度。是它ListView
本身迫使广泛的对话。如果我display_style_dialog.xml
改为:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/test_string"
android:textColor="@android:color/black"
android:background="@android:color/white" >
</TextView>
</LinearLayout>
并且不对代码或资源进行其他更改,结果是上面显示的紧凑对话框。据我所知,问题完全是由于ListView
对话框中存在的。
ImageView
我想我可以通过在 a 中放置一些s 在短期内解决这个VerticalLayout
问题ScrollView
。不幸的是,图标的排列和数量会根据应用程序的内部状态而有很大差异,因此这不是一种可持续的方法;从长远来看,我真的需要使用ListView
. 关于如何解决这个问题的任何想法?