Android:在Button或ImageButton上结合文本和图像

我试图在一个button上添加一个图像(作为背景),并根据运行时发生的情况dynamic添加图像上方/上方的某些文本。

如果我使用ImageButton我甚至没有可能添加文本。 如果我使用Button我可以添加文本,但只能定义一个图像与android:drawableBottom和类似的XML属性定义在这里 。

但是,这些属性只能在x和y维度上结合文本和图像,这意味着我可以在我的文本周围绘制图像,但不能在文本下面/绘图(将z轴定义为显示出来)。

任何build议如何做到这一点? 一个想法是扩展ButtonImageButton并重写draw()方法。 但是就目前的知识水平而言,我并不知道如何去做(2D渲染)。 也许有更多经验的人知道一个解决scheme或至less有一些指针开始?

您可以调用Button上的setBackgroundDrawable()来设置Button的背景。

任何文字都会显示在背景上方。

如果你正在寻找类似的XML: android:background属性,它的工作原理是一样的。

对于只想将背景,图标图像和文本放在一个 Button ,可以使用不同的文件:设置Button背景,可绘制上/下/左/右和填充属性。

 <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

这个问题有更好的解决scheme。

只要采取一个正常的Button并使用drawableLeftgravity属性。

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

这样你就可以得到一个button,在button的左侧显示一个图标,在图标的右侧显示垂直居中的文本。

在这里输入图像描述

  <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可点击是关键:

 <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一个相当不错的把戏..;)

我采取了与此处所述的方法不同的方法,而且工作得很好,所以我想分享一下。

我正在使用一个样式来创build一个自定义button,左边是图片,右边是文字。 只需按照以下4个“简单步骤”:

I.使用至less3个不同的PNG文件和您的工具创build9个修补程序:/YOUR_OWN_PATH/android-sdk-mac_x86/tools/./draw9patch。 在此之后,你应该有:

button_normal.9.png,button_focused.9.png和button_pressed.9.png

然后下载或创build一个24×24的PNG图标。

ic_your_icon.png

全部保存在Android项目的drawable /文件夹中。

II。 在drawable /文件夹下创build一个名为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 /文件夹并打开或创buildstyles.xml文件并创build以下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。 转到你有你的XML的布局/文件夹用户界面,并转到您想要应用样式的button,使其看起来像这样:

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

而…瞧! 你在左边拿到了一个图片。

对我来说,这是更好的方法! 因为这样做,您可以根据要显示的图标单独pipe理button的文本大小,并根据Android UI准则使用样式为具有不同图标的多个button使用相同的背景可绘制。

您也可以为您的应用程序创build一个主题,并为其添加“父风格”,以便所有button看起来相同,并将“子风格”与图标一起应用到您需要的地方。

  <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" /> 
 <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> 

也许我的解决scheme适合很多用户,我希望如此。

我所说的是用你的风格制作TextView。 它完美的为我工作,并具有所有function,如button。

首先让我们做button样式,你可以在任何地方使用…我正在创buildbutton_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> 

其次,让我们创build一个文本视图button。

  <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" /> 

这是一个结果。 然后使用任何颜色或任何其他属性和边距设置您的自定义button。 祝你好运

在这里输入图像描述

你可以使用这个:

  <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 ,也添加了文字..!