2013-03-13 76 views
2

在我的android应用程序中,我试图用两行文本创建一个按钮。其中一个会显示单击按钮时所做的操作,另一个会在长按时显示效果,并且可以长按按钮。就像在android系统的标准键盘上一样(参见picture)。Android:按钮上的长按文本

我已经试过:

Bitmap canvasBitmap = Bitmap.createBitmap(64, 24, Bitmap.Config.ARGB_8888); 
Canvas imageCanvas = new Canvas(canvasBitmap); 
Paint imagePaint = new Paint(); 
imagePaint.setTextAlign(Align.CENTER); 
imagePaint.setTextSize(14f); 
imageCanvas.drawText(String, pxwidth/2, pxheight, imagePaint); 
image = new BitmapDrawable(canvasBitmap); 
((TextView) findViewById(R.id.button)).setCompoundDrawables(null,image,null,null); 

但它不是我的currend API版本(API 9 /姜饼/ Android 2.3的)支载
你能帮我吗?

回答

1

如果您需要定位9,那么您不能使用该功能,而需要使用其他技术。我能想到的一种方法是使用ImageButton而不是按钮,预渲染整个按钮的图像,并将其应用于xml中的新ImageButton。

+0

是的,这可能是一个解决方案,但因为我有利用这个在很多按钮,这将涉及很多预先重新渲染,而且没有很高的内存效率。 – Papagaai35 2013-03-13 21:11:51

+0

然后,另一个建议是自定义视图。子类按钮并覆盖onDraw和onMeasure,添加额外的空间来绘制图像,然后在onDraw中绘制它 – 2013-03-13 21:13:10

+0

您能举一个这样的例子吗? – Papagaai35 2013-03-13 21:17:59

0

我用这个Custom View作为溶液(感谢加布Sechan的想法):

import android.content.Context; 
import android.content.res.TypedArray; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Paint.Align; 
import android.util.AttributeSet; 
import android.widget.Button; 

class LongClickButton extends Button { 
    private String mLongClickString; 
    private String mOnLongClick; 
    private Paint mTextPaint; 
    public LongClickButton(Context context, AttributeSet attrs){ 
     super(context, attrs); 

     mTextPaint = new Paint(); 
     mTextPaint.setTextSize(this.getTextSize()/2); 
     mTextPaint.setColor(Color.DKGRAY); 
     mTextPaint.setShadowLayer(0, 1, 1, Color.GRAY); 
     mTextPaint.setTextAlign(Align.RIGHT); 

     TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.LongClickButton, 0, 0); 
     try{ 
      mLongClickString = a.getString(R.styleable.LongClickButton_longClickText); 
      mOnLongClick = a.getString(R.styleable.LongClickButton_onLongClick); 
     } finally { 
      a.recycle(); 
     } 
    } 
    public String getLongClickString(){ 
     return mLongClickString; 
    } 
    public String getOnLongClick(){ 
     return mOnLongClick; 
    } 
    public void setLongClickString(String LongClickString){ 
     mLongClickString = LongClickString; 
     invalidate(); 
     requestLayout(); 
    } 
    public void setOnLongClick(String OnLongClick){ 
     mOnLongClick = OnLongClick; 
     invalidate(); 
     requestLayout(); 
    } 
    @Override 
    public void onDraw(Canvas canvas){ 
     super.onDraw(canvas); 
     canvas.drawText(mLongClickString, this.getWidth()-(this.getPaddingRight()/4*3), (this.getPaddingTop()/2)+mTextPaint.getTextSize(), mTextPaint); 
    } 
}