在安卓項目開發(fā)中,我們經(jīng)常會遇到一些對EditText的處理問題,包括對EditText的焦點的改變,我們需要結(jié)合實際情況對其進行獲得焦點,打開輸入法和失去焦點,關閉輸入法的交互操作。
創(chuàng)新互聯(lián)建站是一家專業(yè)提供安龍企業(yè)網(wǎng)站建設,專注與網(wǎng)站設計、成都網(wǎng)站建設、HTML5建站、小程序制作等業(yè)務。10年已為安龍眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設公司優(yōu)惠進行中。
我在這里介紹一種簡單的處理方式,希望在看了我的博文之后對您的需求有所幫助。
上圖,首次進入界面
上圖,點擊輸入框
上圖,點擊確定按鈕
首先,編寫布局文件:
layout_edittext_focus.xml
核心代碼:
給EditText所在的父類布局添加如下屬性:
android:focusable="true" android:focusableInTouchMode="true"
將焦點轉(zhuǎn)移到EditText的父類布局上,EditText在初始化的時候就不會獲取到焦點
然后,編寫java代碼:
EditTextFocusActivity.java
package com.example.listdelectdemo; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.TextView; /** * EditText焦點處理頁 */ public class EditTextFocusActivity extends Activity implements OnClickListener { /** * 輸入框 */ private EditText focus_editText_input; /** * 確定按鈕 */ private TextView focus_textView_ok; /** * 說明 */ private TextView focus_textView_explain; /** * 輸入法管理器 */ private InputMethodManager mInputMethodManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_edittext_focus); initUtil(); initView(); } /** * 初始化必須工具 */ private void initUtil() { //初始化輸入法 mInputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); } /** * 控件初始化 */ private void initView() { focus_editText_input = (EditText) findViewById(R.id.focus_editText_input); focus_editText_input.setOnClickListener(this); focus_textView_ok = (TextView) findViewById(R.id.focus_textView_ok); focus_textView_ok.setOnClickListener(this); focus_textView_explain = (TextView) findViewById(R.id.focus_textView_explain); String explain = "說明:\n\n1.首次進入界面時,EditText不會獲取焦點,沒有光標\n\n" + "2.當點擊EditText時,EditText重新獲取焦點,光標出現(xiàn),并吊起輸入法\n\n" + "3.輸入完成后,點擊確定,EditText失去焦點,失去光標并關閉輸入法\n\n" + "4.重新點擊EditText時,即可重復操作"; focus_textView_explain.setText(explain); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.focus_editText_input://輸入框 focus_editText_input.setFocusable(true);//設置輸入框可聚集 focus_editText_input.setFocusableInTouchMode(true);//設置觸摸聚焦 focus_editText_input.requestFocus();//請求焦點 focus_editText_input.findFocus();//獲取焦點 mInputMethodManager.showSoftInput(focus_editText_input, InputMethodManager.SHOW_FORCED);// 顯示輸入法 break; case R.id.focus_textView_ok://確定按鈕 focus_editText_input.setFocusable(false);//設置輸入框不可聚焦,即失去焦點和光標 if (mInputMethodManager.isActive()) { mInputMethodManager.hideSoftInputFromWindow(focus_editText_input.getWindowToken(), 0);// 隱藏輸入法 } break; } } }
核心代碼:
在EditText的點擊事件中添加如下代碼:
focus_editText_input.setFocusable(true);//設置輸入框可聚集 focus_editText_input.setFocusableInTouchMode(true);//設置觸摸聚焦 focus_editText_input.requestFocus();//請求焦點 focus_editText_input.findFocus();//獲取焦點
作用在于讓EditText在點擊的時候獲取到焦點。
然后對輸入法做顯示處理。
mInputMethodManager.showSoftInput(focus_editText_input, InputMethodManager.SHOW_FORCED);// 顯示輸入法
要使EditText失去焦點,只需要在其他的監(jiān)聽事件中添加如下代碼,設置不可聚集,關閉輸入法即可:
focus_editText_input.setFocusable(false);//設置輸入框不可聚焦,即失去焦點和光標 if (mInputMethodManager.isActive()) { mInputMethodManager.hideSoftInputFromWindow(focus_editText_input.getWindowToken(), 0);// 隱藏輸入法 }
這就是一個簡單EditText焦點改變處理方法。
文章中存在的某些不足之處,還望提出指導性意見。