实现仪表板 UI 模式的最有效方法



我想做仪表板模式。我目前为每个主页按钮执行此操作:

<FrameLayout
    android:layout_weight="1"
    android:focusable="true"
    android:onClick="onHomeButtonClicked"
    android:background="@drawable/button_background">
    <TextView
        android:text="@string/button_text"
        android:drawableTop="@drawable/button_icon"
        android:layout_gravity="center"
        android:gravity="center"
        android:background="@android:color/transparent" />
</FrameLayout>

我将按钮包装在 FrameLayout 中的原因是我想:

  • 最大化可点击区域
  • 正确制作图标和文本中心。

我过去尝试过这样做,但放弃了,因为我无法找到一种独立于屏幕尺寸的方式来居中文本和图标:

<Button
    android:layout_weight="1"
    android:background="@drawable/button_background"
    android:text="@string/button_text"
    android:onClick="onHomeButtonClicked"
    android:drawableTop="@drawable/button_icon"
    android:drawablePadding="DONT_KNOW_WHAT_TO_PUT_IN_HERE" />

我的问题:是否有可能做到所有这些:

  1. 不将按钮包装在其他内部布局(每个仅使用 1 个视图按钮)
  2. 最大化可点击区域
  3. 使图标和文本正确居中与屏幕尺寸无关的方式

非常感谢。

下面是一些用于以编程方式构建仪表板的代码:

@Override public View getView(int position, View convertView,
        ViewGroup parent) {
    TextView v = (TextView) convertView;
    if (v == null) {
        v = new TextView(DashboardActivity.this);
        v.setGravity(Gravity.CENTER);
    }
    v.setCompoundDrawablesWithIntrinsicBounds(0,
        mIcons[position].drawableId, 0, 0);
    v.setText(mIcons[position].labelId);
    return v;
}

您可以改用 android:drawableTop 在 XML 文件中,如果您可以事先构建仪表板。

最新更新