Ted*_*opp 5 layout android dialog
当它包含一个对话框的宽度时,我遇到了问题ListView:对话框总是几乎填满了屏幕的宽度.这是一个问题的例子:

我需要对话框宽度来匹配图标.我试过通过播放这里和这里描述的对话框样式来解决这个问题,但无济于事.我认为那些线程在错误的轨道上(至少对于这个问题),因为(1)它们没有解决问题,(2)我可以通过简单地不使用a来使对话框按照需要调整大小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();
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用a创建对话框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>
Run Code Online (Sandbox Code Playgroud)
适配器从此布局加载每一行:
<?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>
Run Code Online (Sandbox Code Playgroud)
使用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>
Run Code Online (Sandbox Code Playgroud)
并且不对代码或资源进行其他更改,结果是上面显示的紧凑对话框.据我所知,问题严重是由于ListView对话框中存在的问题.
我想我可以通过ImageView在一个VerticalLayout内部放置一些s来在短期内解决这个问题ScrollView.不幸的是,根据应用程序的内部状态,图标的排列和数量会有很大差异,因此这不是一种可持续的方法; 从长远来看,我真的需要用一个ListView.有关如何解决此问题的任何想法?
首先,抱歉我的英语不好,但我会尽力解释我的意见.
ListView可以包含任何短或长的数据(例如,字符串).所以,如果你设置LayoutParams为a wrap_content,就无法知道它有多长.取决于数据,实际数据的宽度可能比屏幕的宽度长.
所以,如果你设置wrap_content,它将自动更改为match_parent/ fill_parent(我不完全知道,但其中一个)
你也可以看到身高.
ListView不知道应该如何绘制行.因此,在你的情况下,ListView高度将被拉伸到Activity高度.
从Google I/O 2010开始,他们解释了为什么我们不应该使用wrap_content ListView.
据我所知,在你的情况下(ListView高度为wrap_content)getView(),当ListView被初始化时,将被调用为存在多行.
所以,我的意见是你可以设置:
确切的width_value为Dialog,并将ListView宽度设置为match_parent或fill_parent.
ListView宽度乘以宽度的x%Activity.
添加在您的测试,TextView在Dialog,
我们可以通过测量文本来了解确切的宽度值.所以,有可能使用wrap_content.
| 归档时间: |
|
| 查看次数: |
3285 次 |
| 最近记录: |