我遇到了一个颜色选择器的情况。如果它是在纵向模式下完成的,一切都很好。但是如果我在横向模式下进行(对话框不适合屏幕),那么当试图给布局充气时,它似乎会爆炸。
在横向模式下是否有一些特殊方法可以在视图不完全适合屏幕的情况下进行此操作?
除了屏幕不动产之外我还需要考虑哪些差异?
答案 0 :(得分:1)
CraigA,
阅读完评论之后,似乎对XML中生成不同宽度和高度的方式存在误解。这是一个常见的误解。因此,这里要理解的是,各种对象的宽度虽然是动态的,但却会对对象施加不同的行为。
layout_width / layout_height一般
width和height参数不会影响对象的实际宽度和高度。它们会影响显示屏的宽度和高度。这意味着您可以将宽度和高度设置为小于内容,滚动时仍可以访问内容,如果它们大于容器。
由于许多子视图从父视图中获取其提示,因此可能会导致您在上面看到的行为。这里的诀窍是首先了解发生了什么,然后补偿系统的行为。
<强> match_parent / FILL_PARENT 强>
通常,这意味着当前View将从父级获取其大小。如果View是顶级视图,则行为会略有变化。如果这恰好是对话框的顶级视图,则它将是屏幕的大小或内容的大小(以较小者为准)。如果视图是活动的顶级视图,则结果是相同的,但它们看起来不同。也就是说,它将具有完整的活动不透明度和背景,但视图的大小仅是屏幕内容或大小(以较小者为准)。除非宽度/高度基于此视图的宽度/高度,否则儿童的尺寸不受影响。
<强> WRAP_CONTENT 强>
在这种情况下,显示高度基于所有直接孩子的显示高度。此行为级联到“最年轻”的后代,直到层次结构使用wrap_content
以外的其他内容。
您的问题(现在看来)
您的顶级视图使用wrap_content,因此显示大小将基于所有子级的显示大小。在这种情况下,最好只为您的顶级视图使用match_parent' or
fill_parent`(取决于您的API)。这至少会使Dialog成为合适的大小,如果不是内容。对于那些大小基于顶级视图的控件,它们将会排成一行。那些不是必须手动调整。
现在,你必须做出的决定是实施。您是否需要调整每个显示器的尺寸,或仅调整横向尺寸。如果您的更改对纵向显示没有影响,那么一个文件应该是好的。如果没有,您将需要一个纵向布局文件(当前的布局文件),然后是横向模式的调整文件。
如果您使用的是两个文件,则会有一个名为layout_port
的文件夹,用于存储当前文件。您将为调整后的文件夹添加名为layout_land
的文件夹。它们的名称相同,只是放在单独的文件夹中。
希望这有帮助,
FuzzicalLogic