在Android XML中是否有一种方法可以将宽度设置为最宽按钮的一排按钮?

问题描述:

有没有办法在XML中声明一行按钮,这样所有的按钮都有相同的宽度,这等于最宽按钮的wrap_content宽度?我熟悉将所有宽度设置为0并将它们全部赋予1的权重的技巧,但如果父级布局宽度设置为wrap_content,则不起作用。我不想将父宽度设置为fill_parent,因为我不希望按钮拉伸超过必要。在Android XML中是否有一种方法可以将宽度设置为最宽按钮的一排按钮?

我能想到做到这一点的唯一方法是在代码中(每个按钮中的onMeasure逻辑与其他按钮进行通信或使用自定义布局类)。

我想你必须在代码中这样做。

创建一个自定义布局类将是要走的路。覆盖onMeasure()并使其看起来像这样:

  1. 在所有孩子上调用setLayoutParams将其layout_widths设置为WRAP_CONTENT。
  2. 调用super.onMeasure()
  3. 迭代子视图以查找具有最大getMeasuredWidth()的视图。
  4. 使用最宽的像素宽度遍历其他所有调用setLayoutParams()的子视图。
  5. 再次调用super.onMeasure()。 :)

应该工作,但我不会股份还有我的名誉......乐意帮助你进一步,如果它没有。

+0

听起来好像没有办法只用XML来完成它。我以前很怕那个。很遗憾Android没有像J2SE的GridLayout这样的东西。 – 2011-01-13 00:04:45

为了让按钮在XML行,你需要在一个LinearLayout中的orietnation添加按钮,切换到横向即

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
</LinearLayout> 

至于获得最广泛的按钮,并改变所有其它按钮以匹配我不知道作为一个猜测,你将不得不在活动中有某种方法来获得最广泛的按钮,然后programaticaly设置所有其他按钮是相同的。

只要找出你最宽的按钮是什么,但它在一个水平宽度匹配的视图,然后在< 2.3使用layout_width =“match_parent”或“fill_parent”。

这将使他们都使用分配的宽度。

如果你想以编程方式做,你需要迭代所有的部分,找到最大值,然后再次迭代并设置它。