【问题标题】:How I can change the icon on an EditText?如何更改 EditText 上的图标?
【发布时间】:2018-05-03 07:41:25
【问题描述】:

我让 EditText 从用户那里接收密码。

所以我把输入类型改成了密码。

<EditText
                android:id="@+id/edittext_Password"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:backgroundTint="@color/colorPrimary"
                android:inputType="textPassword"
                android:layout_weight="1"
                />

当我在 EditText 中输入单词时,它会显示一个黑点。
我想将点更改为可绘制资源。

【问题讨论】:

  • 我不认为你可以设置drawable而不是char。
  • 你能发布所需的用户界面吗?
  • @Khemraj 就这样圈起来
  • @ManishGupta 是的,我看到了,但它返回字符。我想要可绘制的资源

标签: android android-layout android-edittext android-inputtype


【解决方案1】:

您可以按照此代码为您的要求编写代码。

答案来自this tutorial,它涵盖了用户的行为:

  • 进入登录界面,键盘会自动打开。

  • 尝试在其中输入值,然后文本框背景变为带有星形背景的文本框。

  • 尝试使用键盘上的返回键取消/删除输入值,然后文本框背景将变为没有星形背景的文本框。

首先你要创建两个drawables:

然后,根据这种方法,您必须在您的EditText 上实现addTextChangedListener 方法。之后,作为参数,您创建 TextWatcher 类的新实例并实现其方法:

etxtPin1.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
       // TODO Auto-generated method stub

    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

    }
    @Override
    public void afterTextChanged(Editable s) {
          if(etxtPin1.getText().toString().trim().length()==1){

          etxtPin1.clearFocus();
          etxtPin2.requestFocus();
          etxtPin1.setBackgroundResource(R.drawable.pin_txt_bg_star);

          }
       }
    });

然后,你必须实现setOnKeyListener及其方法onKey

this.etxtPin1.setOnKeyListener(new View.OnKeyListener() {
      public boolean onKey(View paramView, int paramInt, KeyEvent paramKeyEvent) {
           if ((paramKeyEvent.getAction() == KeyEvent.ACTION_DOWN)&&(paramInt == 67) && (LoginActivity.this.etxtPin2.getText().length() == 0)) {
               etxtPin1.requestFocus();
               etxtPin1.setBackgroundResource(R.drawable.pin_txt_bg);
               etxtPin1.setText("");
           }

           return false;
       }
    });


另一种方法:创建您自己的扩展PasswordTransformationMethod的类。

public class MyPasswordTransformationMethod extends PasswordTransformationMethod {
    @Override
    public CharSequence getTransformation(CharSequence source, View view) {
        return new PasswordCharSequence(source);
    }

    private class PasswordCharSequence implements CharSequence {
        private CharSequence mSource;
        public PasswordCharSequence(CharSequence source) {
            mSource = source; // Store char sequence
        }
        public char charAt(int index) {
            return '*'; // This is the important part
        }
        public int length() {
            return mSource.length(); // Return default
        }
        public CharSequence subSequence(int start, int end) {
            return mSource.subSequence(start, end); // Return default
        }
    }
};

参考:In android how to show asterisk (*) in place of dots in EditText having inputtype as textPassword?

Reference

【讨论】:

  • 谢谢,我会试试的。但在另一种方法中,它是否返回字符?不可绘制资源。
【解决方案2】:

如果你想改变编辑文本中点的颜色,那么你可以改变文本颜色,这也会改变点的颜色。

您可以使用此代码执行相同的操作:

android:textColor="#FF0000" or setTextColor(int)

【讨论】:

  • 谢谢,但这是我想要的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 2016-04-04
  • 2018-09-11
  • 1970-01-01
  • 2011-03-04
  • 2019-12-11
相关资源
最近更新 更多