7

Android では、他のビューを含むボタンを作成したいと考えています。たとえば、次のようなものです。

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

しかし、この特定の例よりも柔軟にしたいと思います。理想的には、別の XML ファイルでレイアウトを実装できるように、ボタンに ViewGroup を単純に含めることができるようにします。ただし、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ます。残りを含む最も外側のビューを作成するclickablefocusable、完了です。

于 2010-12-12T13:35:53.517 に答える
1

私はそのためのクラスを作成しません。RelativeLayout2 つTextViewの s と aだけのaImageViewです。

ご存知かもしれませんが、ViewGroupextendsViewと aViewはクリック リスナーを持つことができます。そのため、レイアウトを作成し、クリック リスナーを設定する必要があります。

ここでの問題は、状態をどのように処理するかです@android:drawable/btn_default。@ognian が言ったように、背景として使用してみてください。

于 2010-12-12T14:02:19.817 に答える
1

よくわかりませんが、ImageButtonクラスを試しましたか?画像を右側に設定できるはずで、新しい行でラベルを追加できるはずです。

[更新] 「より柔軟な」部分を見逃していました。OnTouchListenerより柔軟なものが必要な場合は、考えられるすべての状態を処理し、クリックを検出する独自の実装を作成する必要があると思います。

于 2010-12-12T12:49:05.643 に答える