android实现在Edittext中把部分字符隐藏

一个Edittext中把部分字符隐藏简单的demo

效果图:


废话不讲了上代码:

主布局



activity_main.xml

<LinearLayout 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.test2.MainActivity" 
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
    <EditText 
        android:id="@+id/et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

主activity:

MainActivity.java

package com.example.test2;
 
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;

public class MainActivity extends Activity {   
	/**
	 * 存储真实的字符
	 * 比如提交后台
	 */
	private String realStr = "";
	private EditText et;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		et = (EditText) findViewById(R.id.et);
		et.addTextChangedListener(new MyTextWatcher());
	}
	class MyTextWatcher implements TextWatcher{
		private String displayStr = "";//显示在editext上的字符串

		@Override
		public void onTextChanged(CharSequence s, int start, int before, int count) {
			if(s.toString().trim().equals(displayStr.trim())){//这个判断一定要写不然要陷入死循环(et.setText会触发onTextChanged我又在onTextChanged里使用了setText方法)
				System.out.println("字符重复了!!!!!!!!");
				return;
			}
			System.out.println("start="+start+" before="+before+"  count="+count);
			System.out.println("s="+s);
			if(before > 0){
				String delStr = realStr.substring(start, start+before);
				System.out.println("删除的字符串="+delStr);
				String result = realStr.substring(0, start)+realStr.substring(start+before);
				System.out.println("删除后result="+result);
				realStr = result;
			}
			if(count>0){
				CharSequence tmp = s.subSequence(start, start+count); 
				System.out.println("增加的sub str ="+tmp);  
				StringBuilder sb = new StringBuilder(realStr);
				sb.insert(start, tmp);
				realStr = sb.toString();
				//realStr += tmp;
			}
			
			System.out.println("realStr= "+realStr+ "---length="+realStr.length()); 
			
			displayStr = getDisplayStr(realStr);
			String old = et.getText().toString().trim();
			System.out.println("old ="+old+" displayStr = "+displayStr);
			et.setText(displayStr);
			et.setSelection(displayStr.length()); 			
			System.out.println("displayStr = "+displayStr);
			System.out.println("------------------------------------------");
		}
		/**
                          获取用于显示的带星花的字符,不提交后台
        */
		private String getDisplayStr(String realStr) {
			String result = new String(realStr);
			char[] cs = result.toCharArray();
			for(int i = 0;i < cs.length;i++){
				if(i >= 3&& i <= 10){//把3和10区间的字符隐藏
					cs[i] = '*';
				}
			}
			return new String(cs);
		}

		
		@Override
		public void beforeTextChanged(CharSequence s, int start, int count,
				int after) {  
		}
		
		@Override
		public void afterTextChanged(Editable s) { 
			/*System.out.println("---afterTextChanged---");
			*/
		} 
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值