編輯:關於Android編程
最近在開發浏覽器碰到這麼一個需求:點擊地址欄的時候,需要全選並調出鍵盤,再次點擊就取消全選顯示光標。點擊屏幕除地址欄其他位置時,鍵盤隱藏,隱藏光標。
大部分浏覽器都是這樣的邏輯,這樣可以提高用戶體驗,減少操作。
代碼很簡單,這裡我簡化了邏輯,頁面只有一個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 點擊全選再次點擊取消全選功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!
XML在各種開發中都廣泛應用,Android也不例外。作為承載數據的一個重要角色,如何讀寫XML成為Android開發中一項重要的技能。今天就由我向大家介紹一下在Andr
本節引言: Android入門系列已經寫了大半了,學習了這麼多理論知識,不練下手怎麼行呢? 在實際的開發中我們會遇到更多的問題,
概述:與Android的Animation控件相比,Animator與LayoutAnimator處理後的控件完成動畫效果後不會回復原狀。Animator只使用與View
概述:之前有個需求是寫一個公告,需要無限輪詢效果,第一時間想到的是用viewpager實現。網上一看,幾乎都是用viewpager實現的。於是我也手動實現了一下,發現其實