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í)