如何在Android布局中实现Button的自动宽度

时间:2015-04-22 18:40:12

标签: android layout widget android-linearlayout

我有一些垂直列出的按钮,我需要所有这些按钮具有相同的宽度,但也要显示其中的所有文本。

基本上我需要所有宽度作为最大宽度的包裹宽度。

希望我解释得很清楚。

现在......我的三星Galaxy S2(4.1.2)上已有一个布局,但在朋友的手机上 - 三星GT-N7100(note2)和android 4.4.2 - 它是不工作 - 按钮中没有显示某些文字。

这是我的布局:

insert into dbo.temp1 (name, location, city)
select name, location, city from mytable.

4 个答案:

答案 0 :(得分:0)

您可以扩展LinearLayout以强制其所有子项具有最大宽度:

// LinearLayoutButtonsHolder.java
package github.yaa110.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;

public class LinearLayoutButtonsHolder extends LinearLayout {

    public LinearLayoutButtonsHolder(Context context) {
        super(context);
    }

    public LinearLayoutButtonsHolder(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public LinearLayoutButtonsHolder(Context context, AttributeSet attrs,
                                     int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();

        if (getChildCount() == 0) return;

        getChildAt(getChildCount() - 1).addOnLayoutChangeListener(new OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                v.removeOnLayoutChangeListener(this);

                for (int i = 0; i < getChildCount(); i ++) {

                    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.MATCH_PARENT,
                            getChildAt(i).getMeasuredHeight());

                    getChildAt(i).setLayoutParams(lp);
                }
            }
        });
    }

}

现在,在布局的xml文件中,使用LinearLayoutButtonsHolder而不是LinearLayout不要忘记将每个android:layout_width的{​​{1}}设置为Button

wrap_content

答案 1 :(得分:0)

尝试设置android.width =“auto”

答案 2 :(得分:0)

像这样使用linearlayout

    <LinearLayout
        android:layout_centerInParent="true"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:id="@+id/adapter">

答案 3 :(得分:0)

我仅使用XML(无代码)来完成此操作-对于两个TextView。但是,同样的技术也应该适用于任意数量的按钮。

  • 假设我们有两个TextViews A和B。
  • 将每个TextView包裹在LinearLayout中(其中仅包含一个元素)-La和Lb。
  • 将每个TextView(A,B)的宽度设置为'wrap_content',将背景设置为透明
  • 将LinearLayouts(La,Lb)宽度设置为“ match_parent”,将背景设置为所需的任何颜色/形状
  • 将La和Lb包裹在另一个VerticalLinearLayout容器L中,将L的宽度/高度设置为“ wrap_content”,将高度设置为“ wrap_content”
  • 在每个TextView的LinearLayout(La,Lb)上设置填充以使其看起来不错
  • 在(La,Lb)上设置边距以创建间距
  • 应该这样做。
    注意:确保每个TextView的背景颜色/形状是通过单个布局容器的背景设置的,而不是通过TextView本身设置的。

我知道这个问题是3年前问的-但我认为在其他地方,仅涉及XML的解决方案也存在相同/相似的问题。因此希望这对以后的人有所帮助。