当对话框包含 ListView 时,我遇到了对话框宽度的问题:对话框总是几乎填满屏幕的宽度。这是问题的示例:
我需要对话框宽度来匹配图标。我已经尝试通过使用对话框样式来解决此问题,如 here 所述和 here ,无济于事。我认为这些线程在错误的轨道上(至少对于这个问题),因为(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 检查 View 层次结构显示只有 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。关于如何解决此问题的任何想法?
最佳答案
首先,抱歉我的英语不好,但我会尽力解释我的观点。
ListView 可以包含任何短或长的数据(例如,字符串)。
因此,如果将 LayoutParams 设置为 wrap_content,则无法知道它有多长。
取决于数据,实际数据的宽度可能比屏幕的宽度长。
所以,如果你设置了wrap_content,它会自动变成match_parent/fill_parent(我不完全知道,但是其中之一他们)
你也可以在高度上看到这一点。
ListView 不知道应该如何绘制行。
因此,在您的情况下,ListView 的高度将拉伸(stretch)到 Activity 的高度。
来自 Google I/O 2010 ,他们解释了为什么我们不应该在 ListView 上使用 wrap_content。
据我所知,在您的情况下(ListView 的高度为 wrap_content),getView() 将在存在许多行时被调用, 当 ListView 被初始化时。
所以,我的意见是你可以设置:
将width_value 精确设置为Dialog,并将ListView 的宽度设置为match_parent 或fill_parent。
ListView 的宽度为 Activity 宽度的 x%。
在你的测试中,在 Dialog 中添加 TextView,
我们可以通过测量文本来知道确切的宽度值。因此,可以使用 wrap_content。
关于android - 包含 ListView 时对话框太宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18222881/
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我的Gallery模型中有以下查询:media_items.includes(:photo,:video).rank(:position_in_gallery)我的图库模型有_许多媒体项,每个都有一个照片或视频关联。到目前为止,一切正常。它返回所有media_items包括它们的photo或video关联,由media_item的position_in_gallery属性排序。但是我现在需要将此查询返回的照片限制为仅具有is_processing属性的照片,即nil。是否可以进行相同的查询,但条件是返回的照片等同于:.where(photo:'photo.is_processingIS
-if!request.path_info.include?'A'%{:id=>'A'}"Text"-else"Text"“文本”写了两次。我怎样才能只写一次并同时检查path_info是否包含“A”? 最佳答案 有两种方法可以做到这一点。使用部分,或使用content_forblock:如果“文本”较长,或者是一个重要的子树,您可以将其提取到一个部分。这会使您的代码变干一点。在给出的示例中,这似乎有点矫枉过正。在这种情况下更好的方法是使用content_forblock,如下所示:-if!request.path_info.inc
Ocra无法处理需要“tk”的应用程序require'tk'puts'nope'用奥克拉http://github.com/larsch/ocra不起作用(如链接中的一个问题所述)问题:https://github.com/larsch/ocra/issues/29(Ocra是1.9的"new"rubyscript2exe,本质上它用于将rb脚本部署为可执行文件)唯一的问题似乎是缺少tcl的DLL文件我不认为这是一个问题据我所知,问题是缺少tk的DLL文件如果它们是已知的,则可以在执行ocra时将它们包括在内有没有办法知道tk工作所需的DLL依赖项? 最佳答
我正在使用DMOZ的listofurltopics,其中包含一些具有包含下划线的主机名的url。例如:608609TheOuterHeaven610InformationandimagegalleryofMcFarlane'sactionfiguresforTrigun,Akira,TenchiMuyoandotherJapaneseSci-Fianimations.611Top/Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures612虽然此url可以在网络浏览器中使用(或者至少在我的浏览器中可以使用:
我有一个数组:array=['Footballs','Baseball','football','Soccer']而且我需要计算看到Football或Baseball的次数,无论大小写和复数形式如何。这是我尝试做的,但没有成功:array.count{|x|x.downcase.include?'football'||x.downcase.include?'baseball'}编写这段代码的正确或更好的方法是什么?我正在寻找3作为答案。 最佳答案 我会将count与一个block结合使用,该block根据与您正在寻找的约束相匹配的正
在Ruby(1.8.X)中为什么Object既继承了内核又包含了内核?仅仅继承还不够吗?irb(main):006:0>Object.ancestors=>[Object,Kernel]irb(main):005:0>Object.included_modules=>[Kernel]irb(main):011:0>Object.superclass=>nil请注意,在Ruby1.9中情况类似(但更简洁):irb(main):001:0>Object.ancestors=>[Object,Kernel,BasicObject]irb(main):002:0>Object.included
我有两个具有相同方法名称的模块。当我在某个类中包含两个模块时,只执行最后一个模块的方法。我需要在初始化类时同时执行:classMyClassincludeFirstModuleincludeSecondModuledefinitializefoo#fooiscontainedinbothmodulesbutonlytheoneinSecondModulesisexecutedendend可行吗? 最佳答案 正如YusukeEndoh所说,在Ruby中一切皆有可能。在这种情况下,您必须忘记只说“foo”的便利性,并且必须非常明确地说明