Anroid 豎屏模式下橫向顯示Toast

我們在開發應用過程中,可能會遇到這樣的需求,在豎屏Activity中橫向顯示一個Toast提示,當然每個人思考的方式不一樣,實現的方法也會有很多種了,這樣提供這樣一種思路供大家參考。

  • 效果圖
    效果圖
    gif動畫不是很清晰,這不重要~~~~~

  • 實現思路,在Toast中有setView這個方法,我們可以設置一個豎向顯示文字橫向顯示的View,然後再設置Toast的位置不就可以。

//自定義一個View,通過旋轉畫布來繪製View上顯示的文字

public class TextView1 extends View {

    private Paint paint;

    private String text = "";

    public TextView1(Context context) {
        super(context);
        init();
    }

    public TextView1(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public TextView1(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        paint = new Paint();
        paint.setTextSize(dp2px(15));
        paint.setColor(Color.WHITE);
    }

    public void setText(String text) {
        this.text = text;
    }

    private int dp2px(int dp) {
        float density = getContext().getResources().getDisplayMetrics().density;
        return (int) (dp * density + 0.5f);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.translate(dp2px(2), dp2px(1));
        canvas.rotate(90);//旋轉90度
        canvas.drawText(text, 0, 0, paint);
        canvas.save();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        setMeasuredDimension((int) paint.measureText("我") + dp2px(2),
                (int) paint.measureText(text) + dp2px(2));
    }
}

然後調用Toast的setView方法

 Toast toast = new Toast(context);
 TextView1 textView = new TextView1(context);
 textView.setBackgroundColor(Color.BLACK);
 textView.setText("測試測試測試");
 toast.setView(textView);
 toast.setMargin(-1f, 0);
 toast.setGravity(Gravity.CENTER_VERTICAL,700,0);
 toast.show();
  • kotlin版
class TextView1 : View {

    private var paint: Paint? = null
    var text = ""
        set(value) {
            field = value
        }

    init {
        paint = Paint()
        paint!!.textSize = dp2px(15)
        paint!!.color = Color.WHITE
    }

    companion object {
        fun dp2px(dp: Int): Float {
            val density = Resources.getSystem().displayMetrics.density
            return dp * density + 0.5f
        }
    }

    constructor(context: Context?) : super(context)
    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

    override fun onDraw(canvas: Canvas) {
        canvas.translate(dp2px(2), dp2px(1))
        canvas.rotate(90f)
        canvas.drawText(text, 0f, 0f, paint)
        canvas.save()
    }

    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        setMeasuredDimension(
            (paint!!.measureText("我") + dp2px(2)).toInt(),
            (paint!!.measureText(text) + dp2px(2)).toInt()
        )
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章