web-dev-qa-db-ja.com

Android:ButtonまたはImageButtonでテキストと画像を組み合わせる

ボタンの上に(背景として)画像を配置し、実行時に何が起こっているかに応じて、画像の上または上にテキストを動的に追加しようとしています。

もし私がImageButtonを使うなら、私はテキストを追加する可能性さえありません。 Buttonを使用する場合、テキストを追加できますが、Android:drawableBottomおよび定義された 類似 類似のXML属性を使用してイメージを定義することのみ可能です。

しかし、これらの属性はテキストと画像をx次元とy次元で組み合わせるだけです。つまり、私のテキストの周囲に画像を描くことはできますが、自分のテキストの下/下には描くことができません。

これを行う方法について何か提案はありますか?考えの1つは、ButtonまたはImageButtonを拡張してdraw()-メソッドをオーバーライドすることです。しかし、私の現在の知識レベルでは、私はこれを行う方法を本当に知りません(2Dレンダリング)。もっと経験を積んだ人が解決策を知っているか、少なくとも始めるべきいくつかのポインタを知っているでしょうか。

513
znq

Buttonに対してsetBackground()を呼び出してボタンの背景を設定できます。

テキストは背景の上に表示されます。

Xmlで似たようなものを探しているのであれば、Android:background属性も同じです。

200
m_vitaly

Background、Icon-Image、およびTextを異なるファイルからの1つの Buttonに配置するだけの場合:Button背景、drawableTop/Bottom/Rigth/Leftおよびpadding属性に設定します。

<Button
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:background="@drawable/home_btn_test"
        Android:drawableTop="@drawable/home_icon_test"
        Android:textColor="#FFFFFF"
        Android:id="@+id/ButtonTest"
        Android:paddingTop="32sp"
        Android:drawablePadding="-15sp"
        Android:text="this is text"></Button>

より洗練された配置のためにはRelativeLayoutを使ってクリック可能にすることもできます。

チュートリアル: 両方のケースをカバーする素晴らしいチュートリアル: http://izvornikod.com/Blog/tabid/82/EntryId/8/Creating-Android-button-with-image-and-text-using -relative-layout.aspx

586
OneWorld

この問題にはもっと良い解決策があります。

通常のButtonを取り、drawableLeftgravity属性を使うだけです。

<Button
  Android:layout_width="fill_parent"
  Android:layout_height="wrap_content"
  Android:drawableLeft="@drawable/my_btn_icon"
  Android:gravity="left|center_vertical" />

これにより、ボタンの左側にアイコンが表示され、アイコンの右側にテキストが表示されるボタンが表示されます。 垂直方向の中央揃え

333
schlingel

enter image description here

     <Button
            Android:layout_width="0dp"
            Android:layout_weight="1"
            Android:background="@drawable/home_button"
            Android:drawableLeft="@Android:drawable/ic_menu_edit"
            Android:drawablePadding="6dp"
            Android:gravity="left|center"
            Android:height="60dp"
            Android:padding="6dp"
            Android:text="AndroidDhina"
            Android:textColor="#000"
            Android:textStyle="bold" />
64
Dhina k

LinearLayoutを使って、それがButtonのふりをする - background clickable を設定することが重要です。

<LinearLayout
    Android:id="@+id/button"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:background="@Android:drawable/btn_default"
    Android:clickable="true"
    Android:orientation="horizontal" >

    <ImageView
        Android:id="@+id/img"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center_vertical"
        Android:layout_marginLeft="5dp"
        Android:src="@drawable/image" />

    <TextView
        Android:id="@+id/textView2"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center_vertical"
        Android:layout_margin="5dp"
        Android:text="Do stuff" />
</LinearLayout>
53
Kieran

交換するだけ

Android:background="@drawable/icon"

Android:background="@Android:color/transparent"
Android:drawableTop="@drawable/[your background image here]"

かなり良いトリックをizz ..;)

43
CMA

私はここで述べたものとは異なるアプローチを取ったが、それは本当にうまくいっているので、それを共有したいと思った。

私はスタイルを使用して、左に画像、右中央にテキストのカスタムボタンを作成しています。以下の4つの「簡単なステップ」に従ってください。

I.少なくとも3つの異なるPNGファイルとあなたが持っているツールを使ってあなたの9つのパッチを作成してください:/YOUR_OWN_PATH/Android-sdk-mac_x86/tools/./draw9patch。これの後にあるべきです:

button_normal.9.png、button_focused.9.png、button_pressed.9.png

次に、24時間×24時間のPNGアイコンをダウンロードまたは作成します。

ic_your_icon.png

Androidプロジェクトのdrawable /フォルダーにすべて保存します。

II。プロジェクトのdrawable /フォルダーの下にbutton_selector.xmlというXMLファイルを作成します。状態は次のようになります。

<item Android:state_pressed="true" Android:drawable="@drawable/button_pressed" />
<item Android:state_focused="true" Android:drawable="@drawable/button_focused" />
<item Android:drawable="@drawable/button_normal" />

III。 values /フォルダに移動してstyles.xmlファイルを開くか作成し、次のXMLコードを作成します。

<style name="ButtonNormalText" parent="@Android:style/Widget.Button">
    <item name="Android:textColor" >@color/black</item>
    <item name="Android:textSize" >12dip</item>
    <item name="Android:textStyle" >bold</item>
    <item name="Android:height" >44dip</item>
    <item name="Android:background" >@drawable/button_selector</item>
    <item name="Android:focusable" >true</item>
    <item name="Android:clickable" >true</item>
</style>

<style name="ButtonNormalTextWithIcon" parent="ButtonNormalText">
    <item name="Android:drawableLeft" >@drawable/ic_your_icon</item>
</style>

ButtonNormalTextWithIconはButtonNormalText(「親スタイル」)を拡張しているため「子スタイル」です。

ButtonNormalTextWithIconスタイルのdrawableLeftをdrawableRight、drawableTop、またはdrawableBottomに変更すると、アイコンをテキストに対して別の位置に配置できます。

IV。 UI用のXMLがあるレイアウト/フォルダーに移動し、スタイルを適用するボタンに移動して、次のようにします。

<Button Android:id="@+id/buttonSubmit" 
Android:text="@string/button_submit" 
Android:layout_width="fill_parent" 
Android:layout_height="wrap_content" 
style="@style/ButtonNormalTextWithIcon" ></Button>

そして……ほら!左側に画像のあるボタンがあります。

私にとっては、これがそれを実行するためのより良い方法です!このようにすると、表示するアイコンとは別にボタンのテキストサイズを管理し、スタイルを使用してAndroid UIガイドラインを尊重して、アイコンが異なる複数のボタンに同じ背景を描画可能にすることができます。

また、アプリのテーマを作成して「親スタイル」を追加して、すべてのボタンが同じに見えるようにし、必要な場所にのみアイコン付きの「子スタイル」を適用することもできます。

21
Oscar S.
 <Button Android:id="@+id/imeageTextBtn" 
        Android:layout_width="240dip"
        Android:layout_height="wrap_content"
        Android:text="Side Icon With Text Button"
        Android:textSize="20sp"
        Android:drawableLeft="@drawable/left_side_icon"         
        />   

画像にdrawableTop(やはりdrawableLeftなど)を使用し、gravityleft|center_verticalを追加することで画像の下にテキストを設定できます。

<Button
            Android:id="@+id/btn_video"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_alignParentRight="true"
            Android:layout_centerVertical="true"
            Android:background="@null"
            Android:drawableTop="@drawable/videos"
            Android:gravity="left|center_vertical"
            Android:onClick="onClickFragment"
            Android:text="Videos"
            Android:textColor="@color/white" />
11
Kalai.G

おそらく私のソリューションは多くのユーザーに適しているでしょう。

私が提案しているのは、あなたのスタイルでTextViewを作ることです。それは私のために完璧に動作し、そしてボタンのように、すべての機能を持っています。

まず第一に、あなたがどこでも使用できるボタンスタイルを作ることができます...私はbutton_with_hover.xmlを作成しています

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_pressed="true" >
        <shape Android:shape="rectangle"  >
            <corners Android:radius="3dip" />
            <stroke Android:width="1dip" Android:color="#8dbab3" />
            <gradient Android:angle="-90" Android:startColor="#48608F" Android:endColor="#48608F"  />
        </shape>

        <!--#284682;-->
        <!--border-color: #223b6f;-->
    </item>
    <item Android:state_focused="true">
        <shape Android:shape="rectangle"  >
            <corners Android:radius="3dip" />
            <stroke Android:width="1dip" Android:color="#284682" />
            <solid Android:color="#284682"/>
        </shape>
    </item>
    <item >
        <shape Android:shape="rectangle"  >
            <corners Android:radius="3dip" />
            <stroke Android:width="1dip" Android:color="@color/ControlColors" />
            <gradient Android:angle="-90" Android:startColor="@color/ControlColors" Android:endColor="@color/ControlColors" />
        </shape>
    </item>

</selector>

次に、テキストビューボタンを作成しましょう。

    <TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginBottom="20dip"
    Android:layout_gravity="right|bottom"
    Android:gravity="center"
    Android:padding="12dip"
    Android:background="@drawable/button_with_hover"
    Android:clickable="true"
    Android:drawableLeft="@Android:drawable/btn_star_big_off"
    Android:textColor="#ffffffff"
    Android:text="Golden Gate" />

そしてこれは結果です。次に、カスタムボタンを色やその他のプロパティや余白でスタイル設定します。がんばろう

enter image description here

7

重要な更新

通常のAndroid:drawableLeftなどをベクターのドロアブルで使用しないでください。そうしないと、crash in lower API versionsになります。 (ライブアプリで直面しました)

ベクトル描画可能

ベクトルドロウアブルを使用している場合は、

  • AndroidXに移行しましたか?そうでない場合は、最初にAndroidXに移行する必要があります。それは非常に簡単です、 androidxとは何ですか、どのように移行しますか?
  • バージョン 1.1.0-alpha01 でリリースされたため、appcompatバージョンは少なくとも1.1.0-alpha01でなければなりません。現在の最新バージョンは1.1.0-alpha02です。信頼性を高めるために最新バージョンを使用してください。リリースノート- link を参照してください。

    implementation 'androidx.appcompat:appcompat:1.1.0-alpha02'

  • AppCompatTextView/AppCompatButton/AppCompatEditTextを使用します

  • app:drawableLeftCompatapp:drawableTopCompatapp:drawableRightCompatapp:drawableBottomCompatapp:drawableStartCompatapp:drawableEndCompatを使用します

通常のドロアブル用

あなたがベクトルドローアブルを必要としないなら、あなたはできます

  • Android:drawableLeftAndroid:drawableRightAndroid:drawableBottomAndroid:drawableTopを使用します
  • 通常のTextViewButtonEditText、またはAppCompatクラスのいずれかを使用できます。

以下を達成できますOutput

output

7
Khemraj
<Button
     Android:id="@+id/groups_button_bg"
     Android:layout_height="wrap_content"
     Android:layout_width="wrap_content"
     Android:text="Groups"
     Android:drawableTop="@drawable/[image]" />


Android:drawableLeft
Android:drawableRight
Android:drawableBottom
Android:drawableTop

http://www.mokasocial.com/2010/04/create-a-button-with-an-image-and-text-Android/ /

6
Sam

このコードは私にとっては完璧に動作します

<LinearLayout
    Android:id="@+id/choosePhotosView"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal"
    Android:gravity="center"
    Android:clickable="true"
    Android:background="@drawable/transparent_button_bg_rev_selector">

    <ImageView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:src="@drawable/choose_photo"/>

     <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:textColor="@Android:color/white"
        Android:text="@string/choose_photos_tv"/>

</LinearLayout>
5
eyal

これを使うことができます:

  <Button
                    Android:id="@+id/reset_all"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:layout_marginRight="5dp"
                    Android:layout_weight="1"
                    Android:background="@drawable/btn_med"
                    Android:text="Reset all"
                    Android:textColor="#ffffff" />

                <Button
                    Android:id="@+id/undo"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:layout_marginLeft="5dp"
                    Android:layout_weight="1"
                    Android:background="@drawable/btn_med"
                    Android:text="Undo"
                    Android:textColor="#ffffff" />

ということで、私はbackgroundとして画像を入れ、テキストを追加しました。

0
jigar