【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(){
@Override
publicvoid 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(){
@Override
publicvoid run(){
InputMethodManager manager =(InputMethodManager) etName.getContext().getSystemService(
Context.INPUT_METHOD_SERVICE);
manager.showSoftInput(etName,0);
}
});
// 游標置於文字最後
etName.setSelection(etName.getText().length());
}
@Override
publicvoid onClick(View v){
switch(v.getId()){
case R.id.et_name:
// 設定 EditText 的點選事件(如果處於編輯狀態則,不做操作;否則,獲取焦點進入可編輯狀態);
EditText et =(EditText)v;
if(!et.isCursorVisible()){
etNameGetFocus(et);
}
break;
}
}
// 點選螢幕其他地方,使 etName 失去焦點(EditText)
@Override
publicboolean 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]
<RelativeLayout
android: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">
<EditText
android: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">
相關推薦
【Android】EditText獲得焦點以及失去焦點
【關鍵詞】
EditText 輸入法 獲得焦點 失去焦點
【問題】
預設是居中顯示且非編輯狀態,點選 EditText後文字居左且顯示編輯狀態;編輯狀態時, 點選螢幕其他地方,使其失去焦點;進入介
【Android】EditText 遇到軟鍵盤遮擋底部一點的問題
1.問題描述: 專案中某個佈局檔案(佈局相當複雜)新增EditText輸入框,在清單檔案對應activity中設定屬性 android:windowSoftInputMode="adjustResize" ,彈出軟體盤不存在遮蓋問題。但是一旦給這個EditText設
【Android】EditText實現搜尋功能,把鍵盤迴車鍵改為搜尋;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,不然會報錯指向空對象,這時就需要
【Android】debug 狀態下其簽名檔案 debug.keystore 相關(如何獲得該檔案,其密碼,獲取其sha1、MD5等)
Eclipse,Android studio 編譯執行 APP 的時候是生成一個 apk 的,它預設的簽名是 debug.keystore 。
有時候我們需要拿到這個簽名檔案,下面就來說說它的預設路徑:
Windows下:
C:\Users\<使用者名稱>\.A
【Android】對EditText輸入金額新增限制及監聽
場景分析:
專案中我們需要在一個EditText控制元件中輸入金額,限制只能輸入數字,可以為小數但保留2位小數,同時監聽EditText一旦發現輸入金額大於0那麼使介面上的提交按鈕可點。
第一步:設定EditText的xml屬性
<EditText
andr
【android】使用部分模擬器出現相容問題Error inflating class EditText
在使用部分模擬器(此處我使用的是逍遙模擬器)會出現很奇怪的錯誤,但在其他手機上或模擬器上沒有出現
解決方法如下:
在style.xml檔案中
<resources>
<!
【Android】GreenDao 3.X 結合Volley以及Gson、ImageLoader實現資料儲存
關於GreenDao的優點已經不用再說了,關於第三方資料庫框架有很多,相對於Android系統本身的SQLite以及其它第三方而言,我感覺GreenDao使用更方便,體積小、速度更快。網上大多是關於GreenDao之前版本的介紹,關於3.0+新版的介紹不多。Gr
【Android】設定EditText為僅輸入數字且最多隻能有兩位數字
需求很簡單,就是要設定一個EditText僅能輸入數字且輸入的數字中小數部分最多可以有兩位。
第一步,很簡單,在XML檔案中,將EditText的inputType設定成NumberDecimal,多餘的屬性我就不寫出來,只寫出主要的部分:
<EditText
【Android】Android聊天機器人實現
小米 div bottom 曾經 圖靈 .9.png sdn http 歡迎界面
昨天看到一個Android視頻教程講圖靈機器人。那個API接口用起來還是挺方便的,就準備自己動手做一個了。另外自己還使用了高德地圖的API接口用於定位(曾經用過高德的接口,比X度方便)
大
android 自己定義dialog並實現失去焦點(背景透明)的功能
super 效果 andro 教程 his 布局 .com tle near
前言:因為在項目中須要用到更新顯示動畫的需求,所以想到了dialog,自己定義dialog不難。網上教程非常多,可是在實現dialog背景透明的需求時,遇到了一點問題。網上的一些方法在我的機器
【Android】Eclipse自己主動編譯NDK/JNI的三種方法
comm tro mman gnu tex android項目 syn color ng-
【Android】Eclipse自己主動編譯NDK/JNI的三種方法
SkySeraph Sep. 18th 2014
Email:[email protec
【android】uses-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
【Android】getActionBar()為null的解決方法總結
andro 調用 種類 ref code trac page 沒有 stack
前言
在使用 ActionBar的時候,有時候會爆出空指針異常,這是由於應用沒有獲取到 ActionBar 導致的,而導致應用沒有獲取到 ActionBar 的原因比較多。
【Android】Ubuntu 16.04搭建Android開發編譯環境
jdk8 per 參考 prot google官網 markdown ins 由於 log 一. 通用Android環境和工具配置
1. 系統更新升級
sudo apt-get update
sudo apt-get upgrade
2. 配置ntlmaps代理上網環境
【Android】Android六種布局詳解
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
* @