ScrollView與EditText焦點(diǎn)早龟、輸入法彈出問題、常用屬性隨記

1猫缭、EditText彈出軟鍵盤遮住輸入框問題

在Activity中添加配置
在該Activity中的onCretae()的setContentView()方法前面添加:getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
含義:把整個(gè)Layout頂上去露出獲得焦點(diǎn)的EditText,不壓縮多余空間.

解釋他們的含義:

SOFT_INPUT_ADJUST_NOTHING: 不調(diào)整(輸入法完全直接覆蓋住,未開放此參數(shù));
SOFT_INPUT_ADJUST_PAN:把整個(gè)Layout頂上去露出獲得焦點(diǎn)的EditText,不壓縮多余空間
SOFT_INPUT_ADJUST_RESIZE: 整個(gè)Layout重新編排,重新分配多余空間;
SOFT_INPUT_ADJUST_UNSPECIFIED: 系統(tǒng)自己根據(jù)內(nèi)容自行選擇上兩種方式的一種執(zhí)行(默認(rèn)配置).
這里SOFT_INPUT_ADJUST_RESIZE和SOFT_INPUT_ADJUST_PAN和上面中的adjustResize和adjustPan效果是一樣的.

@Overrideprotected
 void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //讓布局向上移來顯示軟鍵盤
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
    setContentView(R.layout.activity_login);
    init();
}

2葱弟、EditText和ScrollView連用導(dǎo)致EdtiText無法獲取焦點(diǎn)或焦點(diǎn)一閃而逝

在布局文件xml里
    ScrollView標(biāo)簽添加屬性    android:descendantFocusability="blocksDescendants"http://后代可聚焦性
    EditText標(biāo)簽添加屬性  android:clickable="true"http://可點(diǎn)擊
                        android:focusable="true"http://可獲取焦點(diǎn)
                        android:enabled="true"http://啟用  

3、實(shí)現(xiàn)點(diǎn)擊EditText外部隱藏輸入法且EditText失去焦點(diǎn)(這塊焦點(diǎn)邏輯可用于其他控件標(biāo)簽)

(1)重寫dispatchTouchEvent
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if(ev.getAction()==MotionEvent.ACTION_DOWN){
            View v = getCurrentFocus();
            if (isShouldHideInput(v, ev)) {//判斷當(dāng)前點(diǎn)擊屏幕的地方是否是軟鍵盤
                setFocusables(mETProjectName, false);//使EditText失去焦點(diǎn)猜丹,參數(shù)2位true則獲取焦點(diǎn)芝加,記得在合適的地方至true,否則ET將無法獲取焦點(diǎn)
                if (hideSoftInputMethod(this, v)) {//隱藏輸入法軟鍵盤
                    return true; //隱藏鍵盤時(shí)射窒,其他控件不響應(yīng)點(diǎn)擊事件==》注釋則不攔截點(diǎn)擊事件
                }
            }
        }
        return super.dispatchTouchEvent(ev);
    }

    private void setFocusables(EditText editText, Boolean b) {
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);//把整個(gè)Layout頂上去露出獲得焦點(diǎn)的EditText,不壓縮多余空間
        editText.setFocusable(b);
        editText.setFocusableInTouchMode(b);
        editText.requestFocus();
    }
    
    /**
     * 判斷當(dāng)前點(diǎn)擊屏幕的地方是否是軟鍵盤
     * @param v
     * @param event
     * @return
     */
    public static boolean isShouldHideInput(View v, MotionEvent event) {
        if (v != null && (v instanceof EditText)) {
            int[] leftTop = { 0, 0 };
            v.getLocationInWindow(leftTop);
            int left = leftTop[0], top = leftTop[1], bottom = top + v.getHeight(), right = left
                    + v.getWidth();
            if (event.getX() > left && event.getX() < right
                    && event.getY() > top && event.getY() < bottom) {
                // 保留點(diǎn)擊EditText的事件
                return false;
            } else {
                return true;
            }
        }
        return false;
    }

    /**
     * 隱藏軟鍵盤
     * @param context
     * @param v
     * @return
     */
    public static Boolean hideSoftInputMethod(Context context, View v) {
        InputMethodManager imm = (InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) {
            return imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
        }
        return false;
    }

4藏杖、EditText輸入的文字為密碼形式的設(shè)置

(1)通過.xml里設(shè)置:
把該EditText設(shè)為:android:password="true" // 以”.”形式顯示文本
(2)在代碼里設(shè)置:
通過設(shè)置EditText的setTransformationMethod()方法來實(shí)現(xiàn)隱藏密碼或這顯示密碼。
editText.setTransformationMethod(PasswordTransformationMethod.getInstance());//設(shè)置密碼為不可見脉顿。

5蝌麸、EditText輸入的文字為電話號(hào)碼

Android:phoneNumber=”true”  //輸入電話號(hào)碼

6、EditText字?jǐn)?shù)限制的設(shè)置

(1)在.xml中設(shè)置:android:maxLength=“50” 
(2)代碼中設(shè)置:   
editText.setFilters(new InputFilter[]{newInputFilter.LengthFilter(100)});

7艾疟、EditText設(shè)置字體

android:typeface="monospace" //設(shè)置字型来吩。字形有:normal, sans, serif,monospace
android:numeric="integer"http://只接受數(shù)字 android:numeric來控制輸入的數(shù)字類型敢辩,一共有三種分別為integer(正整數(shù))、signed(帶符號(hào)整數(shù)弟疆,有正負(fù))和decimal(浮點(diǎn)數(shù))责鳍。

8、在EditText中軟鍵盤的調(diào)起兽间、關(guān)閉

(1)EditText有焦點(diǎn)(focusable為true)阻止輸入法彈出
 editText=(EditText)findViewById(R.id.txtBody);
   editText.setOnTouchListener(new OnTouchListener(){  
         public boolean onTouch(View v, MotionEvent event){ 
            editText.setInputType(InputType.TYPE_NULL); //關(guān)閉軟鍵盤     
            return false;
         }
    });

(2)當(dāng)EidtText無焦點(diǎn)(focusable=false)時(shí)阻止輸入法彈出
 InputMethodManager imm =
 (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 
 imm.hideSoftInputFromWindow(editText.getWindowToken(),0);
(3)調(diào)用數(shù)字鍵盤并設(shè)置輸入類型和鍵盤為英文
 etNumber.setInputType(InputType.TYPE_CLASS_NUMBER); //調(diào)用數(shù)字鍵盤
 rlEditText.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);//設(shè)置輸入類型和鍵盤為英文 或者:android:inputType="textUri|textMultiLine"
(4)android:focusable="false"http://鍵盤永遠(yuǎn)不會(huì)彈出
 <activity android:name=".AddLinkman"android:windowSoftInputMode="adjustUnspecified|stateHidden"/>//不自動(dòng)彈出鍵盤
 //關(guān)閉鍵盤(比如輸入結(jié)束后執(zhí)行) InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(etEditText.getWindowToken(), 0);
 //自動(dòng)彈出鍵盤
 ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);
 etEditText.requestFocus();//讓EditText獲得焦點(diǎn)历葛,但是獲得焦點(diǎn)并不會(huì)自動(dòng)彈出鍵盤

9、android:padding和android:layout_margin區(qū)別

這兩個(gè)都可以設(shè)置邊距嘀略,但有細(xì)微的區(qū)別:
(1)android:padding是相對(duì)父view的邊距
(2)android:layout_margin是相對(duì)同一級(jí)View的邊距
例:LinearLayout是水平布局沦辙,下面有兩個(gè)按鈕呐萨,
(a)如果右邊的按鈕想距左邊的按鈕15px,因?yàn)檫@兩個(gè)按鈕是同一級(jí)的最域,應(yīng)該用android:layout_margin洋腮;
(b)如果右邊的按鈕想距左邊的距離為350px,應(yīng)該用android:padding      

10、android:layout_gravity和android:gravity的區(qū)別

(1)android:layout_gravity是本元素對(duì)父元素的重力方向讼育。
(2)android:gravity是本元素所有子元素的重力方向

11帐姻、使用android:imeOptinos可對(duì)Android自帶的軟鍵盤進(jìn)行一些界面上的設(shè)置:

android:imeOptions="flagNoExtractUi" //使軟鍵盤不全屏顯示,只占用一部分屏幕 同時(shí),這個(gè)屬性還能控件軟鍵盤右下角按鍵的顯示內(nèi)容,默認(rèn)情況下為回車鍵 android:imeOptions="actionNone" //輸入框右側(cè)不帶任何提示 android:imeOptions="actionGo"   //右下角按鍵內(nèi)容為'開始' android:imeOptions="actionSearch" //右下角按鍵為放大鏡圖片奶段,搜索 android:imeOptions="actionSend"   //右下角按鍵內(nèi)容為'發(fā)送' android:imeOptions="actionNext"  //右下角按鍵內(nèi)容為'下一步' android:imeOptions="actionDone" //右下角按鍵內(nèi)容為'完成'

12饥瓷、限定edittext能輸入數(shù)字和字母,并且默認(rèn)輸入為數(shù)字痹籍,如身份證號(hào)碼

android:inputType="number" android:digits="0123456789xyzXYZ"http://指定輸入法的類型呢铆,int類型,可以用|選擇多個(gè)蹲缠。取值可以參考:android.text.InputType類棺克。取值包括:text,textUri, phone,number线定,等

13娜谊、edittext光標(biāo)詳解

edittext.requestFocusFromTouch();//讓光標(biāo)放入到點(diǎn)擊位置。 edittext.requestFocus();//默認(rèn)方式獲得焦點(diǎn)
EditText editor = (EditText)getCurrentView();//光標(biāo)處插入 int cursor = editor.getSelectionStart(); editor.getText().insert(cursor,delta);
讓光標(biāo)移到末端(這樣文字就會(huì)向前顯示) EditText et = ... String text = "text"; et.setText(text); et.setSelection(text.length());
android:cursorVisible="false" 隱藏光標(biāo)
android:background="#00000000"http://不要文本框背景

14斤讥、EditText 常用屬性匯總

android:layout_gravity="center_vertical" 設(shè)置控件顯示的位置:默認(rèn)top纱皆,這里居中顯示,還有bottom android:hint="請(qǐng)輸入數(shù)字周偎!"
設(shè)置顯示在空間上的提示信息 android:numeric="integer" 設(shè)置只能輸入整數(shù)抹剩,如果是小數(shù)則是:
decimal android:singleLine="true" 設(shè)置單行輸入,一旦設(shè)置為true蓉坎,則文字不會(huì)自動(dòng)換行。
android:password="true" 設(shè)置只能輸入密碼
android:textColor = "#ff8c00" 字體顏色
android:textStyle="bold" 字體胡嘿,bold, italic, bolditalic android:textSize="20dip" 大小
android:capitalize = "characters" 以大寫字母寫
android:textAlign="center" EditText沒有這個(gè)屬性蛉艾,但TextView有 android:textColorHighlight="#cccccc" 被選中文字的底色,默認(rèn)為藍(lán)色
android:textColorHint="#ffff00" 設(shè)置提示信息文字的顏色,默認(rèn)為灰色 android:textScaleX="1.5" 控制字與字之間的間距
android:typeface="monospace" 字型勿侯,normal, sans, serif, monospace android:background="@null" 空間背景拓瞪,這里沒有,指透明
android:layout_weight="1" 權(quán)重助琐,控制控件之間的地位,在控制控件顯示的大小時(shí)蠻有用的祭埂。
android:textAppearance="?android:attr/textAppearanceLargeInverse" 文字外觀,這里引用的是系統(tǒng)自帶的一個(gè)外觀兵钮,蛆橡?表示系統(tǒng)是否有這種外觀,否則使用默認(rèn)的外觀掘譬。不知道這樣理解對(duì)不對(duì)泰演? 通過EditText的layout xml文件中的相關(guān)屬性來實(shí)現(xiàn):
1. 密碼框?qū)傩?android:password="true" 這條可以讓EditText顯示的內(nèi)容自動(dòng)為星號(hào),輸入時(shí)內(nèi)容會(huì)在1秒內(nèi)變成*字樣葱轩。
2. 純數(shù)字 android:numeric="true" 這條可以讓輸入法自動(dòng)變?yōu)閿?shù)字輸入鍵盤睦焕,同時(shí)僅允許0-9的數(shù)字輸入
3. 僅允許 android:capitalize="cwj1987" 這樣僅允許接受輸入cwj1987,一般用于密碼驗(yàn)證 下面是一些擴(kuò)展的風(fēng)格屬性
android:editable="false" 設(shè)置EditText不可編輯
android:singleLine="true" 強(qiáng)制輸入的內(nèi)容在單行
android:ellipsize="end" 自動(dòng)隱藏尾部溢出數(shù)據(jù)靴拱,一般用于文字內(nèi)容過長一行無法全部顯示時(shí)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垃喊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子袜炕,更是在濱河造成了極大的恐慌缔御,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妇蛀,死亡現(xiàn)場(chǎng)離奇詭異耕突,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)评架,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門眷茁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纵诞,你說我怎么就攤上這事上祈。” “怎么了浙芙?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵登刺,是天一觀的道長。 經(jīng)常有香客問我嗡呼,道長纸俭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任南窗,我火速辦了婚禮揍很,結(jié)果婚禮上郎楼,老公的妹妹穿的比我還像新娘。我一直安慰自己窒悔,他們只是感情好呜袁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著简珠,像睡著了一般阶界。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上聋庵,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天膘融,我揣著相機(jī)與錄音,去河邊找鬼珍策。 笑死托启,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的攘宙。 我是一名探鬼主播屯耸,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蹭劈!你這毒婦竟也來了疗绣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤铺韧,失蹤者是張志新(化名)和其女友劉穎多矮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哈打,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡塔逃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了料仗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片湾盗。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖立轧,靈堂內(nèi)的尸體忽然破棺而出格粪,到底是詐尸還是另有隱情,我是刑警寧澤氛改,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布帐萎,位于F島的核電站,受9級(jí)特大地震影響胜卤,放射性物質(zhì)發(fā)生泄漏疆导。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一瑰艘、第九天 我趴在偏房一處隱蔽的房頂上張望是鬼。 院中可真熱鬧肤舞,春花似錦紫新、人聲如沸均蜜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽囤耳。三九已至,卻和暖如春偶芍,著一層夾襖步出監(jiān)牢的瞬間充择,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國打工匪蟀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留椎麦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓材彪,卻偏偏與公主長得像观挎,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子段化,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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