一个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---");
*/
}
}
}