Android 中使用EditText 点击全选再次点击取消全选功能
最近在开发浏览器碰到这么一个需求:点击地址栏的时候,需要全选并调出键盘,再次点击就取消全选显示光标。点击屏幕除地址栏其他位置时,键盘隐藏,隐藏光标。
大部分浏览器都是这样的逻辑,这样可以提高用户体验,减少操作。
代码很简单,这里我简化了逻辑,页面只有一个EditText。
布局文件如下:里面有两个属性需要注意
android:focusable="true" android:selectAllOnFocus="true"
完整布局文件
<?xmlversion="1.0"encoding="utf-8"?> <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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.edittexttest.MainActivity"> <EditText android:id="@+id/edit" android:layout_width="match_parent" android:layout_height="wrap_content" android:focusable="true" android:selectAllOnFocus="true" /> </RelativeLayout>
**mainactivity.java
packagecom.example.edittexttest;
importandroid.content.Context;
importandroid.support.v7.app.AppCompatActivity;
importandroid.os.Bundle;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.inputmethod.InputMethodManager;
importandroid.widget.EditText;
importandroid.widget.TextView;
publicclassMainActivityextendsAppCompatActivity{
privateEditTexteditText;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText=(EditText)findViewById(R.id.edit);
editText.setText("clicktoselectall");
editText.clearFocus();
editText.setFocusableInTouchMode(false);
editText.setOnTouchListener(newView.OnTouchListener(){
@Override
publicbooleanonTouch(Viewview,MotionEventmotionEvent){
if(motionEvent.getAction()==MotionEvent.ACTION_UP){
editText.setFocusableInTouchMode(true);
editText.requestFocus();
editText.setText("clicktoselectall");
editText.selectAll();
}
returnfalse;
}
});
}
@Override
publicbooleandispatchTouchEvent(MotionEventev){
if(ev.getAction()==MotionEvent.ACTION_DOWN){
Viewv=getCurrentFocus();
if(isShouldHideInput(v,ev)){
InputMethodManagerimm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm.isActive()){
imm.hideSoftInputFromWindow(v.getWindowToken(),0);
}
}
returnsuper.dispatchTouchEvent(ev);
}
//Necessary
if(getWindow().superDispatchTouchEvent(ev)){
returntrue;
}
editText.clearFocus();
editText.setFocusableInTouchMode(false);
returnonTouchEvent(ev);
}
publicbooleanisShouldHideInput(Viewv,MotionEventevent){
if(v!=null&&(vinstanceofEditText)){
int[]leftTop={0,0};
//getlocationofTextView
v.getLocationInWindow(leftTop);
intleft=leftTop[0];
inttop=leftTop[1];
intbottom=top+v.getHeight();
intright=left+v.getWidth();
if(event.getX()>left&&event.getX()<right
&&event.getY()>top&&event.getY()<bottom){
returnfalse;
}else{
returntrue;
}
}
returnfalse;
}
}
需要注意两个代码段
editText.setFocusableInTouchMode(true); editText.requestFocus();
以上所述是小编给大家介绍的Android中使用EditText点击全选再次点击取消全选功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!