Android 含有图片和文字的Button的实现
来源:互联网 发布:哈工大人工智能 编辑:程序博客网 时间:2024/05/16 16:16
要实现一个同时包含图片和文字的按钮,粗糙一点的做法当然是直接画个含有画像和文字的png做button的背景,但是考虑到文字部分的国际化以及灵活性的话,就必须把图片和文字独立开来了。原生的Button控件是做不到的,方法应该有很多,这里介绍我做法,说白了就是一个父View包裹两个子View,父View选用LinearLayout,子View分别是ImageView和TextView。下面看下主要的实现类:
这个类在构造时会生成一个默认的按钮,图片在上,文字在下,还有一些字体等的默认设置,为了尽量做到共通化,又提供了尽可能多的接口以满足不同的式样需求。具体怎么用呢?
1.布局文件中加一个容器,供我们放置自己的ImageButton对象:
2.在Activity中获取到容器,并将我们的ImageButton放进去:
这样就OK了,至于button的背景啊,点击时的效果,和这篇文章关系不大,不过还是把我自己的xml贴上来吧。
my_img_btn_default.xml
如果想要圆角button,在<shape>标签下增加子标签<corners android:radius="5dp" />就可以了,该文件放在drawable下就可使用
package net.jackie.xxx.view;import net.jackie.xxx.pickmeupandroid.R;import android.content.Context;import android.view.Gravity;import android.widget.ImageView;import android.widget.ImageView.ScaleType;import android.widget.LinearLayout;import android.widget.TextView;/** * @author jackie * */public class MyImageButton extends LinearLayout {private ImageView mButtonImage = null; private TextView mButtonText = null;private int textSize = 18;/** * * @param context * @param intArray intArray[0] : ImageResourceId; * intArray[1] : textResourceId; intArray[2] : textSize. Other intArray is useless */public MyImageButton(Context context, int... intArray) { super(context); // Init instance mButtonImage = new ImageView(context); mButtonText = new TextView(context); int len = intArray.length; if (len >= 1) { // Set Image Resource setImageResource(intArray[0]); } if (len >= 2) { // Set Text setText(intArray[1]); } if (len >= 3) { // Change text size textSize = intArray[2]; } /** Set Child View(ImageView/TextView) properties */ // Set Text Size : default 18 setTextSize(textSize); // Set ImageView ScaleType : default CENTER_INSIDE(located center, without resize) setImgScaleType(ScaleType.CENTER_INSIDE); LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, 0, 0.5f); // Set ImageView LayoutParams : default half setImgLayoutParams(layoutParams); // Set TextView LayoutParams : default half setTextLayoutParams(layoutParams); // Set Text Gravity : default center setTextGravity(Gravity.CENTER); // Set Text Color : default white setTextColor(0xFFFFFFFF); /** Set Father View(LinearLayout) properties */ setClickable(true); setFocusable(true);LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT, 1);//params.gravity = Gravity.CENTER;// Set Father View Orientation : default fulfill setFatherViewLayoutParams(params); // Set Father View Orientation : default my_img_btn_default setFatherViewBgResource(R.drawable.my_img_btn_default); // Set Father View Orientation : default VERTICAL setFatherViewOrientation(LinearLayout.VERTICAL); addView(mButtonImage); addView(mButtonText); } /* * setImageResource */ public void setImageResource(int resId) { mButtonImage.setImageResource(resId); } /* * setText */ public void setText(int resId) { mButtonText.setText(resId); } public void setText(CharSequence buttonText) { mButtonText.setText(buttonText); } /* * setTextColor */ public void setTextColor(int color) { mButtonText.setTextColor(color); } /* * setTextSize */ public void setTextSize(int textSize) { mButtonText.setTextSize(textSize); }/** * @param layoutParams the layoutParams to set */public void setImgLayoutParams(LayoutParams layoutParams) {mButtonImage.setLayoutParams(layoutParams);} /** * Controls how the image should be resized or moved to match the size of this ImageView * * @param layoutParams the layoutParams to set */public void setImgScaleType(ScaleType scaleType) {mButtonImage.setScaleType(scaleType);}/** * @param layoutParams the layoutParams to set */public void setTextLayoutParams(LayoutParams layoutParams) {mButtonText.setLayoutParams(layoutParams);}/** * @param gravity the gravity to set */public void setTextGravity(int gravity) {mButtonText.setGravity(gravity);}/** * Set Father View LayoutParams. Notice that this method should not be used generally. * * @param params */public void setFatherViewLayoutParams(LayoutParams params) {super.setLayoutParams(params);}public void setFatherViewBgResource(int resId) {super.setBackgroundResource(resId);}/** * Set orientation of this Linearlayout. Notice that since the default orientation is vertical, * when you use this method to modify the orientation to horizontal , make sure that you * also use {@link #setImgLayoutParams(LayoutParams layoutParams)} and * {@link #setTextLayoutParams(LayoutParams layoutParams)} together, otherwise, * the button can not be displayed normally * * @param orientation */public void setFatherViewOrientation(int orientation) {super.setOrientation(orientation);}}
这个类在构造时会生成一个默认的按钮,图片在上,文字在下,还有一些字体等的默认设置,为了尽量做到共通化,又提供了尽可能多的接口以满足不同的式样需求。具体怎么用呢?
1.布局文件中加一个容器,供我们放置自己的ImageButton对象:
<LinearLayout android:id="@+id/pickUpBtnContainer" android:orientation="horizontal" android:layout_width="0dip" android:layout_height="match_parent" android:layout_weight="0.5" android:gravity="center" />
2.在Activity中获取到容器,并将我们的ImageButton放进去:
private void initImageButtons() {// Get button containerpickUpBtnContainer = (LinearLayout) findViewById(R.id.pickUpBtnContainer);// Get button instancepickUpBtn = new MyImageButton(this, R.drawable.test_img, R.string.pickupCtn, 18);// Put button instance into button containerpickUpBtnContainer.addView(pickUpBtn);// Set button OnClickListenerpickUpBtn.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) {// TODO 这里做什么不用说了//}});}
这样就OK了,至于button的背景啊,点击时的效果,和这篇文章关系不大,不过还是把我自己的xml贴上来吧。
my_img_btn_default.xml
<?xml version="1.0" encoding="UTF-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape> <gradient android:startColor="@color/my_btn_clicked" android:endColor="@color/my_btn_clicked" android:angle="270" /> <stroke android:width="1dp" android:color="@color/my_btn_clicked" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> <item android:state_focused="true"> <shape> <gradient android:startColor="@color/my_btn_clicked" android:endColor="@color/my_btn_clicked" android:angle="270" /> <stroke android:width="1dp" android:color="@color/my_btn_clicked" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> <item> <shape> <gradient android:startColor="@color/glb_bg" android:endColor="@color/glb_bg" android:angle="270" /> <stroke android:width="1dp" android:color="@color/glb_bg" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item></selector>
如果想要圆角button,在<shape>标签下增加子标签<corners android:radius="5dp" />就可以了,该文件放在drawable下就可使用
0 0
- Android 含有图片和文字的Button的实现
- Android实现自定义带文字和图片的Button
- Android实现自定义带文字和图片的Button
- Android实现自定义带文字和图片的Button
- Android实现自定义带文字和图片的Button
- Androidの实现自定义带文字和图片的Button
- Android实现自定义带文字和图片的Button
- Android实现自定义带文字和图片的Button
- Android实现自定义带文字和图片的Button
- Android实现自定义带文字和图片的Button
- Android实现自定义带文字和图片的Button
- Android实现自定义带文字和图片的Button
- Android实现自定义带文字和图片的Button
- iOS 带文字和图片的button
- iOS 带文字和图片的button
- 实现Button文字(titleLabel)和图片…
- 利用panel进行并列多行的架构与利用button实现图片和文字共存
- Android应用:Button添加图片和文字
- unit13 practice
- LinearLayout半透明效果
- (转)什么时候要抛出异常?
- CabArc to create or extract a cab file
- WSDL URI 代码解析
- Android 含有图片和文字的Button的实现
- 客户端(浏览器端)数据存储技术概览
- Xmlns与targetNamespace 的区别
- JAVA移位运算符
- 单向链表
- XML解析工具类
- 题目1040:Prime Number
- 【Linux】Nginx负载均衡配置
- 双向链表