Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 如何在视图失去焦点时屏蔽EditText中的文本.大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
因此,如果用户输入“1234”,他们将在EditText字段中看到“1234”.但是当那个领域失去焦点时,我希望它显示****

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

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

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

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

建立:@H_696_7@

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;@H_696_7@

/**
     * @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
        }
    }
};

解决方法

试试这个,看看它是否能满足您的需求.

editText.setOnFocuschangelistener(new View.onFocuschangelistener() {
    @Override
    public void onFocusChange(View view,Boolean hasFocus) {
        if(hasFocus){
            editText.setTransformationMethod(HideReturnsTransformationMethod.geTinstance());
        }
        else{
            editText.setTransformationMethod(passwordTransformationMethod.geTinstance());
        }
    }
});

大佬总结

以上是大佬教程为你收集整理的android – 如何在视图失去焦点时屏蔽EditText中的文本.全部内容,希望文章能够帮你解决android – 如何在视图失去焦点时屏蔽EditText中的文本.所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。