【问题标题】:How to create a Button that contains multiple Views?如何创建包含多个视图的按钮?
【发布时间】:2010-12-12 12:45:25
【问题描述】:

在 Android 上,我想创建一个包含其他视图的按钮。例如,像这样:

+---------------------------+
| Hello world!    +-------+ |
|                 | image | |
| Some more info  +-------+ |
+---------------------------+

但我希望它比这个具体示例更灵活。理想情况下,按钮可以简单地包含一个 ViewGroup,这样我就可以在一个单独的 XML 文件中实现它的布局。但是,由于 Button 扩展了 View,而不是 ViewGroup,这似乎是不可能的。

有没有办法使用标准的 Android 组件来实现这一点,还是我必须求助于编写自定义按钮类?


根据要求,一些可以解决问题的示例 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:focusable="true"
    android:clickable="true"
    android:background="@android:drawable/btn_default">
    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/primary_text_light"/>
    <TextView
        android:id="@+id/additional_line_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/primary_text_light"/>
    <TextView
        android:id="@+id/additional_line_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/primary_text_light"/>
</LinearLayout>

我必须明确设置 TextView 的颜色,否则它们几乎无法阅读(默认情况下它们是白色的)。我从 SDK 中挖出了标识符:.../platforms/android-7/data/res/values/public.xml。奇怪的是,primary_text_light 给出黑色文本,而 primary_text_dark 产生白色......

【问题讨论】:

  • 在 SO 上有 25.3k 代表,而您在问这个问题?我会给你一个提示......编写你自己的课程......还是我错过了重点?
  • 真的吗?名声是否意味着一个人永远不会被困在某个地方并寻求一些提示?
  • 我还要说,创建您自己的自定义 View(Group) 类。
  • @Siddharth Lele 和 @Thomas:对不起,如果这听起来很苛刻和无益,我很抱歉,但是是的,在我看来,SO 是程序员的问答网站,那么已经建立了显着声誉的人会回答问题肯定可以在 Android 开发者页面上执行一个简单的搜索,这会带来这样的事情......developer.android.com/guide/topics/ui/custom-components.html 和这个developer.android.com/guide/topics/ui/…
  • @MisterSquonk:我当然搜索过。我确实想到了创建自定义类的想法。如果您不相信,请再次阅读我帖子的最后一句话。我只是想知道这样一个看似简单的事情是否不能以更简单的方式完成(WPF会让我这样做!)。事实证明,有,但你发布的链接都没有指向我。所以我仍然很高兴我问了:)

标签: android button view viewgroup


【解决方案1】:

创建所需按钮的布局,并将其设置为 android:background@android:drawable/btn_default。制作包含其余部分 clickablefocusable 的最外层 View,就完成了。

【讨论】:

  • 很有趣...@Thomas:如果可行,请分享一个简短的 XML 示例,我很感兴趣 :)
  • @WarrenFaith:这种事情很好用。我使用android:background="@android:drawable/edit_text" 设置为Button 使其看起来像EditText。 (避免使用日期选择器进行日期验证:))
  • @WarrenFaith:我将 XML 放入问题中。
  • 像魅力一样工作,包括我短暂担心的所有状态变化!谢谢!
【解决方案2】:

我不确定,但您尝试过ImageButton 课程吗?我想你应该能够将图像设置在右侧,并且你应该也能够添加带有新行的标签。

[更新] 我错过了“更灵活”的部分。如果你想要一个更灵活的,我想你需要创建一个自己的实现,使用自己的OnTouchListener 来处理所有可能的状态并检测点击。

【讨论】:

    【解决方案3】:

    我不会为此创建课程。这只是一个RelativeLayout,有两个TextViews 和一个ImageView

    您可能知道,ViewGroup 扩展 ViewView 可以拥有点击侦听器。所以你需要创建布局并为其设置点击监听器。

    这里的问题是你如何处理状态,你可以尝试使用@ognian 说的@android:drawable/btn_default 作为背景。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多