2010-12-12 23 views
5

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の結果は白です...

+0

25.3k担当者がこの質問をしていますか?私はあなたにヒントを与える...自分のクラスを書く....またはポイントを逃したのですか? – Squonk

+7

本当ですか?評判は、仲間がどこかで立ち往生してヒントを求めることは決してできないことを意味していますか? –

+0

私はあなた自身のカスタムView(Group)クラスを作成するとも言います。 –

答えて

4

希望するボタンのレイアウトを作成し、android:background@android:drawable/btn_defaultに設定します。最も外側のビューに残りの部分が含まれているようにします。clickablefocusableとなりました。

+0

興味深い... @トーマス:これがうまくいくなら、短いサンプルXMLを共有してください。私は非常に興味があります。 – WarrenFaith

+1

@WarrenFaith:そのようなことはうまくいきます。私は、 'EditText'のように見えるように' android:background = "@ android:drawable/edit_text" 'を' Button'に設定しました。 (日付ピッカーを使用して回避された日付検証:) :) – Macarse

+0

@WarrenFaith:XMLを質問に入れました。 – Thomas

1

私はよく分かりませんが、ImageButtonクラスを試しましたか?私はあなたが右側に画像を設定することができるはずだと思うし、新しい行でもラベルを追加することができるはずです。

[更新]私は "より柔軟な"部分を見逃しました。より柔軟なものを使いたい場合は、すべての可能な状態を処理してクリックを検出するために、独自のOnTouchListenerで独自の実装を作成する必要があると思います。

0

私はそのためのクラスを作成しません。それは2つのTextViewImageViewを持つちょうどRelativeLayoutです。

お分かりのように、ViewGroupViewになり、Viewはクリックリスナーを持つことができます。レイアウトを作成してクリックリスナーを設定する必要があります。

ここでの問題は、状態を処理する方法です。@android:drawable/btn_defaultを@ognianが述べたようにバックグラウンドとして使用することができます。

関連する問題