2013-03-13 72 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); 
    } 
}