私のアプリには次のようなボタンがあります:
<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>
私の新しいボタンはまさに私が望むものです(フォントサイズ、アイコン、テキストの配置)。しかし、私のデフォルトのボタンのようには見えません:
だから、新しいボタンの背景とテキストの色を変更しようとしました:
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());
これは奇妙な結果をもたらします、私の古いボタンは台無しになります:
XMLでこれらの2つのボタンの順序を変更すると、「新しいボタン」が最初になり、別の奇妙な結果になります。
今、古いボタンを押そうとすると、新しいボタンが押されることに気付きました。
何か案は?
これを試してください。
<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"/>
画像を左、右、上、または下に追加するには、次のような属性を使用できます。
Android:drawableLeft
Android:drawableRight
Android:drawableTop
Android:drawableBottom
サンプルコードは上記のとおりです。相対レイアウトを使用してこれを実現することもできます。
これを動的に実行したい場合は、ボタンオブジェクトのsetCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)
が役立ちます。
サンプル
Button search = (Button) findViewById(R.id.yoursearchbutton);
search.setCompoundDrawables('your_drawable',null,null,null);
@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"/>