Android:设置按钮高度与宽度相同

时间:2016-05-02 20:44:05

标签: java android android-layout button

这是我布局的一部分。我需要按钮才能成为完美的正方形。行中将有4个按钮。 scrollview中会有更多行。对于任何屏幕尺寸,每行都适合屏幕宽度。我已经尝试了大量的解决方案,但没有任何工作,因为我想。然后我还需要将文本动态为按钮,以便每次填充按钮宽度。有什么解决方案吗?我试了几个星期。

<TableRow
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="10dp">

            <Button
                android:id="@+id/button4"
                android:layout_width="match_parent"
                android:text="@string/r1960"
                android:textColor="#ffffff"
                android:textSize="@dimen/loptatext"
                android:shadowColor="#000000"
                android:shadowRadius="7"
                android:layout_weight="1"
                android:background="@drawable/tlacitko_stav" />

            <Button
                android:id="@+id/button5"
                android:layout_width="match_parent"
                android:text="@string/r1964"
                android:textColor="#ffffff"
                android:textSize="@dimen/loptatext"
                android:shadowColor="#000000"
                android:shadowRadius="7"
                android:layout_weight="1"
                android:background="@drawable/tlacitko_stav" />

            <Button
                android:id="@+id/button6"
                android:layout_width="match_parent"
                android:text="@string/r1968"
                android:textColor="#ffffff"
                android:textSize="@dimen/loptatext"
                android:shadowColor="#000000"
                android:shadowRadius="7"
                android:layout_weight="1"
                android:background="@drawable/tlacitko_stav" />

            <Button
                android:id="@+id/button7"
                android:layout_width="match_parent"
                android:text="@string/r1972"
                android:textColor="#ffffff"
                android:textSize="@dimen/loptatext"
                android:shadowColor="#000000"
                android:shadowRadius="7"
                android:layout_weight="1"
                android:background="@drawable/tlacitko_stav" />
        </TableRow>

4 个答案:

答案 0 :(得分:2)

您可以扩展Button并将其强制为方形,如下所示:

public class SquareButton extends Button {
    public SquareButton(Context context) {
        super(context);
    }

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

    public SquareButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public SquareButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = MeasureSpec.getSize(heightMeasureSpec);
        int size = width > height ? height : width;
        setMeasuredDimension(size, size);
    }
}

答案 1 :(得分:0)

我有一个非常类似的问题,我需要在屏幕上动态添加按钮,具体取决于arrayList的大小。据我所知,你不能使用xml这样做,并且必须在活动(或片段)中编写View

按钮字符串示例:

   ArrayList<String> trending = new ArrayList<String>() {
    {
        add("one"); add("two"); add("three"); add("four"); add("five"); add("six"); add("eleven");
        add("seven"); add("eight"); add("nine");add("ten");
    }
};

以下是编程布局中的按钮(我的是切换按钮)

  //LAYOUT SETTINGS 5
    TableLayout rLayout5 = new TableLayout(getActivity());
    rLayout5.setOrientation(TableLayout.VERTICAL);
    LayoutParams param7 = new LayoutParams(
            LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT);
    param7.addRule(RelativeLayout.BELOW, rLayout4.getId());
    rLayout5.setBackgroundColor(Color.parseColor("#EEEBAA"));

    rLayout5.setLayoutParams(param7);
    // List<ToggleButton> togButtStore = new ArrayList<ToggleButton>();

    int i = 0 ;
    while (i < trending.size()){
        if (i % 3 == 0){
            tr = new TableRow(getActivity());
            rLayout5.addView(tr);
        }
        ToggleButton toggleBtn = new ToggleButton(getActivity());
        toggleBtn.setText(trending.get(i));
        toggleBtn.setId(i);
        toggleBtn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    Context context = getActivity().getApplicationContext();

                    CharSequence text = "Hello toast!";
                    int duration = Toast.LENGTH_SHORT;
                    Toast toast = Toast.makeText(context, text, duration);
                    toast.show();
                } else {
                    // The toggle is disabled
                }
            }
        });
        tr.addView(toggleBtn);
        i++;
    }

您需要将您编程的每个布局添加到视图

  root.addView(rLayout5);
  getActivity().setContentView(root);

然后当然不要忘记返回视图(正常情况下)。

我想用Button设置给你一个布局设置,这可能对使用Java而不是xml开始编程布局有所帮助。只是要添加,你在xml中做的任何布局和文本设置也可以用Java设置,并且它更灵活。

答案 2 :(得分:0)

设置你的按钮高度和宽度编程工作真棒,希望它有帮助..

在类文件中输入以下代码。

    DisplayMetrics displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);

    int screenHeight = displaymetrics.heightPixels;

    int btnHeight = (int) (screenHeight * 0.25);
    int btnWidth = (int) (screenHeight * 0.25);

    button1.getLayoutParams().height = btnHeight;
    button1.getLayoutParams().width = btnWidth;

    button2.getLayoutParams().height = btnHeight;
    button2.getLayoutParams().width = btnWidth;

    button3.getLayoutParams().height = btnHeight;
    button3.getLayoutParams().width = btnWidth;

    button4.getLayoutParams().height = btnHeight;
    button4.getLayoutParams().width = btnWidth;

我们在这里使用了Displaymetrics,这将根据设备的屏幕尺寸更改您的按钮尺寸按钮宽度和高度是屏幕高度的25%,您可以根据自己的方便更改。

答案 3 :(得分:0)

你应该这样做:

Button button = (Button) findViewById.(R.id.button);

int buttonWidth = button.getLayoutParams().width;
button.setLayoutParams(new LayoutParams(buttonWidth, buttonWidth));

希望这会对你有所帮助。