【问题标题】:Is there a way in Android XML to make a row of buttons with widths set to widest button?Android XML中有没有办法制作一排宽度设置为最宽按钮的按钮?
【发布时间】:2011-06-08 03:28:56
【问题描述】:

有没有办法在 XML 中声明一行按钮,使所有按钮的宽度相同,等于最宽按钮的 wrap_content 宽度?我熟悉将所有宽度设置为 0 并将它们都分配为 1 的权重的技巧,但如果父布局宽度设置为 wrap_content,则这将不起作用。我不想将父宽度设置为 fill_parent,因为我不希望按钮过度拉伸。

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

【问题讨论】:

    标签: android xml layout android-linearlayout


    【解决方案1】:

    我认为您必须在代码中执行此操作。

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

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

    应该工作,但我不会把我的名誉押在上面...如果没有,很乐意为您提供进一步的帮助。

    【讨论】:

    • 听起来好像没有办法单独在 XML 中做到这一点。我以前很怕那个。遗憾的是 Android 没有 J2SE 的 GridLayout 之类的东西。
    【解决方案2】:

    要在 XML 中连续获取按钮,您需要在 LinearLayout 中添加按钮并将方向更改为水平,即

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

    至于获得最宽的按钮并更改所有其他按钮以匹配我不确定您是否必须在活动中使用某种方法才能获得最宽的按钮,然后以编程方式将所有其他按钮设置为是相同的。

    【讨论】:

      【解决方案3】:

      只要找出你最宽的按钮是什么,但它在一个水平宽度要匹配的视图中,然后在

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

      如果您想以编程方式执行此操作,则需要遍历所有部分,找到最大值,然后再次迭代并设置它。

      【讨论】:

        猜你喜欢
        • 2021-03-15
        • 2013-09-23
        • 1970-01-01
        • 2011-04-25
        • 1970-01-01
        • 2015-06-24
        • 2012-12-21
        • 1970-01-01
        • 2021-03-14
        相关资源
        最近更新 更多