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

发布于 2024-11-05 10:58:02 字数 1212 浏览 8 评论 0原文

我想做仪表板模式。我目前对每个主页按钮都这样做:

<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. 将图标和文本正确居中 一种与屏幕尺寸无关的方式

非常感谢。

I want to do the Dashboard pattern. I currently do this for each home button:

<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>

The reason I wrap my button inside a FrameLayout is I want to:

  • Maximize the clickable area
  • Make the icon and text properly
    centered.

I tried doing this in the past but gave up because I couldn't figure out a screensize-independent way of centering the text and icon:

<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" />

My question: Is it possible to do all these:

  1. Not wrap the Button inside other
    layout (using only 1 view per
    button)
  2. Maximize the clickable area
  3. Properly center the icon and text in
    a screensize-independent way

Many thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

恰似旧人归 2024-11-12 10:58:02

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

@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;
}

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

Here's some code that I use to build a dashboard programmatically:

@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;
}

You could instead use android:drawableTop in an XML file if you could build the dashboard beforehand.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文