欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android Studio EditText點擊圖標(biāo)清除文本內(nèi)容的實例解析

 更新時間:2016年11月30日 08:47:20   作者:li1996heng  
這篇文章主要介紹了Android Studio EditText點擊圖標(biāo)清除文本內(nèi)容的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

 這篇文章是繼自定義EditText樣式之后的功能強化,對于實際應(yīng)用項目有很大的參考意見,感興趣的朋友可以移步上一篇,”Android Studion自定義EditText樣式”.具體清除EditText文本內(nèi)容功能代碼如下:

package com.liheng;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v4.content.ContextCompat;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.EditText;
import myself.myapplication.R;
/**
* 第一步:
* 創(chuàng)建一個類,并繼承EditText這個類,實現(xiàn)父類的三個構(gòu)造函數(shù)
* 我們只用實現(xiàn)帶一個參數(shù),兩個參數(shù),三個參數(shù)的構(gòu)造函數(shù),帶四個參數(shù)的暫且不管
*/
public class MyEditText extends EditText {
/**
* 第二步:
* 聲明3個變量: 兩個圖片對象(變量的值是通過實例化對象得到的,
* 在JAVA世界里,除了基本數(shù)據(jù)類型和靜態(tài)成員不是對象外,
* 其他一切都是對象.類也是一個對象,類是Class類的對象,圖片是drawable類的對象)
* 1.當(dāng)EditText文本內(nèi)容為空的時候,右側(cè)清空圖標(biāo)應(yīng)為灰色,此時點擊是沒有任何效果的
* 2.當(dāng)EditText文本內(nèi)容不為空的時候,右側(cè)清空圖標(biāo)應(yīng)為藍色,此時點擊,清空EditText文本內(nèi)容
* 3.上下文對象
*/
private Drawable imageBlue;
private Drawable imageGray;
private Context myContext;
/**
* 實現(xiàn)EditText父類的三個構(gòu)造方法
* 這三個方法必須調(diào)用自定義的初始化函數(shù) init()方法
*/
public MyEditText(Context context) {
super(context);
init(context);
}
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public MyEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
/**
* 初始化方法:用于初始化聲明的三個全局變量 :imageBlue,imageGray,myContext
* 并負責(zé)監(jiān)聽EditText文本內(nèi)容的更改
*/
private void init(Context context){
this.myContext = context;
/**
* 得到圖片資源:
* 第一種方式:(已過時,不推薦使用,
* 還應(yīng)注意R文件導(dǎo)入的包應(yīng)為自己項目下的包,
* 因為圖片資源在自己項目目錄下):
* imageBlue = myContext.getResources().getDrawable(R.drawable.delete);
*
* 第二種方式:(網(wǎng)友推薦,項目會報錯?)
* 調(diào)用getDrawable()帶兩個參數(shù)的方法.第二參數(shù)置為null
* imageBlue = myContext.getResources().getDrawable(R.drawable.delete, null);
*
* 第三種方式:(谷歌官方推薦使用) ,myContext為自己聲明的上下文對象
* imageBlue = ContextCompat.getDrawable(myContext, R.drawable.delete);
*/
imageBlue = ContextCompat.getDrawable(myContext, R.drawable.delete);
imageGray = ContextCompat.getDrawable(myContext, R.drawable.delete_gray);
/**
* 設(shè)置文字監(jiān)聽器(EditText文本內(nèi)容改變時,會觸發(fā)對應(yīng)的回調(diào)函數(shù))
* onTextChanged() EditText文本內(nèi)容更改時觸發(fā)
* beforeTextChanged() EditText文本內(nèi)容更改前觸發(fā)
* afterTextChanged() EditText文本內(nèi)容更改后觸發(fā)
*
* 對于此項目,清空EditText應(yīng)在EditText文本內(nèi)容更改后觸發(fā)
*
*/
addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
//文字改變后設(shè)置清空圖片的位置
setImage();
}
});
//初始的時候也應(yīng)設(shè)置清空圖片的位置
setImage();
}
/**
* 設(shè)置圖片位置方法
* 當(dāng)length()大于0,即 EditText里面有文本內(nèi)容的時候,圖片為藍色
* 當(dāng) length()小于0,即 EditText里面沒有文本內(nèi)容的時候,圖片為灰色
* setCompoundDrawablesWithIntrinsicBounds() 四個參數(shù)代表左上右下
*/
private void setImage(){
if (length()>0) {
setCompoundDrawablesWithIntrinsicBounds(null,null,imageBlue,null);
}else{
setCompoundDrawablesWithIntrinsicBounds(null, null, imageGray, null);
}
}
public boolean onTouchEvent(MotionEvent event){
switch (event.getAction()){
//匹配手指離開EditText
case MotionEvent.ACTION_UP:
//得到手指離開EditText時的X Y坐標(biāo)
int x = (int) event.getRawX();
int y = (int) event.getRawY();
//創(chuàng)建一個長方形
Rect rect = new Rect();
//讓長方形的寬等于edittext的寬,讓長方形的高等于edittext的高
getGlobalVisibleRect(rect);
//把長方形縮短至右邊50個寬度內(nèi)
rect.left = rect.right - 50;
//如果x和y坐標(biāo)在長方形當(dāng)中,說明你點擊了右邊的xx圖片,清空輸入框
if(rect.contains(x,y)){
setText("");
}
break;
default:
break;
}
return super.onTouchEvent(event);
}
}

自定義的MyEditText這個類實際跟我們在layout布局文件里面拖的EditText控件是一樣的,因為MyEditText繼承自父類EditText.只不過我們在layout布局文件里面調(diào)用的時候應(yīng)包括完整包名,如下:

<?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:id="@+id/activity_main"
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="myself.myapplication.MainActivity">
<com.liheng.MyEditText
android:layout_width="500dp"
android:layout_height="50dp"
android:inputType="textPersonName"
android:text="Name"
android:ems="10"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="45dp"
android:layout_marginStart="45dp"
android:layout_marginTop="49dp"
android:id="@+id/editText"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:background="@drawable/select_edittext"/>
<com.liheng.MyEditText
android:layout_width="500dp"
android:layout_height="50dp"
android:inputType="textPersonName"
android:text="Name"
android:ems="10"
android:layout_below="@+id/editText"
android:layout_alignLeft="@+id/editText"
android:layout_alignStart="@+id/editText"
android:layout_marginTop="89dp"
android:id="@+id/editText2"
android:paddingLeft="10dp"
android:background="@drawable/select_edittext"/>
</RelativeLayout>

附上實際效果圖:

這里寫圖片描述

仔細觀察可以發(fā)現(xiàn),第一個輸入框的清空圖標(biāo)往左靠了一點,這是因為我在第一個輸入框的xml布局文件里面加了 android:paddingRight=”10dp” 這一行代碼.如此一來,對于清空圖標(biāo)的位置,我們可以根據(jù)手機分辨率大小做具體調(diào)整.

圖標(biāo)素材:

這里寫圖片描述
這里寫圖片描述

以上所述是小編給大家介紹的Android Studio EditText點擊圖標(biāo)清除文本內(nèi)容,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評論