欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android自定义密码样式 黑点转换成特殊字符

程序员文章站 2022-04-13 22:45:29
本文为大家分享了android自定义密码样式的制作代码,黑点换成¥、%等特殊字符,供大家参考,具体内容如下 复制下面代码即可: 布局:

本文为大家分享了android自定义密码样式的制作代码,黑点换成¥、%等特殊字符,供大家参考,具体内容如下

复制下面代码即可:

布局:

<?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"
  >

  <edittext
    android:id="@+id/et"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_margintop="25dp"
    android:hint="请输入数据"
    />

  <linearlayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal">

    <button
      android:id="@+id/password"
      android:layout_width="0dp"
      android:layout_height="match_parent"
      android:layout_weight="1"
      android:text="密文"/>

    <button
      android:id="@+id/show_text"
      android:layout_width="0dp"
      android:layout_height="match_parent"
      android:layout_marginleft="20dp"
      android:layout_weight="1"
      android:text="明文"/>
  </linearlayout>

  <button
    android:id="@+id/clean"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:text="清除"/>
</linearlayout>

activity:

package com.chen;


import android.app.activity;
import android.os.bundle;
import android.text.method.hidereturnstransformationmethod;
import android.text.method.passwordtransformationmethod;
import android.view.view;
import android.widget.button;
import android.widget.edittext;

public class mainactivity extends activity {

  button psd;
  button show_text;
  edittext et;
  button clean;

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_main);

    //将输入框中的内容变为密码格式
    psd = (button) findviewbyid(r.id.password);
    //将密码变为明文
    show_text = (button) findviewbyid(r.id.show_text);
    //清空输入框
    clean = (button) findviewbyid(r.id.clean);
    et = (edittext) findviewbyid(r.id.et);
    show_text.setonclicklistener(new view.onclicklistener() {
      @override
      public void onclick(view v) {
        //获取编辑框中的数据内容
        string context = et.gettext().tostring();
        //将密码变为明文,这里不用setinputtype
        et.settransformationmethod(hidereturnstransformationmethod.getinstance());
        //设置光标位置在数据最后
        et.setselection(context.length());
      }
    });
    psd.setonclicklistener(new view.onclicklistener() {
      @override
      public void onclick(view v) {
        //获取编辑框中的数据内容
        string context = et.gettext().tostring();
        //将数据变为指定样式的密码
        et.settransformationmethod(new asteriskpasswordtransformationmethod());
        //设置光标位置在数据最后
        et.setselection(context.length());
      }
    });
    clean.setonclicklistener(new view.onclicklistener() {
      @override
      public void onclick(view v) {
        et.settext("");
      }
    });

  }

  private class asteriskpasswordtransformationmethod 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) {
        /*
        当在编辑框中输入1的时候,会连续打印0...
        当在编辑框中继续输入2的时候,会连续01...
        不影响功能使用,但是出现原因不知,待解决
         */
        system.out.println("-----" + index + "-----");
        //这里返回的char,就是密码的样式,注意,是char类型的
        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
      }
    }
  }

}


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。