Android 禁止Edittext彈出系統(tǒng)軟鍵盤 的幾種方法

第一種方法:在XML文件下添加:

android:focusable="true"   
android:focusableInTouchMode="true"

第二種方法:直接關(guān)閉輸入法

在onCreate中加上:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

第三中方法:在Edittext中設(shè)置

.setInputType(InputType.TYPE_NULL);

但是會實(shí)現(xiàn)效果梁沧,但是會導(dǎo)致光標(biāo)也無法顯示闪幽,如果想顯示光標(biāo)应闯,你就需要定義一個(gè)方法茸习,在方法內(nèi)setInputType(禁止)

public void disableShowInput() {
        if (android.os.Build.VERSION.SDK_INT <= 10) {
            editText.setInputType(InputType.TYPE_NULL);
        } else {
            Class<EditText> cls = EditText.class;
            Method method;
            try {
                method = cls.getMethod("setShowSoftInputOnFocus", boolean.class);
                method.setAccessible(true);
                method.invoke(editText, false)
            } catch (Exception e) {//TODO: handle exception
            }
            try {
                method = cls.getMethod("setSoftInputShownOnFocus", boolean.class);
                method.setAccessible(true);
                method.invoke(editText, false);
            } catch (Exception e) {//TODO: handle exception
            }
        }
    }

這時(shí) 你會發(fā)現(xiàn)柔逼,光標(biāo)是出來了 但是輸入文字,光標(biāo)永遠(yuǎn)在前面享钞,怎么辦揍诽,解決思路,監(jiān)聽文字文本內(nèi)容變化監(jiān)聽方法嫩与,在afterTextChanged文字輸入完后,把光標(biāo)移到最后.setSelection(Edittext,Edittext.length());看代碼:

    Edittext.addTextChangedListener(watcher);
    private TextWatcher watcher = new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                                  int count) {
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                                      int after) {
        }

        @Override
        public void afterTextChanged(Editable s) {
            Edittext.setSelection(Edittext, Edittext.length());
        }
    };

附加:重寫Edittext 在輸入框內(nèi)增加刪除文字按鈕,就是在Android系統(tǒng)的輸入框右邊加入一個(gè)小圖標(biāo)交排,點(diǎn)擊小圖標(biāo)可以清除輸入框里面的內(nèi)容具體看代碼:

import android.content.Context;  
import android.graphics.drawable.Drawable;  
import android.text.Editable;  
import android.text.TextWatcher;  
import android.util.AttributeSet;  
import android.view.MotionEvent;  
import android.view.View;  
import android.view.View.OnFocusChangeListener;  
import android.view.animation.Animation;  
import android.view.animation.CycleInterpolator;  
import android.view.animation.TranslateAnimation;  
import android.widget.EditText;  
  
public class RMEditText extends EditText implements    
        OnFocusChangeListener, TextWatcher {   
    /** 
     * 刪除按鈕的引用 
     */  
    private Drawable mClearDrawable;   
    /** 
     * 控件是否有焦點(diǎn) 
     */  
    private boolean falg;  
   
    public ClearEditText(Context context) {   
        this(context, null);   
    }   
   
    public ClearEditText(Context context, AttributeSet attrs) {   
        //這里構(gòu)造方法也很重要划滋,不加這個(gè)很多屬性不能再XML里面定義  
        this(context, attrs, android.R.attr.editTextStyle);   
    }   
      
    public ClearEditText(Context context, AttributeSet attrs, int defStyle) {  
        super(context, attrs, defStyle);  
        init();  
    }  
    private void init() {   
        //獲取EditText的DrawableRight,假如沒有設(shè)置我們就使用默認(rèn)的圖片  
        mClearDrawable = getCompoundDrawables()[2];   
        if (mClearDrawable == null) {   
//          throw new NullPointerException("You can add drawableRight attribute in XML");  
            mClearDrawable = getResources().getDrawable(R.drawable.delete_selector);   
        }     
        mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight());   
        //默認(rèn)設(shè)置隱藏圖標(biāo)  
        setClearIconVisible(false);   
        //設(shè)置焦點(diǎn)改變的監(jiān)聽  
        setOnFocusChangeListener(this);   
        //設(shè)置輸入框里面內(nèi)容發(fā)生改變的監(jiān)聽  
        addTextChangedListener(this);   
    }   
    /** 
     * 因?yàn)槲覀儾荒苤苯咏oEditText設(shè)置點(diǎn)擊事件,所以我們用記住我們按下的位置來模擬點(diǎn)擊事件 
     * 當(dāng)我們按下的位置 在  EditText的寬度 - 圖標(biāo)到控件右邊的間距 - 圖標(biāo)的寬度  和 
     * EditText的寬度 - 圖標(biāo)到控件右邊的間距之間我們就算點(diǎn)擊了圖標(biāo)埃篓,豎直方向就沒有考慮 
     */  
    @Override   
    public boolean onTouchEvent(MotionEvent event) {  
        if (event.getAction() == MotionEvent.ACTION_UP) {  
            if (getCompoundDrawables()[2] != null) {  
  
                boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight())  
                        && (event.getX() < ((getWidth() - getPaddingRight())));  
                  
                if (touchable) {  
                    this.setText("");  
                }  
            }  
        }  
        return super.onTouchEvent(event);  
    }  
    /** 
     * 當(dāng)ClearEditText焦點(diǎn)發(fā)生變化的時(shí)候处坪,判斷里面字符串長度設(shè)置清除圖標(biāo)的顯示與隱藏 
     */  
    @Override   
    public void onFocusChange(View v, boolean hasFocus) {   
        this.falg = hasFocus;  
        if (hasFocus) {   
            setClearIconVisible(getText().length() > 0);   
        } else {   
            setClearIconVisible(false);   
        }   
    }   
    /** 
     * 設(shè)置清除圖標(biāo)的顯示與隱藏,調(diào)用setCompoundDrawables為EditText繪制上去 
     * @param visible 
     */  
    protected void setClearIconVisible(boolean visible) {   
        Drawable right = visible ? mClearDrawable : null;   
        setCompoundDrawables(getCompoundDrawables()[0],   
                getCompoundDrawables()[1], right, getCompoundDrawables()[3]);   
    }   
    /** 
     * 當(dāng)輸入框里面內(nèi)容發(fā)生變化的時(shí)候回調(diào)的方法 
     */  
    @Override   
    public void onTextChanged(CharSequence s, int start, int count,   
            int after) {   
                if(falg){  
                    setClearIconVisible(s.length() > 0);  
                }  
    }   
    @Override   
    public void beforeTextChanged(CharSequence s, int start, int count,   
            int after) {      
    }   
    @Override   
    public void afterTextChanged(Editable s) {      
    }     
}  

在xml文件中這樣用

<com.example.edittext.RMEditText  
        android:hint="輸入文字"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  >  
</> 
  • setClearIconVisible()設(shè)置隱藏和顯示清除圖標(biāo)的方法架专,調(diào)用setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)來設(shè)置上下左右的圖標(biāo)

  • setOnFocusChangeListener(this) 為輸入框設(shè)置焦點(diǎn)改變監(jiān)聽同窘,如果輸入框有焦點(diǎn),我們判斷輸入框的值是否為空部脚,為空就隱藏清除圖標(biāo)想邦,否則就顯示它

  • addTextChangedListener(this) 為輸入框設(shè)置內(nèi)容改變監(jiān)聽,其實(shí)很簡單呢委刘,當(dāng)輸入框里面的內(nèi)容發(fā)生改變的時(shí)候丧没,我們需要處理顯示和隱藏清除小圖標(biāo)鹰椒,里面的內(nèi)容長度不為0我們就顯示,否是就隱藏呕童,但這個(gè)需要輸入框有焦點(diǎn)我們才改變顯示或者隱藏漆际,為什么要需要焦點(diǎn),比如我們一個(gè)登陸界面夺饲,我們保存了用戶名和密碼奸汇,在登陸界面onCreate()的時(shí)候,我們把我們保存的密碼顯示在用戶名輸入框和密碼輸入框里面往声,輸入框里面內(nèi)容發(fā)生改變擂找,導(dǎo)致用戶名輸入框和密碼輸入框里面的清除小圖標(biāo)都顯示了,這顯然不是我們想要的效果烁挟,所以加了一個(gè)是否有焦點(diǎn)的判斷這塊可以參考
    Android 帶清除功能的輸入框控件ClearEditText,仿IOS的輸入框 這篇文章婴洼,還有動畫效果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撼嗓,一起剝皮案震驚了整個(gè)濱河市柬采,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌且警,老刑警劉巖粉捻,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異斑芜,居然都是意外死亡肩刃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門杏头,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盈包,“玉大人,你說我怎么就攤上這事醇王∧卦铮” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵寓娩,是天一觀的道長叛氨。 經(jīng)常有香客問我,道長棘伴,這世上最難降的妖魔是什么寞埠? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮焊夸,結(jié)果婚禮上仁连,老公的妹妹穿的比我還像新娘。我一直安慰自己阱穗,他們只是感情好怖糊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布帅容。 她就那樣靜靜地躺著,像睡著了一般伍伤。 火紅的嫁衣襯著肌膚如雪并徘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天扰魂,我揣著相機(jī)與錄音麦乞,去河邊找鬼。 笑死劝评,一個(gè)胖子當(dāng)著我的面吹牛姐直,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蒋畜,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼声畏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了姻成?” 一聲冷哼從身側(cè)響起插龄,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎科展,沒想到半個(gè)月后均牢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡才睹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年徘跪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琅攘。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡垮庐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坞琴,到底是詐尸還是另有隱情哨查,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布置济,位于F島的核電站解恰,受9級特大地震影響锋八,放射性物質(zhì)發(fā)生泄漏浙于。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一挟纱、第九天 我趴在偏房一處隱蔽的房頂上張望羞酗。 院中可真熱鬧,春花似錦紊服、人聲如沸檀轨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽参萄。三九已至卫枝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間讹挎,已是汗流浹背校赤。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留筒溃,地道東北人马篮。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像怜奖,于是被迫代替她去往敵國和親浑测。 傳聞我的和親對象是個(gè)殘疾皇子歪玲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

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