android java button 不显示图片_Java Android Button图片与文字混合置中

本文介绍了三种方法实现Android Button上图片与文字混合并居中:1) 利用布局配置;2) 使用SpannableString和ImageSpan;3) 程序动态设置。每种方法都有其优缺点,如布局复杂度、图片尺寸限制等。
摘要由CSDN通过智能技术生成

整理出三种方法

1.利用版面去配置,按钮在背后,前面在盖图片跟文字然后置中

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

android:background="@drawable/footer_btn4" >

android:id="@+id/btnReset"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@drawable/selector_menu_footer_btn"

android:onClick="btnConfirmSearch"

android:textColor="@color/white"

android:textSize="@dimen/tenant_search_condition_condition_btn_txt" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:layout_centerVertical="true"

android:gravity="center" >

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@drawable/footer_btn3" >

android:id="@+id/textView2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:clickable="false"

android:text="@string/tenant_search_condition_loc_btn_reset"

android:textColor="@color/white"

android:textSize="@dimen/tenant_search_condition_condition_btn_txt" />

结果是

85bdac3ebefd9dd0c023ba723b5757c5.png

优点是灵活性高,缺点就是layout档会比较复杂

2.透过SpannableString,ImageSpan塞图片到文字中

SpannableString spanText = new SpannableString("1重置");

Drawable d = getResources().getDrawable(R.drawable.footer_btn3);

int a = (int)btnConfirmSearch.getTextSize();

d.setBounds(0, 0, a, a);//设定图片为文字的大小

//d.setBounds(0,0,d.getIntrinsicWidth(),d.getIntrinsicHeight());//原始大小

ImageSpan imageSpan = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);

spanText.setSpan( imageSpan,0 , 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

btnConfirmSearch.setText(spanText);

这样会有个问题,假设图片高度比文字高度高,文字会往下跑,以下为两种对齐方式

ImageSpan.ALIGN_BASELINE跟ImageSpan.ALIGN_BOTTOM的结果

6a66f8ce55bca56d3dbdfcd52dbd190f.png

设定成文字高度的结果

ec2bd12403a1111909802c0994c05cb6.png

优点layout文件干净,缺点图片不能大于文字高度

3.程序动态设置

设置paddingLeft把图片推到右边,此时文字也会一起被推到右边

再设置drawablePadding负的把文字拉回左边

给定context,按钮,图片id,图片与文字间距

code:

public static void set_button_Drawable_center(final Context context,final Button button,final int imageID,final int spacing)

{

handler=new Handler();

runnable=new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

if(button.getMeasuredWidth() == 0)

{

handler.postDelayed(runnable, 0);

}else{

Drawable drawable=context.getResources().getDrawable(imageID);

int width=button.getMeasuredWidth();

int height=button.getMeasuredHeight();

int txt_width=(int)(button.getTextSize()*button.getText().length());

int txt_height=(int)(button.getLineCount()*button.getLineHeight());

int img_width=drawable.getIntrinsicWidth();

int img_height=drawable.getIntrinsicHeight();

int content_height=txt_height+img_height+spacing;

int content_width=txt_width+img_width+spacing;

int padding_w=width/2-content_width/2;

int padding_h=height/2-content_height/2;

button.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);

button.setPadding(padding_w,0,0,0);

button.setCompoundDrawablePadding(-padding_w);

}

}

};

handler.postDelayed(runnable, 0);

}

结果

7454d7eb27cc27bfbfd9af3b6c70092f.png

优点layout文件干净,缺点程序较复杂,不过是一劳永逸,灵活性高

这是我想到的三种方法,若还有其它的方法,麻烦给我个建议,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值