0

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

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

按钮示例

更新

所以,我决定使用 a 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));

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

示例 2

4

2 回答 2

1

我不能使用 GridLayout

所以使用GridView >>> LINK <<<,从 API 1 开始可用。就像 ListView 一样工作(减去页脚 n 标题)并带有numColumns参数

于 2014-06-20T15:19:32.360 回答
0

你可以试试:

  • GridLayout,可通过Android 支持包的库项目中的反向移植返回到 API 级别 7gridlayout-v7

  • TableLayoutandroid:stretchColumns用于为所有列分配空间...但这仅在单元格本身宽度相同时才有效

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

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

您目前正在尝试的 - RelativeLayout- 似乎不太可能以能够很好地适应不同屏幕尺寸的方式工作。

于 2014-06-20T15:16:43.620 回答