【发布时间】:2014-07-28 21:03:41
【问题描述】:
我正在为通用弹出窗口设计标题栏,它的特点是左上角有一个按钮,右上角有一个按钮,以及夹在它们之间的标题文本视图。 (按钮不是简单的 android.widget.Buttons,而是现在的片段。)
这两个按钮必须是“wrap_content”,因为它们中的实际文本/内容会因实例而异。至关重要的是,这两个按钮的宽度可能不同。结果,它们之间的“剩余空间”,由下方的“A”和“B”预订,不在周围视图的中心;但我想将标题文本放在该空间中,使其在周围视图中居中。
如果我天真地这样做,比如使用带有非零 layoutWeight 标题文本的 LinearLayout(这样它会填满剩余空间),文本就会偏离中心:
A B
[ Button 1 (ExtraSpace) ] [ ____________Title Text____________ ] [ Button 2 ]
^
|
|
center of window
我更喜欢以某种方式调整按钮 1 和按钮 2 的大小,使它们具有相同的宽度,本质上是添加边距/填充/间隔视图/relativelayout-magic/等。到通常更窄的那个。这将使标题文本实际上在对话框中居中:
A B
[ Button 1 (ExtraSpace) ] [ _____Title Text______ ] [ (ExtraSpace) Button 2 ]
^
|
|
center of window
我也可以独立于按钮来定位/调整标题文本;但重要的是,文本的位置以及必要时相对于两个按钮的内容正确省略,这样我就不会最终尝试在两个按钮的顶部显示标题文本。
【问题讨论】:
-
我能够做到这一点的唯一方法是使用按钮的静态大小 - 即我给了它们一个永远不会超过的 minWidth,然后使用布局权重。
-
通过使用 getViewTreeObserver().addOnGlobalLayoutListener() 检查按钮 1 或按钮 2 的大小是否发生变化,尽管代码量很大,但我至少能够得到一些工作,并且根据需要调整在按钮和标题文本之间注入的两个间隔视图的大小。感觉就像一个黑客;但是如果几天后没有人有更好的建议,我会添加它作为答案。