概述
今天在整理资料的时候发现有个问题,原来做的些软件中用到的按钮,要么是纯文字的,要么是纯图片的
突然看有款软件上的按钮文字可以同时显示,
而且我用hierarchyviewer查看了下
他确确实实是图片加文字的,所以问了下群友并且思考了下,总有以下解决方法
1.直接用图片和文字的截图放在Imagebutton上显示,这种事最简单但是也是最占资源,以后修改和国家化都是最不方便的方法
2.用button上设置图片的方法可以,这种简单,并且以后很容易修改
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.MotionEvent;
import android.view.View;
public class ImageTextButton extends View{
private final static int WIDTH_PADDING = 8;
private final static int HEIGHT_PADDING = 10;
private final static int SPACE = 10;
private final String label;
private final int imageResId;
private final Bitmap image;
private int fontWidth;
private int fontHeight;
public ImageTextButton(final Context c,int rid,String text){
super(c);
this.label = text;
this.imageResId = rid;
this.image = BitmapFactory.decodeResource(c.getResources(),imageResId);
setFocusable(true);
setClickable(true);
getFontWidthAndHeight();
}
private void getFontWidthAndHeight(){
Paint pFont = new Paint();
Rect rect = new Rect();
pFont.getTextBounds("信", 0, 1, rect);
this.fontHeight = rect.height();
this.fontWidth = rect.width();
}
private int getTextWidth(String text){
return text.length()*this.fontWidth;
}
@Override
protected void onFocusChanged(boolean gainFocus, int direction,
Rect previouslyFocusedRect) {
if (gainFocus == true){
this.setBackgroundColor(Color.rgb(255, 165, 0));
}
else{
this.setBackgroundColor(Color.alpha(0));
}
}
@Override
protected void onDraw(Canvas canvas) {
Paint textPaint = new Paint();
textPaint.setColor(Color.WHITE);
canvas.drawBitmap(image, WIDTH_PADDING / 2, HEIGHT_PADDING / 2, null);
canvas.drawText(label, (image.getWidth()-getTextWidth(label)/2)/ 2, (HEIGHT_PADDING / 2) +
image.getHeight() + 8+SPACE, textPaint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
switch(action){
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
this.setBackgroundColor(Color.rgb(255, 165, 0));
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
this.setBackgroundColor(Color.alpha(0));
break;
}
return super.onTouchEvent(event);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(measureWidth(widthMeasureSpec),measureHeight(heightMeasureSpec));
}
private int measureWidth(int measureSpec){
int preferred = image.getWidth() * 2;
return getMeasurement(measureSpec, preferred);
}
private int measureHeight(int measureSpec){
int preferred = image.getHeight()+this.fontHeight+SPACE*2;
return getMeasurement(measureSpec, preferred);
}
private int getMeasurement(int measureSpec, int preferred){
int specSize = MeasureSpec.getSize(measureSpec);
int measurement = 0;
switch(MeasureSpec.getMode(measureSpec)){
case MeasureSpec.EXACTLY:
measurement = specSize;
break;
case MeasureSpec.AT_MOST:
measurement = Math.min(preferred, specSize);
break;
default:
measurement = preferred;
break;
}
return measurement;
}
public String getLabel(){
return label;
}
public int getImageResId(){
return imageResId;
}
}
最后
以上就是跳跃凉面为你收集整理的Android图片文字按钮的全部内容,希望文章能够帮你解决Android图片文字按钮所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复