7

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

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

4

3 回答 3

4

创建所需按钮的布局,并将其设置android:background@android:drawable/btn_default. 制作包含其余部分的最外层视图,clickable然后focusable您就完成了。

于 2010-12-12T13:35:53.517 回答
1

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

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

于 2010-12-12T12:49:05.643 回答
1

我不会为此创建一个类。它只是RelativeLayout带有两个TextViews 和 a 的 a ImageView

您可能知道,一个ViewGroupextendsView和 aView可以有点击监听器。因此,您需要创建布局并为其设置点击侦听器。

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

于 2010-12-12T14:02:19.817 回答