ボタンの上に(背景として)画像を配置し、実行時に何が起こっているかに応じて、画像の上または上にテキストを動的に追加しようとしています。
もし私がImageButton
を使うなら、私はテキストを追加する可能性さえありません。 Button
を使用する場合、テキストを追加できますが、Android:drawableBottom
および定義された 類似 類似のXML属性を使用してイメージを定義することのみ可能です。
しかし、これらの属性はテキストと画像をx次元とy次元で組み合わせるだけです。つまり、私のテキストの周囲に画像を描くことはできますが、自分のテキストの下/下には描くことができません。
これを行う方法について何か提案はありますか?考えの1つは、Button
またはImageButton
を拡張してdraw()
-メソッドをオーバーライドすることです。しかし、私の現在の知識レベルでは、私はこれを行う方法を本当に知りません(2Dレンダリング)。もっと経験を積んだ人が解決策を知っているか、少なくとも始めるべきいくつかのポインタを知っているでしょうか。
Button
に対してsetBackground()
を呼び出してボタンの背景を設定できます。
テキストは背景の上に表示されます。
Xmlで似たようなものを探しているのであれば、Android:background
属性も同じです。
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
この問題にはもっと良い解決策があります。
通常のButton
を取り、drawableLeft
とgravity
属性を使うだけです。
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:drawableLeft="@drawable/my_btn_icon"
Android:gravity="left|center_vertical" />
これにより、ボタンの左側にアイコンが表示され、アイコンの右側にテキストが表示されるボタンが表示されます。 垂直方向の中央揃え 。
<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" />
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>
交換するだけ
Android:background="@drawable/icon"
と
Android:background="@Android:color/transparent"
Android:drawableTop="@drawable/[your background image here]"
かなり良いトリックをizz ..;)
私はここで述べたものとは異なるアプローチを取ったが、それは本当にうまくいっているので、それを共有したいと思った。
私はスタイルを使用して、左に画像、右中央にテキストのカスタムボタンを作成しています。以下の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ガイドラインを尊重して、アイコンが異なる複数のボタンに同じ背景を描画可能にすることができます。
また、アプリのテーマを作成して「親スタイル」を追加して、すべてのボタンが同じに見えるようにし、必要な場所にのみアイコン付きの「子スタイル」を適用することもできます。
<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
など)を使用し、gravity
left|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" />
おそらく私のソリューションは多くのユーザーに適しているでしょう。
私が提案しているのは、あなたのスタイルで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" />
そしてこれは結果です。次に、カスタムボタンを色やその他のプロパティや余白でスタイル設定します。がんばろう
通常の
Android:drawableLeft
などをベクターのドロアブルで使用しないでください。そうしないと、crash in lower API versionsになります。 (ライブアプリで直面しました)
ベクトルドロウアブルを使用している場合は、
バージョン 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:drawableLeftCompat
、app:drawableTopCompat
、app:drawableRightCompat
、app:drawableBottomCompat
、app:drawableStartCompat
、app:drawableEndCompat
を使用しますあなたがベクトルドローアブルを必要としないなら、あなたはできます
Android:drawableLeft
、Android:drawableRight
、Android:drawableBottom
、Android:drawableTop
を使用しますTextView
、Button
&EditText
、またはAppCompat
クラスのいずれかを使用できます。以下を達成できますOutput
<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/ /
このコードは私にとっては完璧に動作します
<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>
これを使うことができます:
<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
として画像を入れ、テキストを追加しました。