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

3. EditText

3.1 EditText的基本屬性

EditText 是一個(gè)文本輸入框。下面是基本的屬性:
1.android:layout_width/android:layout_height 設(shè)置寬高
2.android:cursorVisible 設(shè)置光標(biāo)可見 boolean值,默認(rèn)可見
3.android:background 設(shè)置背景,一般EditText輸入框會(huì)有下劃線的,不想要的話,可以直接設(shè)置為 android :background="none"或者自定義背景 android:background="@drawable/bg_edit".
4.android:inputType 輸入框獲取焦點(diǎn)的時(shí)候會(huì)吊起鍵盤,這時(shí)候可以設(shè)置鍵盤的輸入格式。
5.android:lines 設(shè)置輸入框的行數(shù),在寬高固定的情況下,行數(shù)會(huì)默認(rèn)平分寬高。
6.android:scrollHorizontally 設(shè)置橫向滑動(dòng)
7.android:maxLength="20"設(shè)置最大的長度為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的可選項(xiàng):

  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 的 文本輸入法控制和焦點(diǎn)控制

3.2.1 焦點(diǎn)控制

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

  1. 布局文件中控制
    在父布局中失去焦點(diǎn)。加入
    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.焦點(diǎn)處理

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

3.2.2 鍵盤輸入框的焦點(diǎn)控制

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

android:focusable="false"http://鍵盤永遠(yuǎn)不會(huì)彈出
//在AndroidManifest.xml 文件中對(duì)應(yīng)的activity設(shè)置
<activity 
    android:name=".EditTextActivity" 
    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)彈出鍵盤
3.2.3 鍵盤的回車鍵處理

一般在我們的文本輸入框調(diào)起來的時(shí)候,都是默認(rèn)的android:imeOptions="actionUnspecified"可以不寫


默認(rèn)回車

有時(shí)候你需要修改這個(gè)屬性,怎么辦?這時(shí)候需要設(shè)置:android:imeOptions這個(gè)值

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

完成

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

去往

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

搜索

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


發(fā)送

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

發(fā)送

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

3.3 EditText 的部分屬性

3.3.1 輸入數(shù)字和字母
//限定edittext能輸入數(shù)字和字母,并且默認(rèn)輸入為數(shù)字,如身份證號(hào)碼
android:inputType="number" android:digits="0123456789xyzXYZ"

3.3.2 軟鍵盤調(diào)起來,界面被擠上去了

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

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

3.3.4 拓展

1.android:ellipsize="end" 自動(dòng)隱藏尾部溢出數(shù)據(jù),一般用于文字內(nèi)容過長一行無法全部顯示時(shí)
2.android:editable="false" 設(shè)置EditText不可編輯
3.android:typeface="monospace" 字型,normal, sans, serif, monospace android:background="@null" 空間背景,這里沒有,指透明
4.android:textColorHint="#ffff00" 設(shè)置提示信息文字的顏色,默認(rèn)為灰色 android:textScaleX="1.5" 控制字與字之間的間距
5.android:textStyle="bold" 字體,bold, italic, bolditalic android:textSize="20dip" 大小
6.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)換行。
7.android:password="true" 設(shè)置只能輸入密碼
8.android:textColor = "#ff8c00" 字體顏色

3.5 AutoCompleteTextView 自動(dòng)匹配

??如果你想在自己輸入時(shí)候會(huì)在輸入框下出現(xiàn)下圖所示的提示,這樣就可以自動(dòng)匹配。方便省事省力

自動(dòng)匹配文字

步驟:
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文件中加上你要展示的所有的參數(shù)

<?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中設(shè)置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

?? 作為常見的基礎(chǔ)控件之一 ,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都可以設(shè)置圖片,但是實(shí)際的效果確實(shí)不同。background 是將整個(gè)Imageview控件作為參照體,整個(gè)拉伸,而src是將以自身圖片的大小為參照體,圖片大小不會(huì)填滿控件。

對(duì)比

4.2 ImageView 常用屬性

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

4.3 ScaleType詳解

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

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

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

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

4.4 ImageView的常見方法

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

盡量不要直接使用setImageBitmap或setImageResource或BitmapFactory.decodeResource來設(shè)置一張大圖,因?yàn)檫@些函數(shù)在完成decode后,最終都是通過java層的createBitmap來完成的,需要消耗更多內(nèi)存。

/** 
         * 以最省內(nèi)存的方式讀取本地資源的圖片 
         *  
         * @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);  
        }  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容