我在包含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 导致的。
我认为我可以通过在 ScrollView 中的 VerticalLayout 中放置许多 ImageView 来解决这个短期问题。不幸的是,图标的排列和数量根据应用程序的内部状态而变化很大,因此这不是一种持续的方法;从长远来看,我确实需要使用 ListView。有关如何解决此问题的任何想法吗?