EditText设置密码

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:background="#ffffff">
    
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_marginTop="20dp" >
        
        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center">
             <ImageView
                android:id="@+id/pwdIv1"
                android:layout_width="45dp"
                android:layout_height="45dp"
                android:background="@drawable/pwd_img"
                android:gravity="center"
                android:padding="17dp"
                android:src="@drawable/pwd_img_icon" />
             
              <ImageView
                android:id="@+id/pwdIv2"
                android:layout_width="45dp"
                android:layout_height="45dp"
                android:background="@drawable/pwd_img"
                android:gravity="center"
                android:padding="17dp"
                android:layout_marginLeft="20dp"
                android:src="@drawable/pwd_img_icon" />
              
               <ImageView
                android:id="@+id/pwdIv3"
                android:layout_width="45dp"
                android:layout_height="45dp"
                android:layout_marginLeft="20dp"
                android:background="@drawable/pwd_img"
                android:gravity="center"
                android:padding="17dp"
                android:src="@drawable/pwd_img_icon" />
               
                <ImageView
                android:id="@+id/pwdIv4"
                android:layout_width="45dp"
                android:layout_height="45dp"
                android:background="@drawable/pwd_img"
                android:layout_marginLeft="20dp"
                android:gravity="center"
                android:padding="17dp"
                android:src="@drawable/pwd_img_icon" />
        </LinearLayout>
        <EditText 
            android:id="@+id/et"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:maxLines="4"
            android:textColor="#f5f0ec"
            android:textSize="0.0sp"
            android:focusable="true"
            android:background="@null"
            android:inputType="number"
            />
    </RelativeLayout>

</LinearLayout>

主Activity:

public class EditTextActivity extends Activity{
    private EditText et;
    private ImageView iv1;
    private ImageView iv2;
    private ImageView iv3;
    private ImageView iv4;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_edittext);

        initViews();
        setImageView(0);
        et.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                int num = Integer.valueOf(et.getText().toString().trim().length());
                setImageView(num);

            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                          int arg3) {
            }

            @Override
            public void afterTextChanged(Editable arg0) {
            }
        });
    }

    private void initViews(){
         et = (EditText) findViewById(R.id.et);
        iv1 = (ImageView) findViewById(R.id.pwdIv1);
        iv2 = (ImageView) findViewById(R.id.pwdIv2);
        iv3 = (ImageView) findViewById(R.id.pwdIv3);
        iv4 = (ImageView) findViewById(R.id.pwdIv4);

    }

    @Override
    protected void onResume() {
        super.onResume();
        mHandler.post(mRunnable);
    }

    private Handler mHandler = new Handler();

    int i = 0;
    Runnable mRunnable = new Runnable() {
        @Override
        public void run() {
            i++;
            if(i > 2){
                mHandler.removeCallbacks(mRunnable);
                return;
            }

            ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE))
                    .showSoftInput(et, 0);
            mHandler.postDelayed(mRunnable, 200);
        }
    };

    private void setImageView(int num){
        iv1.setImageBitmap(null);
        iv2.setImageBitmap(null);
        iv3.setImageBitmap(null);
        iv4.setImageBitmap(null);

        switch (num) {
            case 1:
                iv1.setImageResource(R.drawable.pwd_img_icon);
                break;
            case 2:
                iv1.setImageResource(R.drawable.pwd_img_icon);
                iv2.setImageResource(R.drawable.pwd_img_icon);
                break;
            case 3:
                iv1.setImageResource(R.drawable.pwd_img_icon);
                iv2.setImageResource(R.drawable.pwd_img_icon);
                iv3.setImageResource(R.drawable.pwd_img_icon);
                break;
            case 4:
                iv1.setImageResource(R.drawable.pwd_img_icon);
                iv2.setImageResource(R.drawable.pwd_img_icon);
                iv3.setImageResource(R.drawable.pwd_img_icon);
                iv4.setImageResource(R.drawable.pwd_img_icon);
                break;
            default:
                break;
        }
    }
}



              pwd_img.png                                  pwd_img_icon.png

示例图:




Android EditText 设置密码类型时,默认的间距是不可修改的。但是你可以通过自定义一个 PasswordTransformationMethod 的子类来实现修改密码间距的功能。 示例代码如下: ```java public class CustomPasswordTransformationMethod extends PasswordTransformationMethod { private float mSpacing; // 密码间隔 public CustomPasswordTransformationMethod(float spacing) { mSpacing = spacing; } @Override public CharSequence getTransformation(CharSequence source, View view) { CharSequence transformation = super.getTransformation(source, view); if (transformation != null && transformation.length() > 0) { SpannableStringBuilder spannable = new SpannableStringBuilder(transformation); // 设置密码间隔 for (int i = 0; i < transformation.length() - 1; i++) { spannable.setSpan(new CustomSpaceSpan((int) mSpacing), i, i + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } return spannable; } return transformation; } private static class CustomSpaceSpan extends ReplacementSpan { private int mWidth; CustomSpaceSpan(int width) { mWidth = width; } @Override public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) { return mWidth; } @Override public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { } } } ``` 使用示例: ```java float spacing = 20; // 间隔为20px EditText editText = findViewById(R.id.edit_text); editText.setTransformationMethod(new CustomPasswordTransformationMethod(spacing)); ``` 这样就可以实现修改密码间距的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值