软件编程
位置:首页>> 软件编程>> Android编程>> Android 中使用EditText 点击全选再次点击取消全选功能

Android 中使用EditText 点击全选再次点击取消全选功能

作者:尹小贱  发布时间:2023-09-08 00:08:44 

标签:android,edittext,全选

最近在开发浏览器碰到这么一个需求:点击地址栏的时候,需要全选并调出键盘,再次点击就取消全选显示光标。点击屏幕除地址栏其他位置时,键盘隐藏,隐藏光标。

大部分浏览器都是这样的逻辑,这样可以提高用户体验,减少操作。

代码很简单,这里我简化了逻辑,页面只有一个EditText。

布局文件如下:里面有两个属性需要注意


android:focusable="true"
android:selectAllOnFocus="true"

完整布局文件


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns: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


package com.example.edittexttest;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
 private EditText editText;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   editText = (EditText) findViewById(R.id.edit);
   editText.setText("click to select all");
   editText.clearFocus();
   editText.setFocusableInTouchMode(false);
   editText.setOnTouchListener(new View.OnTouchListener() {
     @Override
     public boolean onTouch(View view, MotionEvent motionEvent) {
       if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
         editText.setFocusableInTouchMode(true);
         editText.requestFocus();
         editText.setText("click to select all");
         editText.selectAll();
       }
       return false;
     }
   });
 }
 @Override
 public boolean dispatchTouchEvent(MotionEvent ev) {
   if (ev.getAction() == MotionEvent.ACTION_DOWN) {
     View v = getCurrentFocus();
     if (isShouldHideInput(v, ev)) {
       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
       if (imm.isActive()) {
         imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
       }
     }
     return super.dispatchTouchEvent(ev);
   }
   // Necessary
   if (getWindow().superDispatchTouchEvent(ev)) {
     return true;
   }
   editText.clearFocus();
   editText.setFocusableInTouchMode(false);
   return onTouchEvent(ev);
 }
 public boolean isShouldHideInput(View v, MotionEvent event) {
   if (v != null && (v instanceof EditText)) {
     int[] leftTop = { 0, 0 };
     //get location of TextView
     v.getLocationInWindow(leftTop);
     int left = leftTop[0];
     int top = leftTop[1];
     int bottom = top + v.getHeight();
     int right = left + v.getWidth();
     if (event.getX() > left && event.getX() < right
         && event.getY() > top && event.getY() < bottom) {
       return false;
     } else {
       return true;
     }
   }
   return false;
 }
}

需要注意两个代码段


editText.setFocusableInTouchMode(true);
editText.requestFocus();

以上所述是小编给大家介绍的Android 中使用EditText 点击全选再次点击取消全选功能网站的支持!

来源:http://blog.csdn.net/qq_30835655/article/details/53538198

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com