在Android布局中均匀分布一组按钮

时间:2014-06-20 14:40:08

标签: android button layout evenly

我有12个按钮,它们必须均匀分布在布局的水平轴和垂直轴上。我无法使用GridLayout。这应该是它的样子:

另外,由于错误使用weight属性,我不想收到有关性能问题的消息。现在我正在尝试使用RelativeLayout,将每个按钮的位置设置为与其他按钮相关,但也许有更简单/更容易/更推荐的方式。

Buttons example

更新

所以,我决定使用GridView,这是我现在的代码:

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/menuGrid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnWidth="32dp"
    android:numColumns="3"
    android:verticalSpacing="5dp"
    android:horizontalSpacing="5dp"
    android:stretchMode="spacingWidthUniform"
    android:gravity="fill" />

我的适配器类是:

public class GridAdapter extends BaseAdapter {
    // Different methods ...

    // Images for the buttons
    private Integer[] mThumbIds = {
        R.drawable.btn_1, R.drawable.btn_2, R.drawable.btn_3, 
        R.drawable.btn_4, R.drawable.btn_5, R.drawable.btn_6, 
        R.drawable.btn_7, R.drawable.btn_8, R.drawable.btn_9, 
        R.drawable.btn_10, R.drawable.btn_11, R.drawable.btn_12
    };

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageButton imageButton;
        if (convertView == null) {
            imageButton = new ImageButton(mContext);
            imageButton.setLayoutParams(new GridView.LayoutParams(48, 48));
            imageButton.setScaleType(ImageButton.ScaleType.CENTER_CROP);
        } else {
            imageButton = (ImageButton) convertView;
        }

        imageButton.setImageResource(mThumbIds[position]);
        return imageButton;
    }
}

在我的主要活动中,我正在设置这样的适配器(它们居中并且不会占据整个空间):

GridView gridview = (GridView) v.findViewById(R.id.menuGrid);
gridview.setAdapter(new GridAdapter(this));

但按钮显示如下(居中和小,而不是占据整个区域):

Example 2

2 个答案:

答案 0 :(得分:1)

  

我无法使用GridLayout

所以请使用自API 1以来可用的GridView >>> LINK <<<。就像ListView(减去页脚n标题)和numColumns参数一样

答案 1 :(得分:0)

您可以尝试:

  • GridLayout,可通过Android支持包的gridlayout-v7图书馆计划

  • 中的backport返回到API级别7
  • TableLayout,使用android:stretchColumns为所有列分配空间......但这只有在单元格本身具有相同宽度时才有效

  • 嵌套LinearLayoutsandroid:layout_weight,因为对性能的担忧对您来说可能是也可能不是问题(例如,这是一个单独的活动或片段布局,而不是一个行中的一行ListView

而且,您始终可以使用自己的业务规则实施自己的ViewGroup,以便调整和定位子窗口小部件。

您目前正在尝试的内容 - RelativeLayout - 似乎不太可能以适应不同屏幕尺寸的方式运作。