【Android】EditText使用和監聽

在這里插入圖片描述
三三想成為安卓糕手

一:用戶登錄校驗

1:EditText文本輸入框

    <EditTextandroid:id="@+id/et_user_name"android:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="number"android:maxLines="16"android:hint="請輸入用戶名" /><EditTextandroid:id="@+id/et_password"android:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="textPassword"android:maxLength="16"android:hint="請輸入密碼" />

2:hint提示信息

android:hint="請輸入用戶名" />

hint 提示線索

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

3:inputType輸入類型

兄弟太吊了 android:inputType="number"

設置用戶名的輸入類型為number,那么調用出來的鍵盤如下左圖所示(為數字鍵盤),輸入框不接收輸入非數字的內容

設置密碼的輸入類型為textPassword,那么該屏幕界面會被隱藏,并且做了一個加密的處理,還有不能被截圖,默認輸入法是數字帶字母

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

輸入框還可以接收很多種類型

文本,郵件地址,電話,日期時間等等

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

4:maxLines位數限制

android:maxLength="16"這玩意好像對用戶名位數限制不咋管用啊;對密碼到是管用的很

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

5:用戶名和密碼校驗

實現效果

左圖:用戶名和密碼正確但是沒有勾選協議,點擊登錄

右圖:用戶名正確,密碼錯誤,點擊登錄

這里的情況還有好幾種,上述代碼基本都能夠攔截到

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

    //成員變量private EditText etUserName;private EditText etPassword;
initEditText();
//這個方法的調用應該在登錄監聽器觸發之前,主要作用就是完成初始化,避免空指針異常
private void initEditText(){etUserName = findViewById(R.id.et_user_name);etPassword = findViewById(R.id.et_password);}
		/*** 監聽登錄按鈕的狀態**/Button loginButton = findViewById(R.id.btn_login);loginButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {boolean checked = cbArgreement.isChecked();if(!checked){Toast.makeText(CheckBoxActivity.this, "請勾選協議", Toast.LENGTH_SHORT).show();}String userName = etUserName.getText().toString().trim();String passWord = etPassword.getText().toString().trim();//點擊登錄按鈕,檢測用戶名和密碼都正確并且勾選了協議,此時才會進行頁面跳轉。if(userName.equals("admin") && passWord.equals(123456)){//這句代碼是在是太ex了兄弟,我完全是蒙蒙的狀態啊xd,窩里哇瓦力哇一袋米扛幾樓//判斷勾選了協議,點擊登錄按鈕,進行頁面跳轉startActivity(new Intent(CheckBoxActivity.this,SecondActivity.class));}else{//準備彈窗提示Toast.makeText(CheckBoxActivity.this, "用戶名與密碼不匹配", Toast.LENGTH_SHORT).show();}}});

.trim()方法屬于String類中的,可以去除字符串兩端的空白字符(包括空格,制表符,換行符等)

二:文本變化監聽

0:監聽器的生命周期

這里是一個非常大誤區,這個監聽器的銷毀并不會隨著方法的結束而結束。

一旦監聽器注冊完成,它就會一直保持活躍狀態,直到滿足以下條件之一:

  • EditText 控件被銷毀:在 Activity 的onDestroy()方法執行之后。
  • 手動移除監聽器:調用etUserName.removeTextChangedListener(...)方法。

1:代碼

這里主要對用戶名設置文本監聽

	private void initEditText(){etUserName = findViewById(R.id.et_user_name);etPassword = findViewById(R.id.et_password);etUserName.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {Log.e(TAG,"CharSequence s" + s +  "," + " int start" + start +"," + " int count" + count + "," + "int after" + after);}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {Log.e(TAG,"CharSequence s" + s +  "," + " int start" + start +"," + " int count" + count + "," + "int after" + count);}@Overridepublic void afterTextChanged(Editable s) {Log.e(TAG,"afterTextChanged:" + s.toString());}});}

我們設置一個類TAG成員變量方便查看日志(快捷方式logt)

private static final String TAG = "CheckBoxActivity";//自己設置TAG名稱

2:結果和日志分析

我們在用戶名輸入框中輸入admin

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

查看日志

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

刪掉下標為2的字符m

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

查看日志

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

注:以下方法的分析只針對刪除“admin”中字符‘m’的操作

3:beforeTextChanged

文本發生變化前被調用,有四個參數

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {Log.e(TAG,"CharSequence s" + s +  "," + " int start" + start +"," + " int count" + count + "," + "int after" + after);}

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

CharSequence s

代表文本變化前(初始內容)

EditText 里原本的文字內容為“admin”,那s = admin

int start

表示文本中即將發生變化的起始位置索引

刪除了“m”,索引位置為 2,start 就是 2 (這里替換操作同理)

int count

start 位置開始, “要被‘干掉’的舊字符數量”

m被干掉了,所以count = 1

提問:如果新字符和舊字符相同呢?

只要文本框的內容==經歷了 “替換” 過程(無論替換前后內容是否一致),方法都會被觸發,內部邏輯正常計算,==

int after

代表文本變化后,從 start 位置開始新增的字符數量

沒有新增內容 after = 0

4:onTextChanged

文本變化時觸發(如用戶輸入過程中)

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {Log.e(TAG,"CharSequence s" + s +  "," + " int start" + start +"," + " int count" + count + "," + "int after" + count);}

前兩個參數與beforeTextChanged參數相同

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

CharSequence s

代表文本變化時(初始內容)

EditText 里原本的文字內容為“adin”,那s = adin

int start

表示文本中即將發生變化的起始位置索引

刪除了“m”,索引位置為 2,start 就是 2 (這里替換操作同理)

int before

原文本被替換的長度,其實就是beforeTextChanged中的count(被干掉的數量)

這里是刪除操作,也就是m被替換成了空,所以bfore = 1

int count

代表變化后,從 start 位置新增的字符數量

延續上面例子,若刪掉 “m”,沒有新增操作,那count = 0

5:afterTextChanged方法

文本變化后的最終完整內容

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

@Override
public void afterTextChanged(Editable s) {Log.e(TAG,"afterTextChanged:" + s.toString());
}

6:總結

方法觸發時機參數含義
beforeTextChanged文本變化前觸發(如用戶輸入前)。- s:變化前的文本。
- start:變化開始的位置。
- count:即將被替換的原文本長度。
- after:新文本的長度。
onTextChanged文本變化時觸發(如用戶輸入過程中)。- s:變化后的文本。
- start:變化開始的位置。
- before:原文本被替換的長度(即 beforeTextChanged 中的 count)。
- count:新插入的文本長度(即 beforeTextChanged 中的 after)。
afterTextChanged文本變化后-Editable s這里的 s 代表 文本變化后的最終完整內容 。類型可以轉化為字符串類型

應用場景:哇嘎嘎嘎,實時獲取輸入的內容進行搜索

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91572.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91572.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91572.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL 中根據當前時間動態計算日期范圍

在 SQL 中寫“動態時間”通常是指根據當前時間動態計算日期范圍&#xff0c;而不是寫死固定日期。以下是幾種常見寫法&#xff08;以 SQL Server / MySQL / PostgreSQL 為例&#xff09;&#xff1a;1. 獲取當前時間-- SQL Server SELECT GETDATE() AS now-- MySQL SELECT NOW(…

react-redux 類組件的 connect

store 目錄下 store/reducer.js import * as actionTypes from ./constantsconst initalState {counter: 100,banners: [],recommends: [] }/*** 定義reducer函數&#xff1a;純函數* param 參數一&#xff1a;store中目前保存的state* param 參數二&#xff1a;通過 dispatch…

數據分布是如何影響目標檢測精度

文章目錄一、研究背景與目標模型效果提升數據集優化二、研究問題明細各方向的關聯性與核心邏輯1. 高質量數據集的高效篩選與主動學習應用2. 基于推理結果的數據補充與增強方向優化3. 多類別場景下目標尺度與模型精度的關聯性4. 損失函數與數據增強對精度的量化影響5. 目標類型專…

高效批量轉換Java接口為MCP服務:降低重復勞動的實戰指南

高效批量轉換Java接口為MCP服務:降低重復勞動的實戰指南 在AI大模型技術飛速發展的今天,企業需要將現有Java接口快速適配為模型計算協議(MCP,Model Calculation Protocol)服務,以便與大模型生態無縫對接。然而,手動逐個轉換接口不僅耗時耗力,還容易因人為疏忽導致錯誤…

Eclipse Debug 配置指南

Eclipse Debug 配置指南 引言 Eclipse 作為一款功能強大的集成開發環境(IDE),在Java開發者中享有盛譽。在開發過程中,調試功能是必不可少的。本文將詳細介紹如何在Eclipse中配置調試環境,以便更高效地進行代碼調試。 1. 開發環境準備 在開始配置Eclipse調試環境之前,…

modelscope ProxyError: HTTPSConnectionPool(host=‘www.modelscope.cn‘, port=443)

目錄 Windows CMD&#xff1a; powershell Linux / macOS / Git Bash&#xff1a; win11 設置全局系統變量代理 modelscope ProxyError: HTTPSConnectionPool(hostwww.modelscope.cn, port443) 報錯&#xff1a; requests.exceptions.ProxyError: HTTPSConnectionPool(host…

Python學習之——序列化與反序列化

Python學習之——序列化與反序列化yaml & json & xmlyamljsonPython自帶Json庫xml一個綜合示例pickle & msgpack & marshalpicklemsgpackmarshal自定義導出py文件一個導出py文件的示例yaml & json & xml YAML & JSON &XML 如何選擇 yaml Py…

設計模式之代理模式:掌控對象訪問的優雅之道

代理模式&#xff1a;掌控對象訪問的優雅之道 引言&#xff1a;設計模式的重要性 在軟件開發中&#xff0c;設計模式是解決常見問題的可復用方案&#xff0c;它們如同建筑師的藍圖&#xff0c;為開發者提供了經過驗證的最佳實踐。在23種經典設計模式中&#xff0c;代理模式因其…

sqli-labs靶場通關筆記:第18-19關 HTTP頭部注入

第18關 User-Agent注入登錄正確的用戶名密碼&#xff0c;它會將User-Agent的信息回顯到頁面上。猜測UA頭可能存在注入點。利用bp抓包&#xff0c;在UA頭后面加一個單引號&#xff0c;發現報錯了。觀察報錯信息&#xff0c;顯示nearxx,admin)&#xff0c;推測后面應該還有兩個參…

基于按鍵開源MultiButton框架深入理解代碼框架(三)(指針的深入理解與應用)

文章目錄3、分析代碼3.3 按鍵的插入3.4 按鍵的刪除3.5 繼續分析狀態機核心理解4、寫在最后的總結5、思想感悟篇6、慈悲不渡自絕人3、分析代碼 3.3 按鍵的插入 // Button handle list headstatic Button* head_handle NULL;/*** brief Start the button work, add the handle…

ACOUSLIC-AI挑戰報告:基于低收入國家盲掃超聲數據的胎兒腹圍測量|文獻速遞-醫學影像算法文獻分享

Title題目ACOUSLIC-AI challenge report: Fetal abdominal circumferencemeasurement on blind-sweep ultrasound data from low-income countriesACOUSLIC-AI挑戰報告&#xff1a;基于低收入國家盲掃超聲數據的胎兒腹圍測量01文獻速遞介紹胎兒生長受限&#xff08;FGR&#xf…

集群聊天服務器各個類進行詳解

1.dh.h類定義概要類名&#xff1a; MySQL功能&#xff1a; 簡化MySQL的連接、查詢和更新操作&#xff0c;提供接口給上層應用使用。成員變量private:MYSQL *_conn;_conn&#xff1a;指向MYSQL結構體的指針&#xff0c;用于代表數據庫連接實例。由mysql_init()初始化&#xff0c…

電纜安全雙保險:不止防盜,更能防觸電的塔能智慧照明守護方案

城市照明、地下車庫以及園區路燈所涉及的電纜安全問題&#xff0c;向來都是運維管理方面頗為棘手的難題。在傳統的運維管理模式之下&#xff0c;電纜一旦被盜&#xff0c;那么所造成的影響可不小&#xff0c;一方面會帶來直接的經濟損失&#xff0c;另一方面還極有可能因為線路…

Leetcode刷題營第二十九,三十題:二叉樹的中序以及后序遍歷

94.二叉樹的中序遍歷 給定一個二叉樹的根節點 root &#xff0c;返回 它的 中序 遍歷 。 示例 1&#xff1a; 輸入&#xff1a;root [1,null,2,3] 輸出&#xff1a;[1,3,2]示例 2&#xff1a; 輸入&#xff1a;root [] 輸出&#xff1a;[]示例 3&#xff1a; 輸入&#x…

Rabbitmq Direct Exchange(直連交換機)可以保證消費不被重復消費嗎,可以多個消費者,但是需要保證同一個消息,不會被投遞給多個消費者

在 RabbitMQ 中&#xff0c;默認情況下&#xff0c;不能保證消息不被重復消費&#xff0c;但可以通過 隊列綁定方式 消費者競爭機制 來確保 同一消息只被一個消費者處理。以下是幾種可行的方案&#xff1a;方案 1&#xff1a;單隊列 競爭消費者模式&#xff08;默認行為&…

常用的OTP語音芯片有哪些?

唯創知音在 OTP 語音芯片有著26年的歷史&#xff0c;有著豐富的技術積累與產品迭代歷程。1999 年&#xff0c;唯創知音在廣州成立&#xff0c;彼時便開始在電子領域積極探索。2000 年&#xff0c;公司敏銳捕捉到語音芯片行業的發展潛力&#xff0c;正式進軍該領域。經過數年技術…

分布式光伏發電系統中的“四可”指的是什么?

在分布式光伏電站規模爆發式增長的今天&#xff0c;“看不見、管不住、調不動”的難題卻成為行業痛點。如何讓散布各處的光伏電站真正成為穩定高效的“綠色能量站”&#xff1f;2025年《分布式光伏發電開發建設管理辦法》大型工商業項目&#xff08;≥6MW&#xff09;明確要求具…

健康管理系統新趨勢:AI + 物聯網如何重塑健康管理

一、傳統健康管理的痛點與變革之必然長久以來&#xff0c;我們熟悉的健康管理方式存在明顯局限&#xff1a;數據孤島嚴重&#xff1a;體檢報告在抽屜里沉睡&#xff0c;健身手環數據僅存于手機&#xff0c;不同醫療機構信息互不相通&#xff0c;個人健康信息猶如碎片散落各處。…

git基本操作【GIT-2】

git基本操作初始化一個倉庫&#xff08;repository&#xff09;、開始或停止跟蹤&#xff08;track&#xff09;文件、暫存&#xff08;stage&#xff09;或提交&#xff08;commit&#xff09;更改如何配置 Git 來忽略指定的文件和文件模式、如何迅速而簡單地撤銷錯誤操作、如…

【數據準備】——深度學習.全連接神經網絡

目錄 1 數據加載器 1.1 構建數據類 1.1.1 Dataset類 1.1.2 TensorDataset類 1.2 數據加載器 2 數據加載案例 2.1 加載csv數據集 2.2 加載圖片數據集 2.3 加載官方數據集 2.4 pytorch實現線性回歸 1 數據加載器 分數據集和加載器2個步驟~ 1.1 構建數據類 1.1.1 Dat…