1. 程式人生 > >【Android】EditText獲得焦點以及失去焦點

【Android】EditText獲得焦點以及失去焦點

【關鍵詞】

EditText 輸入法 獲得焦點 失去焦點

【問題】
  • 預設是居中顯示且非編輯狀態,點選 EditText後文字居左且顯示編輯狀態;
  • 編輯狀態時, 點選螢幕其他地方,使其失去焦點;
  • 進入介面時 EditText 獲取焦點問題(預設狀態下不獲取焦點);
  • 非編輯狀態無底線,編輯狀態有底線加以區分;
【效果圖】

【分析】
  • 見原始碼及註釋;
【解決方案】
  • 預設讓包含 EditText 的 ViewGroup 獲取焦點;
【程式碼】

[java activity]

privatevoid initEtName(){// 使RelativeLayout 獲取焦點,防止 EditText 擷取final
RelativeLayout rlytTimerName =(RelativeLayout) findViewById(R.id.rlyt_timer_name);
rlytTimerName.setFocusable(true); rlytTimerName.setFocusableInTouchMode(true); rlytTimerName.requestFocus();finalEditText etName; etName =(EditText) findViewById(R.id.et_name); etName.setOnClickListener
(this);
etName.setOnFocusChangeListener(newView.OnFocusChangeListener(){@Overridepublicvoid onFocusChange(View v,boolean hasFocus){if(hasFocus){ etNameGetFocus(etName);}else{ etNameLostFocus(etName);}}});String name ="Lou"; etName.setText(name); etNameLostFocus
(etName);
}// 重置edittext, 居中並失去焦點privatevoid etNameLostFocus(EditText etName){ etName.setGravity(Gravity.CENTER); etName.clearFocus();InputMethodManager manager =(InputMethodManager) etName.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); manager.hideSoftInputFromWindow(etName.getWindowToken(),0);}// 獲取焦點privatevoid etNameGetFocus(finalEditText etName){ etName.requestFocus(); etName.setGravity(Gravity.START); etName.post(newRunnable(){@Overridepublicvoid run(){InputMethodManager manager =(InputMethodManager) etName.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); manager.showSoftInput(etName,0);}});// 游標置於文字最後 etName.setSelection(etName.getText().length());}@Overridepublicvoid onClick(View v){switch(v.getId()){case R.id.et_name:// 設定 EditText 的點選事件(如果處於編輯狀態則,不做操作;否則,獲取焦點進入可編輯狀態);EditText et =(EditText)v;if(!et.isCursorVisible()){ etNameGetFocus(et);}break;}}// 點選螢幕其他地方,使 etName 失去焦點(EditText)@Overridepublicboolean dispatchTouchEvent(MotionEvent ev){if(ev.getAction()==MotionEvent.ACTION_DOWN){// 獲取當前焦點所在的控制元件;View view = getCurrentFocus();if(view !=null&& view instanceofEditText){Rect r =newRect(); view.getGlobalVisibleRect(r);int rawX =(int) ev.getRawX();int rawY =(int) ev.getRawY();// 判斷點選的點是否落在當前焦點所在的 view 上;if(!r.contains(rawX, rawY)){ view.clearFocus();}}}returnsuper.dispatchTouchEvent(ev);}

[xml layout]

<RelativeLayoutandroid:id="@+id/rlyt_timer_name"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="16dp"android:layout_marginEnd="16dp"android:layout_marginStart="16dp"android:layout_marginTop="8dp"android:orientation="horizontal"><EditTextandroid:id="@+id/et_name"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_centerVertical="true"android:background="@drawable/et_name"android:hint="Please input your name"android:maxLength="15"android:maxLines="1"android:paddingStart="8dp"android:paddingTop="4dp"android:paddingBottom="4dp"android:text="Hello World"android:textColor="@color/module_title_font"android:textCursorDrawable="@null"android:textSize="18sp"></EditText></RelativeLayout>

[et_name.xml]

<?xml version="1.0" encoding="utf-8"?><selectorxmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:state_focused="true"><layer-list><item><shapeandroid:shape="rectangle"><solidandroid:color="@color/module_title_font"/></shape></item><itemandroid:bottom="8dp"><shapeandroid:shape="rectangle"><solidandroid:color="@color/main_content_bg"/></shape></item><itemandroid:bottom="1dp"android:left="1dp"android:right="1dp"><shapeandroid:shape="rectangle"><paddingandroid:left="2dp"android:right="2dp"/><solidandroid:color="@color/main_content_bg"/></shape></item></layer-list></item></selector>

[colors.xml]

<colorname="module_title_font">

相關推薦

AndroidEditText獲得焦點以及失去焦點

【關鍵詞】 EditText 輸入法 獲得焦點 失去焦點 【問題】 預設是居中顯示且非編輯狀態,點選 EditText後文字居左且顯示編輯狀態;編輯狀態時, 點選螢幕其他地方,使其失去焦點;進入介

AndroidEditText 遇到軟鍵盤遮擋底部一點的問題

1.問題描述:   專案中某個佈局檔案(佈局相當複雜)新增EditText輸入框,在清單檔案對應activity中設定屬性   android:windowSoftInputMode="adjustResize"  ,彈出軟體盤不存在遮蓋問題。但是一旦給這個EditText設

AndroidEditText實現搜尋功能,把鍵盤迴車鍵改為搜尋;EditText隱藏游標

1、xml檔案中設定屬性 android:imeOptions="actionSearch"                 android:singleLine="true" 注:android:singleLine 已過期,不過設定為maxlines = 1  不會將回

Android在Activity裏如何獲得另一個xml布局文件的控件

span IT soft sans 一個 text mic blog 布局文件 有時候,我們需要在一個Activity中調用另一個xml布局文件,即非本Activity所綁定的xml布局文件中的控件,這時候就不能直接findViewById,不然會報錯指向空對象,這時就需要

Androiddebug 狀態下其簽名檔案 debug.keystore 相關(如何獲得該檔案,其密碼,獲取其sha1、MD5等)

Eclipse,Android studio 編譯執行 APP 的時候是生成一個 apk 的,它預設的簽名是 debug.keystore 。 有時候我們需要拿到這個簽名檔案,下面就來說說它的預設路徑: Windows下: C:\Users\<使用者名稱>\.A

AndroidEditText輸入金額新增限制及監聽

場景分析: 專案中我們需要在一個EditText控制元件中輸入金額,限制只能輸入數字,可以為小數但保留2位小數,同時監聽EditText一旦發現輸入金額大於0那麼使介面上的提交按鈕可點。 第一步:設定EditText的xml屬性 <EditText andr

android使用部分模擬器出現相容問題Error inflating class EditText

在使用部分模擬器(此處我使用的是逍遙模擬器)會出現很奇怪的錯誤,但在其他手機上或模擬器上沒有出現 解決方法如下: 在style.xml檔案中 <resources> <!

AndroidGreenDao 3.X 結合Volley以及Gson、ImageLoader實現資料儲存

關於GreenDao的優點已經不用再說了,關於第三方資料庫框架有很多,相對於Android系統本身的SQLite以及其它第三方而言,我感覺GreenDao使用更方便,體積小、速度更快。網上大多是關於GreenDao之前版本的介紹,關於3.0+新版的介紹不多。Gr

Android設定EditText為僅輸入數字且最多隻能有兩位數字

需求很簡單,就是要設定一個EditText僅能輸入數字且輸入的數字中小數部分最多可以有兩位。 第一步,很簡單,在XML檔案中,將EditText的inputType設定成NumberDecimal,多餘的屬性我就不寫出來,只寫出主要的部分: <EditText

AndroidAndroid聊天機器人實現

小米 div bottom 曾經 圖靈 .9.png sdn http 歡迎界面 昨天看到一個Android視頻教程講圖靈機器人。那個API接口用起來還是挺方便的,就準備自己動手做一個了。另外自己還使用了高德地圖的API接口用於定位(曾經用過高德的接口,比X度方便) 大

android 自己定義dialog並實現失去焦點(背景透明)的功能

super 效果 andro 教程 his 布局 .com tle near 前言:因為在項目中須要用到更新顯示動畫的需求,所以想到了dialog,自己定義dialog不難。網上教程非常多,可是在實現dialog背景透明的需求時,遇到了一點問題。網上的一些方法在我的機器

AndroidEclipse自己主動編譯NDK/JNI的三種方法

comm tro mman gnu tex android項目 syn color ng- 【Android】Eclipse自己主動編譯NDK/JNI的三種方法 SkySeraph Sep. 18th 2014 Email:[email protec

androiduses-permission和permission具體解釋

.com 新的 -i weight bsp htm fin article 程序 1.<uses-permission>: 官方描寫敘述: If an application needs access to a feature prote

Android自己定義圓形ImageView(圓形頭像 可指定大小)

代碼實現 err float avi rim war tor pos dsm 近期在仿手Q的UI,這裏面常常要用到的就是圓形頭像,看到 在android中畫圓形圖片的幾種辦法 這篇文章,了解了制作這樣的頭像的原理.只是裏面提供的方法另一個不足的地方就是

Android獲取控件的寬和高

height string -a @override parent popu tle post spa 有時候我們須要在Activity的時候獲取控件的寬和高來做一些操作,以下介紹三種獲取寬和高的方式: 1. onWindowFoc

AndroidgetActionBar()為null的解決方法總結

andro 調用 種類 ref code trac page 沒有 stack 前言 在使用 ActionBar的時候,有時候會爆出空指針異常,這是由於應用沒有獲取到 ActionBar 導致的,而導致應用沒有獲取到 ActionBar 的原因比較多。

AndroidUbuntu 16.04搭建Android開發編譯環境

jdk8 per 參考 prot google官網 markdown ins 由於 log 一. 通用Android環境和工具配置 1. 系統更新升級 sudo apt-get update sudo apt-get upgrade 2. 配置ntlmaps代理上網環境

AndroidAndroid六種布局詳解

spec rec 默認 bottom ron ado 居中 右下角 控制 這篇就對LinearLayout、RelativeLayout、自定義ViewGroup、FrameLayout、TableLayout、AbsoluteLayout六種布局進行詳細的講解。 1

Android實現線程異步小技巧

使用 msg xtend util rri wsh ride 執行 java 方式不止一種,這裏使用的是Timer類,創建一個定時器。我們經常需要獲得移動設備端口的顯示屏信息,但是onCreate()方法執行的時候,OnShow()方法不一定執行了,也就是說,在執行Oncr

Android如何實現Android發送短信

ted param close ase find array 短信 red phone 第一種:調用系統短信接口直接發送短信;主要代碼如下: /** * 直接調用短信接口發短信 * @param phoneNumber * @