第六章 Android常見的UI基礎控件(二)

3. EditText

3.1 EditText的基本屬性

EditText 是一個文本輸入框。下面是基本的屬性:
1.android:layout_width/android:layout_height 設置寬高
2.android:cursorVisible 設置光標可見 boolean值,默認可見
3.android:background 設置背景,一般EditText輸入框會有下劃線的,不想要的話,可以直接設置為 android :background="none"或者自定義背景 android:background="@drawable/bg_edit".
4.android:inputType 輸入框獲取焦點的時候會吊起鍵盤,這時候可以設置鍵盤的輸入格式。
5.android:lines 設置輸入框的行數,在寬高固定的情況下,行數會默認平分寬高。
6.android:scrollHorizontally 設置橫向滑動
7.android:maxLength="20"設置最大的長度為20

  <EditText
        android:id="@+id/et_demo"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:cursorVisible="false"
        android:background="#f00"
        android:layout_gravity="center"
         android:inputType="number"
        android:lines="2"
        android:scrollHorizontally="true"
        android:maxLines="1"
        android:maxLength="20"
        />

editText屬性

3.2 EditText 的InputType 的基本屬性

android:inputType的可選項:

  1. android:inputType="textPersonName"
  2. android:inputType="textPassword"
  3. android:inputType="numberPassword"
  4. android:inputType="textEmailAddress"
  5. android:inputType="phone"
  6. android:inputType="textPostalAddress"
  7. android:inputType="time"
  8. android:inputType="date"
  9. android:inputType="number"

3.2 EditText 的 文本輸入法控制和焦點控制

3.2.1 焦點控制

??有時候我們需要跳轉到某個界面的時候,那個界面有一個EditText,然后是默認獲取焦點的,鍵盤被彈起來。這時候你的尷尬癥煩了,不需要啊 。等我需要點擊的時候再彈起來鍵盤不好么?這里有兩種方式去控制焦點:

  1. 布局文件中控制
    在父布局中失去焦點。加入
    android:focusable="true"
    android:focusableInTouchMode="true"
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:focusable="true"
    android:focusableInTouchMode="true"
    >

    <EditText
        android:id="@+id/et_demo"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:cursorVisible="false"
        android:background="#f00"
        android:layout_gravity="center"
        android:inputType="number"
        android:lines="2"
        android:scrollHorizontally="true"
        android:maxLines="1"
        android:maxLength="20"
        />

</LinearLayout>

2.代碼控制

EditText  et_demo=(EditText)findViewById(R.id.edit);
 et_demo.setFocusable(true);
 et_demo.setFocusableInTouchMode(true);

3.焦點處理

EditText  et_demo=(EditText)findViewById(R.id.edit);
et_demo.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
               //判斷獲取焦點
              if(hasFocus){
               //有焦點的時候怎么處理
              }else{
              //沒有焦點的時候怎么處理
             }
                
            }
        });

3.2.2 鍵盤輸入框的焦點控制

??鍵盤輸入框的彈起和隱藏。

android:focusable="false"http://鍵盤永遠不會彈出
//在AndroidManifest.xml 文件中對應的activity設置
<activity 
    android:name=".EditTextActivity" 
    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獲得焦點,但是獲得焦點并不會自動彈出鍵盤
3.2.3 鍵盤的回車鍵處理

一般在我們的文本輸入框調起來的時候,都是默認的android:imeOptions="actionUnspecified"可以不寫


默認回車

有時候你需要修改這個屬性,怎么辦?這時候需要設置:android:imeOptions這個值

1.android :imeOptions="actionDone" ,下方的軟鍵盤變成了“完成”:

完成

2.android :imeOptions="actionGo",軟鍵盤變成“去往”:

去往

3.android :imeOptions="actionSearch ",軟鍵盤變成“搜索”

搜索

4.android :imeOptions="actionSend ",軟鍵盤變成“發送”


發送

5.android :imeOptions="actionNext ",軟鍵盤變成“下一個”

發送

6.android:imeOptions="flagNoExtractUi" //使軟鍵盤不全屏顯示,只占用一部分屏幕 同時,這個屬性還能控件軟鍵盤右下角按鍵的顯示內容,默認情況下為回車鍵

3.3 EditText 的部分屬性

3.3.1 輸入數字和字母
//限定edittext能輸入數字和字母,并且默認輸入為數字,如身份證號碼
android:inputType="number" android:digits="0123456789xyzXYZ"

3.3.2 軟鍵盤調起來,界面被擠上去了

使用Manifest中的Activity的android:windowSoftInputMode的"adjustPan"屬性
備注:
【A】stateUnspecified:軟鍵盤的狀態并沒有指定,系統將選擇一個合適的狀態或依賴于主題的設置
【B】stateUnchanged:當這個activity出現時,軟鍵盤將一直保持在上一個activity里的狀態,無論是隱藏還是顯示
【C】stateHidden:用戶選擇activity時,軟鍵盤總是被隱藏
【D】stateAlwaysHidden:當該Activity主窗口獲取焦點時,軟鍵盤也總是被隱藏的
【E】stateVisible:軟鍵盤通常是可見的
【F】stateAlwaysVisible:用戶選擇activity時,軟鍵盤總是顯示的狀態
【G】adjustUnspecified:默認設置,通常由系統自行決定是隱藏還是顯示
【H】adjustResize:該Activity總是調整屏幕的大小以便留出軟鍵盤的空間
【I】adjustPan:當前窗口的內容將自動移動以便當前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內容的部分

3.3.3 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"http://不要文本框背景

3.3.4 拓展

1.android:ellipsize="end" 自動隱藏尾部溢出數據,一般用于文字內容過長一行無法全部顯示時
2.android:editable="false" 設置EditText不可編輯
3.android:typeface="monospace" 字型,normal, sans, serif, monospace android:background="@null" 空間背景,這里沒有,指透明
4.android:textColorHint="#ffff00" 設置提示信息文字的顏色,默認為灰色 android:textScaleX="1.5" 控制字與字之間的間距
5.android:textStyle="bold" 字體,bold, italic, bolditalic android:textSize="20dip" 大小
6.android:layout_gravity="center_vertical" 設置控件顯示的位置:默認top,這里居中顯示,還有bottom android:hint="請輸入數字!"設置顯示在空間上的提示信息 android:numeric="integer" 設置只能輸入整數,如果是小數則是:decimal android:singleLine="true" 設置單行輸入,一旦設置為true,則文字不會自動換行。
7.android:password="true" 設置只能輸入密碼
8.android:textColor = "#ff8c00" 字體顏色

3.5 AutoCompleteTextView 自動匹配

??如果你想在自己輸入時候會在輸入框下出現下圖所示的提示,這樣就可以自動匹配。方便省事省力

自動匹配文字

步驟:
1.在你的layout文件中

 <AutoCompleteTextView
        android:id="@+id/auto"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:layout_marginTop="20dp"
        android:hint="賬戶"
       />

2.在 values/string.xml文件中加上你要展示的所有的參數

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="countries_array">
        <item>Afghanistan</item>
        <item>Albania</item>
        <item>Algeria</item>
        <item>American Samoa</item>
        <item>Andorra</item>
        <item>Angola</item>
        <item>Anguilla</item>
        <item>Antarctica</item>
        ...
    </string-array>
</resources>

3.在Activity中設置Adapter適配

 AutoCompleteTextView auto= (AutoCompleteTextView) findViewById(R.id.auto);
 String[] countries = getResources().getStringArray(R.array.countries_array);
 ArrayAdapter<String> adapter =new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, countries);
 auto.setAdapter(adapter);

4. ImageView

?? 作為常見的基礎控件之一 ,ImageView 的使用頻率非常高。

  <ImageView
        android:id="@+id/image"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:src="@mipmap/ic_launcher_round"
        android:background="#f0f0"/>

4.1 background 和 src

在Imageview中,background和src都可以設置圖片,但是實際的效果確實不同。background 是將整個Imageview控件作為參照體,整個拉伸,而src是將以自身圖片的大小為參照體,圖片大小不會填滿控件。

對比

4.2 ImageView 常用屬性

1、andorid:src 設置圖片來源。屬性值為android:src="@drawable/圖片名稱"
2、android:adjustViewBounds 用于設置 ImageView 是否調整自己的邊界,來保持所顯示圖片的長寬比例。屬性值為true或false
3、 android:maxHeight 設置 ImageView 的最大高度。需要先設置android:adjustViewBounds為true,否則不起作用。
4、andorid:maxWidth 設置 ImageView 的最大寬度。需要先設置android:adjustViewBounds為true,否則不起作用。
5、 android:scaleType 設置所顯示的圖片如何縮放或移動,以適應ImageView的大小。可選項:fitCenter、fitStart 、 fitEnd、 fitXY 、 center、centerCrop、centerInside、matrix

4.3 ScaleType詳解

● matrix :保持原圖大小、從左上角的點開始,以矩陣形式繪圖。 MATRIX 用圖片的矩陣從左向開始來畫,不做任何拉伸。如果一個100100的ImageView,它的src是1010的小圖,則圖顯示在左上角,如果scr是200200的大圖,則截取它左上的100100做顯示。
● fitXY :把圖片按照指定的大小在View中顯示,拉伸顯示圖片,不保持原比例,填滿View. FIT_XY 不保持圖片橫寬比,把圖片的寬和高分別拉伸或縮放至ImageView的大小。如果是一個100100的ImageView,它的src是2010,則直接把它拉伸為100100后顯示,如果src是200100,則把它縮放為100*100后顯示,此種方法容易導致圖片變形。

● fitStart :把圖片按比例擴大(縮小)到View的寬度,顯示在View的上部分位置 。FIT_START 與 FIT_CENTER 縮放拉伸原則一樣,區別是處理過的圖片居左顯示。
● fitCenter :把圖片按比例擴大(縮小)到View的寬度,居中顯示 。FIT_CENTER 保持橫寬比,對圖片進行拉伸或縮放,原則是:
○ 1)圖片能完整顯示;
○ 2)圖片寬或高至少有一樣與ImageView的相同;
○ 3)處理過的圖片居中顯示。
○ 如果是一個100100的ImageView,它的src是2010,先把圖片等比放大到10050,然后再居中顯示。它的src是100200,會先把圖片等比縮放到50*100,然后再居中顯示。
● fitEnd :把圖片按比例擴大(縮小)到View的寬度,顯示在View的下部分位置 。FIT_END 與 FIT_CENTER縮放拉伸原則一樣,區別是處理過的圖片居右顯示。

● Center : 以原圖的幾何中心點和ImagView的幾何中心點為基準,按圖片的原來size居中顯示,不縮放, 當圖片長/寬超過View的長/寬,則截取圖片的居中部分顯示ImageView的size. 當圖片小于View 的長寬時,只顯示圖片的size,不剪裁。 CENTER 不做任何拉伸,以居中的方式顯示圖片。如果是一個100100的ImageView,它的src是1010的小圖,則圖顯示在的中央,如果src是200200的大圖,截取中間的100100用來顯示。
● centerCrop :以原圖的幾何中心點和ImagView的幾何中心點為基準,按比例擴大(圖片小于View的寬時)圖片的size。 居中顯示,使得圖片長 (寬)等于或大于View的長(寬),并按View的大小截取圖片。 當原圖的size大于ImageView時,按比例縮小圖片,使得長寬中有一向等于ImageView,另一向大于ImageView。 CENTER_CROP 保持圖片橫寬比,以圖片中心為基點進行拉伸顯示,拉伸的原則是填充滿整個ImageView。如果是一個100100的ImageView,它的src是2010,則它會被等比拉伸成200100,然后再截取其中央的100100顯示。如果src是200300的,直接截取中央的100100顯示,不做任何拉伸或縮放。
● centerInside :以原圖的幾何中心點和ImagView的幾何中心點為基準,將圖片的內容完整居中顯示, 通過按比例縮小原來的size使得圖片長(寬)等于或小于ImageView的長(寬)。CENTER_INSIDE 保持圖片橫寬比,以圖片中心為基點進行縮放顯示,縮放的原則是顯示完整個圖片。如果是一個100100的ImageView,它的src是2010,它直接居中顯示。如果src是200100的,先把圖片等比縮小到10050,然后再居中顯示。

一般情況下,設置為centerCrop能獲得較好的適配效果。

4.4 ImageView的常見方法

1、setImageBitmap()
2、setImageDrawable()
3、setImageResource()

盡量不要直接使用setImageBitmap或setImageResource或BitmapFactory.decodeResource來設置一張大圖,因為這些函數在完成decode后,最終都是通過java層的createBitmap來完成的,需要消耗更多內存。

/** 
         * 以最省內存的方式讀取本地資源的圖片 
         *  
         * @param context 
         * @param resId 
         * @return 
         */  
        private Bitmap readBitMap(Context context, int resId) {  
            BitmapFactory.Options opt = new BitmapFactory.Options();  
            opt.inPreferredConfig = Bitmap.Config.RGB_565;  
            opt.inPurgeable = true;  
            opt.inInputShareable = true;  
            // 獲取資源圖片  
            InputStream is = context.getResources().openRawResource(resId);  
            return BitmapFactory.decodeStream(is, null, opt);  
        }  
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容