1. 程式人生 > >Android實現監聽EditText編輯完成事件

Android實現監聽EditText編輯完成事件

   EditText中並沒有實現該功能的程式碼,所以我們只能另外想方法了,具體的實現思路有兩個:一是通過監聽鍵盤的彈起,二是通過監聽EditText輸入變化然後handler傳送延遲訊息來實現。

   通過鍵盤的彈起來實現該功能比較麻煩,不考慮其他情況在佈局最簡單的情況下,程式碼實現如下:

public class MainActivity extends AppCompatActivity implements View.OnLayoutChangeListener {

    private LinearLayout layout;
@Override
protected void 
onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); layout = (LinearLayout) findViewById(R.id.ll); layout.addOnLayoutChangeListener(this); } @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int
oldLeft, int oldTop, int oldRight, int oldBottom) { Log.e("TAG", "onLayoutChange: bottom" + bottom + " ---- oldBottom" + oldBottom); if(bottom > oldBottom && oldBottom != 0){ //鍵盤收起 Log.e("TAG", "onLayoutChange: 鍵盤被收起了"); //執行相關操作 } } }
<activity android:name=
".MainActivity" android:windowSoftInputMode="stateAlwaysHidden|adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/ll"
android:orientation="vertical"
tools:context="com.test.keyboardactivity.MainActivity">
    <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
    <EditText
android:layout_width="match_parent"
android:layout_height="200dp" />
</LinearLayout>

上面描述的是佈局最簡單的情況,所以這種實現方式比較複雜,下面介紹一下通過傳送延遲訊息來實現的方法,
程式碼如下:
public class MainActivity extends AppCompatActivity implements View.OnLayoutChangeListener {

    private LinearLayout layout;
    private EditText editText;
    private static Handler handler = new Handler();
    private long TIME_LISTEN = 2000;//設定2秒的延遲
private Runnable runnable = new Runnable() {
        @Override
public void run() {
            runOnUiThread(new Runnable() {
                @Override
public void run() {
                    doSomeThing(editText.getText().toString());
}
            });
}
    };
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
layout = (LinearLayout) findViewById(R.id.ll);
layout.addOnLayoutChangeListener(this);
editText = (EditText) findViewById(R.id.et);
editText.addTextChangedListener(new TextWatcher() {
            @Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                handler.removeCallbacks(runnable);
}

            @Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
public void afterTextChanged(Editable s) {
                if (!"".equals(s.toString().trim())) {
                    handler.postDelayed(runnable, TIME_LISTEN);
}
            }
        });
}

    //方法一:
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
        Log.e("TAG", "onLayoutChange: bottom" + bottom + " ---- oldBottom" + oldBottom);
        if (bottom > oldBottom && oldBottom != 0) {
            //鍵盤收起
Log.e("TAG", "onLayoutChange:  鍵盤被收起了");
//執行相關操作
String s = editText.getText().toString();
//            if(!"".equals(s.trim())){
//                doSomeThing(s);
//            }
}
    }


    //執行操作
private void doSomeThing(String s) {
        Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
}
}

相關推薦

Android實現EditText編輯完成事件

   EditText中並沒有實現該功能的程式碼,所以我們只能另外想方法了,具體的實現思路有兩個:一是通過監聽鍵盤的彈起,二是通過監聽EditText輸入變化然後handler傳送延遲訊息來實現。  

android】:android實現多個按鈕事件

直接擼程式碼: 我有四個按鈕,下面的程式碼演示瞭如何將多個按鈕用一個事件監聽 在onCreate函式裡面 Button button1 = (Button)findViewBy

android 通過edittext實現button的點擊事件

監聽 edittext 如果你沒有接第三方的輸入設備,那麽點擊按鈕只需找到你的button然後:button.performClick();就可以了那麽如果你用到第三方輸入法,有些時候監聽就沒有這麽好使了:以下場景為:外接輸入服務,直接給我丟一串字符,我拿到字符後執行按鈕事件代碼如下: editTe

AndroidEdittext控制元件於鍵盤中按下確認事件OnEditorActionListener

背景 Edittext作為一個常見控制元件,很多時候都有監聽鍵盤確認就執行指定邏輯的需求 實現 這個很簡單嘛,Edittext自帶有鍵盤按下事件監聽,就是OnEditorActionListener了,用就對了 問題 使用中發現,的確可以監聽鍵盤確認事

Android實現控制元件點選事件

Android實現監聽控制元件點選事件 引言          這篇文章主要想寫一下Android實現監聽點選事件的幾種方法,Activity和Fragment實現起來有些方法上會有些不同,這裡也略做介紹。     &nbs

android 實現簡訊接收並將當前位置傳送出去

1、獲取定位地址,這裡使用高德定位,從官網下載定位的jar包AMap_Location_V3.50_20170731.jar包然後在build.gradlecompile files('libs/AMap_Location_V3.5.0_20170731.jar')然後在許

【Redis系列】Spring boot實現Redis key失效事件

> talk is cheap, show me the code. ## 一、開啟Redis key過期提醒 - 方式二:修改配置檔案 `redis.conf` ``` # 預設 notify-keyspace-events "" notify-keyspace-events Ex

Android 類似淘寶 電商 搜尋功能,軟鍵盤搜尋事件,延遲自動搜尋,以及時間排序的搜尋歷史記錄的實現

最近跳槽去新公司,接受的第一個任務是在 一個電商模組的搜尋功能以及搜尋歷史記錄的實現。 需求和淘寶等電商的功能大體差不多,最上面一個搜尋框,下面顯示搜尋歷史記錄。在EditText裡輸入要搜尋的關鍵字後,按軟鍵盤的搜尋按鍵/延遲xxxxms後自動搜尋。然後將搜尋的內容展示給

android三種方法實現事件

Android實現監聽事件的四種方式(匿名內部內實現,外部類實現,介面實現,繫結到標籤) 1. 使用匿名內部類的方式實現監聽事件 使用方法: 首先為要實現監聽的物件繫結監聽器,例如為一個Button物件繫結一個監聽器botton.setOnClickListener();。

Android專案類似淘寶 電商 搜尋功能,軟鍵盤搜尋事件,延遲自動搜尋,以及時間排序的搜尋歷史記錄的實現

最近跳槽去新公司,接受的第一個任務是在 一個電商模組的搜尋功能以及搜尋歷史記錄的實現。 需求和淘寶等電商的功能大體差不多,最上面一個搜尋框,下面顯示搜尋歷史記錄。在EditText裡輸入要搜尋的關鍵字後,按軟鍵盤的搜尋按鍵/延遲xxxxms後自動搜尋。然後將搜尋

Android完全自定義控制元件並且實現事件

本篇文章帶來Android的完全自定義控制元件。載體是自定義一個開關的控制元件,並且能夠響應事件,首先我們先創一個專案,名字就叫ToggleView,修改MainActivity public class MainActivity extends Acti

android 元件構建完成

//有時候要獲取一個元件的位置總是返回0,原因是元件還沒繪製完成,該方法就是等待元件構建完成回撥 mView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

Android如何藍芽耳機的按鍵事件

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

如何實現android來電並生成懸浮窗體提示

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

原生JavaScript實現移動端上下左右滑動事件

/** * @author W.Dong * @date 2018/10/26 * @Description: 監聽觸控的方向 */ var EventUtil = { addHandler: function (element, type, handler) { if

Android事件

案例一 事件監聽(三種寫法) 1.1 標籤上直接繫結監聽方法 public void xxx(View view) //第一種 public void xxx(View view) 1.2 建立監聽器物件,元件再繫結監聽器物件 1.2.1 匿名內部類 1.2

[Xcode10 實際操作]七、檔案與資料-(6 )通過通知中心,實現和處理程式退出事件的功能

本文將演示通過通知中心,實現監聽和處理程式退出事件的功能。在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 1 import UIKit 2 3 class ViewController: UIViewController { 4 5

[Xcode10 實際操作]七、文件與數據-(6 )通過通知中心,實現和處理程序退出事件的功能

英雄 idl ide active xcod end 控制 .sh Once 本文將演示通過通知中心,實現監聽和處理程序退出事件的功能。在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】 1 import UIKit 2 3

xamarin android如何單擊事件

在xamarin android單擊事件是最基礎的事情,看過菜鳥上的android教程時,java寫的都是監聽事件,為一個按鈕,單選按鈕、多選按鈕的單擊事件有三種,前面兩種用的非常普遍,也很簡易,我這裡主要就是寫一下xamarin android中的監聽事件。 1.使用委託