android 屏蔽焦点,android – 如何在视图失去焦点时屏蔽EditText中的文本.

因此,如果用户输入“1234”,他们将在EditText字段中看到“1234”.但是当那个领域失去焦点时,我希望它显示“****”

所以我实现了一个自定义TransformationMethod,如果EditText字段没有焦点,它只会屏蔽输入的文本.

当我输入文本“12345”时,它显示它应该是“12345”但是当我点击不同的字段时,数字永远不会被屏蔽.我想看到“*****”,但我仍然看到相同的“12345”

如果我旋转设备(强制它重新加载所有东西),它会正确显示“*****”.当我点击EditText字段时,它会正确地将屏蔽文本从“*****”更改为“12345”因此,在获得焦点时它会起作用,但在失去焦点时则不起作用.我试过实现一个OnFocusChangeListener,但似乎没有任何影响.

有没有什么办法可以强制EditText字段在失去焦点时重绘文本?

建立:

editText.setTransformationMethod(CustomPasswordTransformationMethod(numUnobfuscatedDigits))

editText.setOnFocusChangeListener { view, hasFocus ->

((EditText)view).invalidate()

((EditText)view).refreshDrawableState()

CustomPasswordTransformationMethod:

public class CustomPasswordTransformationMethod extends PasswordTransformationMethod {

private int unObfuscated = 1;

private boolean mIsFocused = false;

/**

* @param number the number of digits that will be unObfuscated at the end of the input string. Must be a positive integer or 0.

*/

public CustomPasswordTransformationMethod(int number) {

if (number < 0) {

Log.e(TAG, "Invalid parameter number =" + number + " number of un-obfuscated digits must be a positive integer or 0.");

unObfuscated = 0;

}

unObfuscated = number;

}

@Override

public CharSequence getTransformation(CharSequence source, View view) {

return new PasswordCharSequence(source);

}

@Override

public void onFocusChanged(View view, CharSequence sourceText,

boolean focused, int direction,

Rect previouslyFocusedRect) {

super.onFocusChanged(view,sourceText,focused, direction, previouslyFocusedRect);

mIsFocused = focused;

}

private class PasswordCharSequence implements CharSequence {

private CharSequence mSource;

public PasswordCharSequence(CharSequence source) {

mSource = source; // Store char sequence

}

public char charAt(int index) {

if(mIsFocused) return mSource.charAt(index);

else {

if (index < ((length()) - unObfuscated)) return '●';

return mSource.charAt(index);

}

}

public int length() {

return mSource.length(); // Return default

}

public CharSequence subSequence(int start, int end) {

return mSource.subSequence(start, end); // Return default

}

}

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值