為EditText設(shè)置左/右側(cè)固定文字

有這么一個需求: 在Android常用的EditText中万皿,設(shè)置固定的左側(cè)文字演熟,不影響接著的輸入(如下圖所示,其中輸入金額的部分,只能輸入數(shù)字或者小數(shù)點聊品,而左側(cè)的人民幣符號是固定的)?

需求圖

或許有人可能會通過檢測輸入來做判斷欺缘,也有的會通過一個相對布局+一個放左邊的textview+一個放右邊的edittext來實現(xiàn)效果袜硫,但是這樣也是相當(dāng)?shù)穆闊┑模y道不是么晌端?
而其實只要了解簡單的自定義View繪制捅暴,ding'yi就能很快解決需求的了。

  1. 測出需要固定文字的長度
  2. 設(shè)置EditText的padding咧纠,讓其留出位置繪制需要固定的文字
  3. 通過onDraw(Canvas canvas)方法蓬痒,繪制文字,這里需要注意到的是漆羔,通過 canvas.drawText(text,x,y,paint)方法繪制文字的時候梧奢,y應(yīng)該是getBaseline()狱掂,而不是文字的左側(cè)頂點,這也是剛接觸這個容易弄混的點亲轨。

下面直接放出設(shè)置左側(cè)固定文字的代碼:

/**
 * 左邊有固定文字EditText
 */
public class FixedEditText extends EditText {
    private String fixedText;
    private View.OnClickListener mListener;
    private int leftPadding;

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

    public void setFixedText(String text) {
        fixedText = text;
        leftPadding = getPaddingLeft();
        int left = (int) getPaint().measureText(fixedText) + leftPadding;
        setPadding(left, getPaddingTop(), getPaddingBottom(), getPaddingRight());
        invalidate();
    }

    public void setDrawableClick(View.OnClickListener listener) {
        mListener = listener;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (!TextUtils.isEmpty(fixedText)) {
            canvas.drawText(fixedText, leftPadding, getBaseline(), getPaint());
//            通過下面的代碼趋惨,可以查看出文字的基線,以及view的中線
//            Paint p = new Paint();
//            p.setStrokeWidth(1);
//            p.setColor(Color.parseColor("#ff0000"));
//            canvas.drawLine(0, getBaseline(), getMeasuredWidth(), getBaseline(), p);
//            canvas.drawLine(0, getMeasuredHeight() / 2, getMeasuredWidth(), getMeasuredHeight() / 2, p);
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (mListener != null && getCompoundDrawables()[2] != null) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    int i = getMeasuredWidth() - getCompoundDrawables()[2].getIntrinsicWidth();
                    if (event.getX() > i) {
                        mListener.onClick(this);
                        return true;
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    break;
                default:
                    break;
            }
        }
        return super.onTouchEvent(event);
    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惦蚊,一起剝皮案震驚了整個濱河市器虾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹦锋,老刑警劉巖兆沙,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異莉掂,居然都是意外死亡葛圃,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門憎妙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來装悲,“玉大人,你說我怎么就攤上這事尚氛【髡铮” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵阅嘶,是天一觀的道長属瓣。 經(jīng)常有香客問我,道長讯柔,這世上最難降的妖魔是什么抡蛙? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮魂迄,結(jié)果婚禮上粗截,老公的妹妹穿的比我還像新娘。我一直安慰自己捣炬,他們只是感情好熊昌,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著湿酸,像睡著了一般婿屹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上推溃,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天昂利,我揣著相機與錄音,去河邊找鬼。 笑死蜂奸,一個胖子當(dāng)著我的面吹牛犁苏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扩所,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼围详,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了碌奉?” 一聲冷哼從身側(cè)響起短曾,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤寒砖,失蹤者是張志新(化名)和其女友劉穎赐劣,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哩都,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡魁兼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了漠嵌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咐汞。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖儒鹿,靈堂內(nèi)的尸體忽然破棺而出化撕,到底是詐尸還是另有隱情,我是刑警寧澤约炎,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布植阴,位于F島的核電站,受9級特大地震影響圾浅,放射性物質(zhì)發(fā)生泄漏掠手。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一狸捕、第九天 我趴在偏房一處隱蔽的房頂上張望喷鸽。 院中可真熱鬧,春花似錦灸拍、人聲如沸做祝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剖淀。三九已至,卻和暖如春纤房,著一層夾襖步出監(jiān)牢的瞬間纵隔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捌刮,地道東北人碰煌。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像绅作,于是被迫代替她去往敵國和親芦圾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,099評論 25 707
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程俄认,因...
    小菜c閱讀 6,404評論 0 17
  • 一个少、概述 1. 四線格與基線 小時候,我們在剛開始學(xué)習(xí)寫字母時眯杏,用的本子是四線格的夜焦,我們必須把字母按照規(guī)則寫在四線...
    addapp閱讀 7,655評論 2 17
  • 前言 一個有經(jīng)驗的開發(fā),碰到一些特殊的UI控件岂贩,腦海中應(yīng)該是有好幾種實現(xiàn)方案的茫经,同時也能記起一些第三方相似的開源控...
    Brant白叔閱讀 2,326評論 0 4
  • 什么是集合? (set)集合中的對象不按特定的方式排序萎津,并且沒有重復(fù)對象卸伞。 什么是列表? (list)集合中的對象...
    十方天儀君閱讀 266評論 0 0