安卓开发中EditText的焦点改变处理(获取焦点和失去焦点交互变化)
在安卓项目开发中,我们经常会遇到一些对EditText的处理问题,包括对EditText的焦点的改变,我们需要结合实际情况对其进行获得焦点,打开输入法和失去焦点,关闭输入法的交互操作。
我在这里介绍一种简单的处理方式,希望在看了我的博文之后对您的需求有所帮助。
上图,首次进入界面
上图,点击输入框
上图,点击确定按钮
首先,编写布局文件:
layout_edittext_focus.xml
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:id="@+id/focus_linear_root"android:layout_width="match_parent"android:layout_height="50dp"android:layout_marginTop="50dp"android:focusable="true"android:focusableInTouchMode="true"android:orientation="horizontal"android:paddingBottom="5dp"android:paddingLeft="10dp"android:paddingRight="10dp"><EditTextandroid:id="@+id/focus_editText_input"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:hint="请输入"android:paddingLeft="10dp"android:singleLine="true"/><TextViewandroid:id="@+id/focus_textView_ok"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginLeft="15dp"android:layout_marginRight="5dp"android:gravity="center"android:text="确定"android:textSize="18sp"/></LinearLayout><TextViewandroid:id="@+id/focus_textView_explain"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/focus_linear_root"android:padding="20dp"android:textSize="11sp"/></RelativeLayout>
核心代码:
给EditText所在的父类布局添加如下属性:
android:focusable="true"android:focusableInTouchMode="true"
将焦点转移到EditText的父类布局上,EditText在初始化的时候就不会获取到焦点
然后,编写java代码:
EditTextFocusActivity.java
packagecom.example.listdelectdemo;importandroid.os.Bundle;importandroid.app.Activity;importandroid.content.Context;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.view.inputmethod.InputMethodManager;importandroid.widget.EditText;importandroid.widget.TextView;/***EditText焦点处理页*/publicclassEditTextFocusActivityextendsActivityimplementsOnClickListener{/***输入框*/privateEditTextfocus_editText_input;/***确定按钮*/privateTextViewfocus_textView_ok;/***说明*/privateTextViewfocus_textView_explain;/***输入法管理器*/privateInputMethodManagermInputMethodManager;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.layout_edittext_focus);initUtil();initView();}/***初始化必须工具*/privatevoidinitUtil(){//初始化输入法mInputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);}/***控件初始化*/privatevoidinitView(){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);Stringexplain="说明:\n\n1.首次进入界面时,EditText不会获取焦点,没有光标\n\n"+"2.当点击EditText时,EditText重新获取焦点,光标出现,并吊起输入法\n\n"+"3.输入完成后,点击确定,EditText失去焦点,失去光标并关闭输入法\n\n"+"4.重新点击EditText时,即可重复操作";focus_textView_explain.setText(explain);}@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.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;caseR.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失去焦点,只需要在其他的监听事件中添加如下代码,设置不可聚集,关闭输入法即可:
focus_editText_input.setFocusable(false);//设置输入框不可聚焦,即失去焦点和光标if(mInputMethodManager.isActive()){mInputMethodManager.hideSoftInputFromWindow(focus_editText_input.getWindowToken(),0);//隐藏输入法}
这就是一个简单EditText焦点改变处理方法。
文章中存在的某些不足之处,还望提出指导性意见。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。