天天看點

Android - 文本框的輸入法控制和預設焦點設定

版權聲明:本文為部落客原創文章,轉載請标明出處。 https://blog.csdn.net/chaoyu168/article/details/49583609

1、EditText輸入的文字為密碼形式的設定

(1)通過.xml裡設定:

 把該EditText設為:android:password="true" // 以”.”形式顯示文本

(2)在代碼裡設定:

通過設定EditText的setTransformationMethod()方法來實作隐藏密碼或這顯示密碼。

editText.setTransformationMethod(PasswordTransformationMethod.getInstance());//設定密碼為不可見。

2、(1)EditText輸入的文字為電話号碼

Android:phoneNumber=”true”  //輸入電話号碼

3、EditText字數限制的設定

(1)在.xml中設定:android:maxLength=“50” 

(2)代碼中設定:   

editText.setFilters(new InputFilter[]{newInputFilter.LengthFilter(100)});

4、EditText設定字型

android:typeface="monospace" //設定字型。字形有:normal, sans, serif,monospace

5、EditText是否可編輯

Android:editable // 是否可編輯

6、在EditText中軟鍵盤的調起、關閉

(1)EditText有焦點(focusable為true)阻止輸入法彈出

 editText=(EditText)findViewById(R.id.txtBody);

   editText.setOnTouchListener(new OnTouchListener(){  

         public boolean onTouch(View v, MotionEvent event){ 

            editText.setInputType(InputType.TYPE_NULL); //關閉軟鍵盤     

            return false;

         }

    });

(2)當EidtText無焦點(focusable=false)時阻止輸入法彈出

 InputMethodManager imm =

(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 

 imm.hideSoftInputFromWindow(editText.getWindowToken(),0);

(3)調用數字鍵盤并設定輸入類型和鍵盤為英文

etNumber.setInputType(InputType.TYPE_CLASS_NUMBER); //調用數字鍵盤

rlEditText.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);//設定輸入類型和鍵盤為英文 或者:android:inputType="textUri|textMultiLine"

(4)android:focusable="false"//鍵盤永遠不會彈出

<activity android:name=".AddLinkman"android:windowSoftInputMode="adjustUnspecified|stateHidden"/>//不自動彈出鍵盤

//關閉鍵盤(比如輸入結束後執行) InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(etEditText.getWindowToken(), 0);

//自動彈出鍵盤

((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);

etEditText.requestFocus();//讓EditText獲得焦點,但是獲得焦點并不會自動彈出鍵盤

7、android:layout_gravity和android:gravity的差別

(1)android:layout_gravity是本元素對父元素的重力方向。

(2)android:gravity是本元素所有子元素的重力方向。

8、android:padding和android:layout_margin差別

這兩個都可以設定邊距,但有細微的差別:

(1)android:padding是相對父view的邊距

(2)android:layout_margin是相對同一級View的邊距

例:LinearLayout是水準布局,下面有兩個按鈕,

(a)如果右邊的按鈕想距左邊的按鈕15px,因為這兩個按鈕是同一級的,應該用android:layout_margin;

(b)如果右邊的按鈕想距左邊的距離為350px,應該用android:padding

9、android:numeric//隻接受數字

android:numeric來控制輸入的數字類型,一共有三種分别為integer(正整數)、signed(帶符号整數,有正負)和decimal(浮點數)。

10、Enter鍵圖示的設定

軟鍵盤的Enter鍵預設顯示的是“完成”文本,我們知道按Enter建表示前置工作已經準備完畢了,要去什麼什麼啦。比如,在一個搜尋中,我們輸入要搜尋的文本,然後按Enter表示要去搜尋了,但是預設的Enter鍵顯示的是“完成”文本,看着不太合适,不符合搜尋的語義,如果能顯示“搜尋”兩個字或者顯示一個表示搜尋的圖示多好。事實證明我們的想法是合理的,Android也為我們提供的這樣的功能。通過設定android:imeOptions來改變預設的“完成”文本。這裡舉幾個常用的常量值:

(1)actionUnspecified未指定,對應常量EditorInfo.IME_ACTION_UNSPECIFIED效果:

Android - 文本框的輸入法控制和預設焦點設定
(2)actionNone 沒有動作,對應常量EditorInfo.IME_ACTION_NONE效果:
Android - 文本框的輸入法控制和預設焦點設定
(3)actionGo去往,對應常量EditorInfo.IME_ACTION_GO 效果:
Android - 文本框的輸入法控制和預設焦點設定
(4)actionSearch 搜尋,對應常量EditorInfo.IME_ACTION_SEARCH效果: 
Android - 文本框的輸入法控制和預設焦點設定
(5)actionSend 發送,對應常量EditorInfo.IME_ACTION_SEND效果:
Android - 文本框的輸入法控制和預設焦點設定
(6)actionNext 下一個,對應常量EditorInfo.IME_ACTION_NEXT效果:
Android - 文本框的輸入法控制和預設焦點設定
(7)actionDone 完成,對應常量EditorInfo.IME_ACTION_DONE效果:
Android - 文本框的輸入法控制和預設焦點設定

11、使用android:imeOptinos可對Android自帶的軟鍵盤進行一些界面上的設定:

android:imeOptions="flagNoExtractUi" //使軟鍵盤不全屏顯示,隻占用一部分螢幕 同時,這個屬性還能控件軟鍵盤右下角按鍵的顯示内容,預設情況下為Enter鍵 android:imeOptions="actionNone" //輸入框右側不帶任何提示 android:imeOptions="actionGo"   //右下角按鍵内容為'開始' android:imeOptions="actionSearch" //右下角按鍵為放大鏡圖檔,搜尋 android:imeOptions="actionSend"   //右下角按鍵内容為'發送'

android:imeOptions="actionNext"  //右下角按鍵内容為'下一步' android:imeOptions="actionDone" //右下角按鍵内容為'完成'

12、限定edittext能輸入數字和字母,并且預設輸入為數字,如身份證号碼

android:inputType="number" android:digits="0123456789xyzXYZ"

13、軟鍵盤的調起導緻原來的界面被擠上去,或者導緻界面下面的tab導航被擠上去,解決方法如下

解決方法:

使用Manifest中的Activity的android:windowSoftInputMode的"adjustPan"屬性。

另外注意:有關軟鍵盤的問題可參考android:windowSoftInputMode中屬性。

14、edittext光标詳解 edittext.requestFocusFromTouch();//讓光标放入到點選位置。 edittext.requestFocus();//預設方式獲得焦點

EditText editor = (EditText)getCurrentView();//光标處插入 int cursor = editor.getSelectionStart(); editor.getText().insert(cursor,delta);

讓光标移到末端(這樣文字就會向前顯示) EditText et = ... String text = "text"; et.setText(text); et.setSelection(text.length());

android:cursorVisible="false" 隐藏光标

android:background="#00000000"//不要文本框背景 

Android - 文本框的輸入法控制和預設焦點設定

在開發中,必不可少的會使用到文本框(EditText)來進行資料錄入,也就會需要對輸入法進行一些控制。      
先看下LAYOUT定義檔案中的和輸入法有關的屬性:      
屬性名      
說明      
android:inputType      
指定輸入法的類型,int類型,可以用|選擇多個。取值可以參考:android.text.InputType類。取值包括:text,
  textUri, phone,number,等。      
android:imeOptions      
指定輸入法視窗中的Enter鍵的功能,可選值為normal,
  actionNext,actionDone,actionSearch等。部分輸入法對此的支援可能不夠好。      
下面的LAYOUT定義檔案舉了一些例子說明inputType和imeOptions的使用。      
<EditText
android:id="@+id/textNormal"      
android:layout_width="fill_parent"
android:layout_height="wrap_content"      
android:hint="Normal
text"      
android:inputType="text"      
android:imeOptions="actionNext"      
/>      
<EditText
android:id="@+id/textInteger"      
android:layout_width="fill_parent"
android:layout_height="wrap_content"      
android:hint="Integer
only"      
android:inputType="number"      
android:imeOptions="actionNext"      
/>      
<EditText
android:id="@+id/textPhone"      
android:layout_width="fill_parent"
android:layout_height="wrap_content"      
android:hint="Phone
number"      
android:inputType="phone"      
android:imeOptions="actionNext"      
/>      
<EditText
android:id="@+id/textEmail"      
android:layout_width="fill_parent"
android:layout_height="wrap_content"      
android:hint="Email"      
android:imeOptions="actionSend"      
android:inputType="textEmailAddress"      
/>      
<EditText
android:id="@+id/textSite"      
android:layout_width="fill_parent"
android:layout_height="wrap_content"      
android:hint="Web
Site"      
android:imeOptions="actionDone"      
android:inputType="textUri"      
/>


有時候也要對intent的預設焦點進行設定,不至于在intent跳轉的時候預設焦點(光标)在EditText上,導緻進入intent就打開輸入法,影響界面美觀。      
預設焦點的順序是:從上倒下
從左到右第一個可以輸入的控件作為焦點
      
可以使用:      
button.setFocusable(true);      
button.requestFocus();      
button.setFocusableInTouchMode(true);      
也可以:      
在EditText前面放置一個看不到的LinearLayout,讓他率先擷取焦點:
<LinearLayout
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="0px"
android:layout_height="0px"/>
Android EditText 屬性彙總      

Android EditText 屬性彙總

EditText繼承關系:View-->TextView-->EditText
EditText的屬性很多,這裡介紹幾個:
android:hint="請輸入數字!"//設定顯示在空間上的提示資訊
android:numeric="integer"//設定隻能輸入整數,如果是小數則是:decimal
android:singleLine="true"//設定單行輸入,一旦設定為true,則文字不會自動換行。
android:password="true"//設定隻能輸入密碼
android:textColor = "#ff8c00"//字型顔色
android:textStyle="bold"//字型,bold, italic, bolditalic
android:textSize="20dip"//大小
android:capitalize = "characters"//以大寫字母寫
android:textAlign="center"//EditText沒有這個屬性,但TextView有,居中
android:textColorHighlight="#cccccc"//被選中文字的底色,預設為藍色
android:textColorHint="#ffff00"//設定提示資訊文字的顔色,預設為灰色android:textScaleX="1.5"//控制字與字之間的間距
android:typeface="monospace"//字型,normal, sans, serif, monospace
android:background="@null"//背景,這裡沒有,指透明
android:layout_weight="1"//權重,控制控件之間的地位,在控制控件顯示的大小時蠻有用的。
android:textAppearance="?android:attr/textAppearanceLargeInverse"//文字外觀
android:layout_gravity="center_vertical"//設定控件顯示的位置:預設top,這裡居中顯示,還有bottom
android:gray="top" //多行中指針在第一行第一位置
et.setSelection(et.length());//調整光标到最後一行
android:autoText //自動拼寫幫助
android:capitalize //首字母大寫
android:digits //設定隻接受某些數字
Android:singleLine//是否單行或者多行,回車是離開文本框還是文本框增加新行
android:numeric //隻接受數字
android:phoneNumber //輸入電話号碼
android:editable //是否可編輯
android:autoLink=”all” //設定文本超連結樣式當點選網址時,跳向該網址 
android:textAppearance="?android:attr/textAppearanceLargeInverse"//文字外觀,這裡引用的是系統自帶的一個外觀,?表示系統是否有這種外觀,否則使用預設的外觀。不知道這樣了解對不對? 
       
 屬性名稱描述
android:autoLink設定是否當文本為URL連結/email/電話号碼/map時,文本顯示為可點選的連結。可選值(none/web/email/phone/map/all)
android:autoText如果設定,将自動執行輸入值的拼寫糾正。此處無效果,在顯示輸入法并輸入的時候起作用。
android:bufferType指定getText()方式取得的文本類别。選項editable 類似于StringBuilder可追加字元,
也就是說getText後可調用append方法設定文本内容。spannable 則可在給定的字元區域使用樣式,參見這裡1、這裡2。
android:capitalize設定英文字母大寫類型。此處無效果,需要彈出輸入法才能看得到,參見EditView此屬性說明。
android:cursorVisible設定光标為顯示/隐藏,預設顯示。
android:digits設定允許輸入哪些字元。如“1234567890.+-*/% ()”
android:drawableBottom在text的下方輸出一個drawable,如圖檔。如果指定一個顔色的話會把text的背景設為該顔色,并且同時和background使用時覆寫後者。
android:drawableLeft在text的左邊輸出一個drawable,如圖檔。
android:drawablePadding設定text與drawable(圖檔)的間隔,與drawableLeft、drawableRight、drawableTop、drawableBottom一起使用,可設定為負數,單獨使用沒有效果。 
android:drawableRight在text的右邊輸出一個drawable,如圖檔。
android:drawableTop在text的正上方輸出一個drawable,如圖檔。
android:editable設定是否可編輯。這裡無效果,參見EditView。
android:editorExtras設定文本的額外的輸入資料。在EditView再讨論。
android:ellipsize設定當文字過長時,該控件該如何顯示。有如下值設定:”start”—?省略号顯示在開頭;”end”——省略号顯示在結尾;”middle”—-省略号顯示在中間;”marquee” ——以跑馬燈的方式顯示(動畫橫向移動)
android:freezesText設定儲存文本的内容以及光标的位置。參見:這裡。
android:gravity設定文本位置,如設定成“center”,文本将居中顯示。
android:hintText為空時顯示的文字提示資訊,可通過textColorHint設定提示資訊的顔色。此屬性在EditView中使用,但是這裡也可以用。
android:imeOptions附加功能,設定右下角IME動作與編輯框相關的動作,如actionDone右下角将顯示一個“完成”,而不設定預設是一個回車符号。這個在EditView中再詳細說明,此處無用。
android:imeActionId設定IME動作ID。在EditView再做說明,可以先看這篇文章:這裡。
android:imeActionLabel設定IME動作标簽。在EditView再做說明。
android:includeFontPadding設定文本是否包含頂部和底部額外空白,預設為true。
android:inputMethod為文本指定輸入法,需要完全限定名(完整的包名)。例如:com.google.android.inputmethod.pinyin,但是這裡報錯找不到。
android:inputType設定文本的類型,用于幫助輸入法顯示合适的鍵盤類型。在EditView中再詳細說明,這裡無效果。
android:linksClickable設定連結是否點選連接配接,即使設定了autoLink。
android:marqueeRepeatLimit在ellipsize指定marquee的情況下,設定重複滾動的次數,當設定為marquee_forever時表示無限次。
android:ems設定TextView的寬度為N個字元的寬度。這裡測試為一個漢字字元寬度,如圖:
android:maxEms設定TextView的寬度為最長為N個字元的寬度。與ems同時使用時覆寫ems選項。
android:minEms設定TextView的寬度為最短為N個字元的寬度。與ems同時使用時覆寫ems選項。
android:maxLength限制顯示的文本長度,超出部分不顯示。
android:lines設定文本的行數,設定兩行就顯示兩行,即使第二行沒有資料。
android:maxLines設定文本的最大顯示行數,與width或者layout_width結合使用,超出部分自動換行,超出行數将不顯示。
android:minLines設定文本的最小行數,與lines類似。
android:lineSpacingExtra設定行間距。
android:lineSpacingMultiplier設定行間距的倍數。如”1.2”
android:numeric如果被設定,該TextView有一個數字輸入法。此處無用,設定後唯一效果是TextView有點選效果,此屬性在EdtiView将詳細說明。
android:password以小點”.”顯示文本
android:phoneNumber設定為電話号碼的輸入方式。
android:privateImeOptions設定輸入法選項,此處無用,在EditText将進一步讨論。
android:scrollHorizontally設定文本超出TextView的寬度的情況下,是否出現橫拉條。
android:selectAllOnFocus如果文本是可選擇的,讓他擷取焦點而不是将光标移動為文本的開始位置或者末尾位置。TextView中設定後無效果。
android:shadowColor指定文本陰影的顔色,需要與shadowRadius一起使用。效果:
android:shadowDx設定陰影橫向坐标開始位置。
android:shadowDy設定陰影縱向坐标開始位置。
android:shadowRadius設定陰影的半徑。設定為0.1就變成字型的顔色了,一般設定為3.0的效果比較好。
android:singleLine設定單行顯示。如果和layout_width一起使用,當文本不能全部顯示時,後面用“…”來表示。如android:text="test_ singleLine " android:singleLine="true" android:layout_width="20dp"将隻顯示“t…”。如果不設定singleLine或者設定為false,文本将自動換行
android:shadowDx設定陰影橫向坐标開始位置。
android:shadowDy設定陰影縱向坐标開始位置。
android:shadowRadius設定陰影的半徑。設定為0.1就變成字型的顔色了,一般設定為3.0的效果比較好。
android:singleLine設定單行顯示。如果和layout_width一起使用,當文本不能全部顯示時,後面用“…”來表示。如android:text="test_ singleLine " android:singleLine="true" android:layout_width="20dp"将隻顯示“t…”。如果不設定singleLine或者設定為false,文本将自動換行
android:text設定顯示文本.
 android:textSize設定文字大小,推薦度量機關”sp”,如”15sp”
android:textStyle設定字形[bold(粗體) 0, italic(斜體) 1, bolditalic(又粗又斜) 2] 可以設定一個或多個,用“|”隔開
android:typeface設定文本字型,必須是以下常量值之一:normal 0, sans 1, serif 2, monospace(等寬字型) 3]
android:height設定文本區域的高度,支援度量機關:px(像素)/dp/sp/in/mm(毫米)
android:maxHeight設定文本區域的最大高度
android:minHeight設定文本區域的最小高度
android:width設定文本區域的寬度,支援度量機關:px(像素)/dp/sp/in/mm(毫米),與layout_width的差別看這裡。
android:maxWidth設定文本區域的最大寬度
android:minWidth設定文本區域的最小寬度
android:textAppearance設定文字外觀。如“?android:attr/textAppearanceLargeInverse
”這裡引用的是系統自帶的一個外觀,?表示系統是否有這種外觀,否則使用預設的外觀。可設定的值如下:textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse
android:textAppearance設定文字外觀。如“?android:attr/textAppearanceLargeInverse
”這裡引用的是系統自帶的一個外觀,?表示系統是否有這種外觀,否則使用預設的外觀。可設定的值如下:textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse           

繼續閱讀