web-dev-qa-db-ja.com

Androidアイコンとテキスト付きのボタン

私のアプリには次のようなボタンがあります:

    <Button
        Android:id="@+id/bSearch"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:padding="16dp"
        Android:text="Search"
        Android:textSize="24sp" />

テキストとアイコンで同じボタンを作成しようとしています。 Android:drawableLeftは私には機能しません(おそらく機能しますが、アイコンに最大の高さを設定する方法がわかりません)。

だから私はImageViewとTextViewでLinearLayoutを作成し、ボタンのように動作させました:

    <LinearLayout
        Android:id="@+id/bSearch2"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:background="@Android:drawable/btn_default"
        Android:clickable="true"
        Android:padding="16dp"
        Android:orientation="horizontal" >

        <ImageView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:layout_marginLeft="5dp"
            Android:adjustViewBounds="true"
            Android:maxHeight="30dp"
            Android:maxWidth="30dp"
            Android:scaleType="fitCenter"
            Android:src="@drawable/search_icon" />

        <TextView
            Android:id="@+id/tvSearchCaption"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:textSize="24sp"
            Android:paddingRight="30dp"
            Android:gravity="center"
            Android:text="Search" />
    </LinearLayout>

私の新しいボタンはまさに私が望むものです(フォントサイズ、アイコン、テキストの配置)。しかし、私のデフォルトのボタンのようには見えません:

enter image description here

だから、新しいボタンの背景とテキストの色を変更しようとしました:

Button Search = (Button) findViewById(R.id.bSearch);
LinearLayout bSearch2 = (LinearLayout) findViewById(R.id.bSearch2);
bSearch2.setBackground(bSearch.getBackground());
TextView tvSearchCaption = (TextView)findViewById(R.id.tvSearchCaption);
tvSearchCaption.setTextColor(bSearch.getTextColors().getDefaultColor());

これは奇妙な結果をもたらします、私の古いボタンは台無しになります:

enter image description here

XMLでこれらの2つのボタンの順序を変更すると、「新しいボタン」が最初になり、別の奇妙な結果になります。

enter image description here

今、古いボタンを押そうとすると、新しいボタンが押されることに気付きました。

何か案は?

70
Dusan

これを試してください。

<Button
    Android:id="@+id/bSearch"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:padding="16dp"
    Android:text="Search"
    Android:drawableLeft="@Android:drawable/ic_menu_search"
    Android:textSize="24sp"/>
231
Liem Vo

画像を左、右、上、または下に追加するには、次のような属性を使用できます。

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

サンプルコードは上記のとおりです。相対レイアウトを使用してこれを実現することもできます。

15
user3515854

これを動的に実行したい場合は、ボタンオブジェクトのsetCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)が役立ちます。

サンプル

Button search = (Button) findViewById(R.id.yoursearchbutton);
search.setCompoundDrawables('your_drawable',null,null,null);
9
Kennedy Nyaga

@Liem Voは正しいですが、Right/Leftの代わりにEnd/Startを使用すると、Androidスタジオが感謝します:)

<Button
Android:id="@+id/bSearch"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:padding="16dp"
Android:text="Search"
Android:drawableStart="@Android:drawable/ic_menu_search"
Android:textSize="24sp"/>
1
TheTeslaa