这篇文章主要介绍了 Android 中使用 EditText 点击全选再次点击取消全选功能,非常不错,具有参考借鉴价值,需要的朋友参考下吧
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
最近在开发浏览器碰到这么一个需求:点击地址栏的时候,需要全选并调出键盘,再次点击就取消全选显示光标。点击屏幕除地址栏其他位置时,键盘隐藏,隐藏光标。
大部分浏览器都是这样的逻辑,这样可以提高用户体验,减少操作。
代码很简单,这里我简化了逻辑,页面只有一个 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 点击全选再次点击取消全选功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 PHPERZ 网站的支持!
来源: