Android设置密码的明文和密文显示例子

 更新时间:2016年9月20日 19:52  点击:2339
设置密码的明文和密文显示这个现在的app中都具备这个功能了,我们下面一起来看看此功能如何实现吧,具体的代码如下所示。

我们经常会在一些软件上发现在密码输入框的后面有一个按钮可以使我们输入的密码显示为密文(●●●●●或者*****),也可以显示为正常的可见状态,效果如图。

具体实现如下:

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="15dp"
    android:orientation="horizontal">

    <EditText
        android:id="@+id/et_password"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_weight="5"
        android:paddingLeft="10dp"
        android:digits="0123456789abcdefghigklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM"
        android:gravity="center_vertical"
        android:hint="6-16位,数字和密码组合"
        android:inputType="textPassword"
        android:textColorHint="#999999"
        android:textSize="16sp" />

    <Button
        android:id="@+id/btn_pwd"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_weight="1"
        android:gravity="center"
        android:text="明文" />

</LinearLayout>

MainActivity:

package zmit.cn.edittext;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;


public class MainActivity extends Activity {
    private static final int PASSWORD_MINGWEN = 0x90;
    private static final int PASSWORD_MIWEN = 0x81;
    private EditText editText;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.et_password);
        button = (Button) findViewById(R.id.btn_pwd);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = button.getText().toString().trim();
                if (str.equals("明文")) {
                    button.setText("密文");
                    editText.setInputType(PASSWORD_MINGWEN);//设置显示为明文
                    editText.setSelection(editText.length());//设置光标显示
                } else if (str.equals("密文")) {
                    button.setText("明文");
                    editText.setInputType(PASSWORD_MIWEN);//设置显示为密文
                    editText.setSelection(editText.length());//设置光标显示
                }
            }
        });
    }
}

本文章来为各位介绍一篇关于android仿QQ长按图片显示删除角标,选择删除图片例子,希望这篇教程可以为各位朋友带来帮助,具体的就看代码吧。

在多图片上传的时候我们通常会选择很多图片,然后我们可以长按其中的某一个图片,这时候所有的图片都会显示一个删除的角标,我们点击其中的某一个就可以删除不要的图片,效果图:

 

代码很容易看懂,直接贴上来:

package zm.imageview;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.List;


public class MainActivity extends Activity {
    private boolean isShowDelete = false;
    private GridView gv;
    private GridViewAdapter mGridAdapter;
    private List<AreaEntity> areaEneities = new ArrayList<AreaEntity>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gv = (GridView) findViewById(R.id.gv);
        for (int i = 0; i < 10; i++) {
            AreaEntity areaEntity = new AreaEntity(i + "", "http://img.tuku.cn/file_big/201504/024448d7ae994d4d9273ea5f3c199a5a.jpg", "风景" + i);
            areaEneities.add(areaEntity);
        }
        mGridAdapter = new GridViewAdapter(areaEneities, MainActivity.this);
        gv.setAdapter(mGridAdapter);
        gv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                if (isShowDelete) {
                    isShowDelete = false;
                } else {
                    isShowDelete = true;
                }
                mGridAdapter.setIsShowDelete(isShowDelete);
                return true;
            }
        });
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        if (isShowDelete == true) {
            isShowDelete = false;
            mGridAdapter.setIsShowDelete(false);
        } else {
            finish();
        }
    }

    class GridViewAdapter extends BaseAdapter {
        private boolean isShowDelete;//根据这个布尔型变量来判断是否显示删除图标,true是显示,false是不显示
        private List<AreaEntity> areaEneity;
        private LayoutInflater mInflater;
        private Context mContext;

        public GridViewAdapter(List<AreaEntity> areaEneities, Context context) {
            super();
            this.areaEneity = areaEneities;
            this.mInflater = LayoutInflater.from(context);
            this.mContext = context;
        }

        public void setIsShowDelete(boolean isShowDelete) {
            this.isShowDelete = isShowDelete;
            notifyDataSetChanged();
        }

        @Override
        public int getCount() {
            return areaEneity.size();
        }

        @Override
        public Object getItem(int position) {
            return areaEneity.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {

            ViewHolder holder;
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.fragmet_grid_item, null);
                holder = new ViewHolder();
                holder.img = (ImageView) convertView.findViewById(R.id.img);
                holder.name_tv = (TextView) convertView.findViewById(R.id.name_tv);
                holder.deleteView = convertView.findViewById(R.id.delete_markView);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            Picasso.with(mContext).load(areaEneity.get(position).getPic()).into(holder.img);
            holder.name_tv.setText(areaEneity.get(position).getArea());
            holder.deleteView.setVisibility(isShowDelete ? View.VISIBLE : View.GONE);
            holder.deleteView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(mContext, "您删除了第" + areaEneity.get(position).getId() + "张", Toast.LENGTH_SHORT).show();
                    areaEneity.remove(areaEneity.get(position));
                    notifyDataSetChanged();
                }
            });
            return convertView;
        }

        class ViewHolder {
            private View deleteView;
            private ImageView img;
            private TextView name_tv;
        }
    }

    class AreaEntity {
        private String id;
        private String pic;
        private String area;

        public AreaEntity(String id, String pic, String area) {
            this.id = id;
            this.pic = pic;
            this.area = area;
        }

        public String getPic() {
            return pic;
        }

        public void setPic(String pic) {
            this.pic = pic;
        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getArea() {
            return area;
        }

        public void setArea(String area) {
            this.area = area;
        }
    }
}

这里面我显示的图片是从网上随便选的一张,加载框架用的是picasso,用Android Studio开发的开发者直接在dependencies里面引入一行代码即可:

compile 'com.squareup.picasso:picasso:2.5.2'

同时别忘了加上网络权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
好的,功能实现。

设置登录密码我们一般会有限制的如由什么组合了,下面我们来看一篇关于安卓开发之设置密码只能输入字母和数字的组合方法,具体的细节如下所示。

无论是电脑还是手机以及其他电子设备,在输入密码的时候总是会需要做一些限制,比如不能输入空格,不能输入奇葩的非法字符,不能输入小于几位的密码,不能过于简单,等等。

在对EditText设置的时候往往需要加一些输入过滤器,监听什么的,但是EditText其实有一个很简单的属性,只要一行代码就可以设置EditText只能输入的内容,可以排除所有的非法字符。

android:digits="0123456789abcdefghigklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM"

此属性的意思就是只能输入数字、小写字母和大写字母。

简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。

简单对象访问协议(Simple Object Access Protocol,SOAP)是一种标准化的通信规范,主要用于Web服务(Web service)。SOAP的出现可以使网页服务器(Web Server)从XML数据库中提取数据时,无需花时间去格式化页面,并能够让不同应用程序之间通过HTTP协议,以XML格式互相交换彼此的数据,使这个交换过程与编程语言、平台和硬件无关。此标准由IBM、Microsoft、UserLand和DevelopMentor在1998年共同提出,并得到IBM、Lotus(莲花)、Compaq(康柏)等公司的支持,于2000年提交给万维网联盟(World Wide Web Consortium,W3C)。目前SOAP 1.1版是业界共同的标准。

SOAP基于XML标准,用于在分布式环境中发送消息,并执行远程过程调用。使用SOAP,不用考虑任何特定的传输协议(尽管通常选用HTTP协议),就能使数据序列化。

SOAP的优点如下:

SOAP是可扩展的。SOAP无需中断已有的应用程序,SOAP客户端、服务器和协议自身都能发展。而且SOAP能极好地支持中间介质和层次化的体系结构。

SOAP是简单的。客户端发送一个请求,调用相应的对象,然后服务器返回结果。这些消息是XML格式的,并且封装成符合HTTP协议的消息。因此,它符合任何路由器、防火墙或代理服务器的要求。

SOAP是完全和厂商无关的。SOAP可以相对于平台、操作系统、目标模型和编程语言独立实现。另外,传输和语言绑定以及数据编码的参数选择都是由具体的实现决定的。

SOAP与编程语言无关。SOAP可以使用任何语言来完成,只要客户端发送正确SOAP请求(也就是说,传递一个合适的参数给一个实际的远端服务器)。SOAP没有对象模型,应用程序可以捆绑在任何对象模型中。

SOAP–消息

SOAP使用Internet应用层协议作为其传输协议。SMTP以及HTTP协议都可以用来传输SOAP消息,SOAP亦可以通过HTTPS传输。一条SOAP消息就是一个普通的XML文档,包含下列元素:

必需的Envelope元素,可把此XML文档标识为一条SOAP消息。

可选的Header元素,包含头部信息。

必需的Body元素,包含所有的调用和响应信息。

可选的Fault元素,提供有关在处理此消息时发生错误的信息。

SOAP消息的重要的语法规则如下:

SOAP消息必须使用XML来编码。

SOAP消息必须使用SOAP Envelope命名空间。

SOAP消息必须使用SOAP Encoding命名空间。

SOAP消息不能包含DTD引用。

SOAP消息不能包含XML处理指令。

实例:

请求时候发送的消息内容如下:
<soapenv:Envelope
xmlns:soapenv=”http:// schemas.xmlsoap.org/soap/envelope/”
xmlns:xsd=”http:// www.w3.org/2001/XMLSchema”
xmlns:xsi=”http:// www.w3.org/2001/XMLSchema-instance”>
<soapenv:Body>
<req:echo xmlns:req=”http:// localhost:8080/axis2/services/MySer-vice/”>
<req:category>classifieds</req:category>
</req:echo>
</soapenv:Body>
</soapenv:Envelope>

响应时候发送的消息内容如下:
<soapenv:Envelope
xmlns:soapenv=”http:// schemas.xmlsoap.org/soap/envelope/”
xmlns:wsa=”http:// schemas.xmlsoap.org/ws/2004/08/addressing”>
<soapenv:Header>
<wsa:ReplyTo><wsa:Address>http:// schemas.xmlsoap.org/ws/2004/08/
addressing/role/anonymous</wsa:Address>
</wsa:ReplyTo>
<wsa:From><wsa:Address>http:// localhost:8080/axis2/
services/MyService</wsa:Address>
</wsa:From>
<wsa:MessageID>ECE5B3F187F29D28BC11433905662036</wsa:MessageID>
</soapenv:Header>
<soapenv:Body>
<req:echo xmlns:req=”http:// localhost:8080/axis2/services/MyService/”>
<req:category>classifieds</req:category>
</req:echo>
</soapenv:Body>
</soapenv:Envelope>

SOAP–调用WebService

SOAP调用WebService的具体步骤如下。

步骤1 添加ksoap2包。WebService是一种基于SOAP协议的远程调用标准,通过WebService可以将不同操作系统平台、不同语言、不同技术整合到一块。在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。PC版本的WebService客户端库非常丰富,例如Axis2、CXF等,但这些开发包对于Android系统来说过于庞大,也未必很容易移植到Android系统中。因此,这些开发包并不在我们考虑范围内。适合手机的WebService客户端的SDK有一些,比较常用的是Ksoap2,可以从网址http://code.google.com/p/ksoap2-android/下载,然后将下载的ksoap2-android-assembly-2.4-jar-with-dependencies.jar包复制到Eclipse工程的lib目录中,当然也可以放在其他的目录里。在Eclipse工程中引用这个jar包。

步骤2 指定WebService的命名空间和调用的方法名,如:
SoapObject request =new SoapObject(http:// service,”getName”);

SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间;第二个参数表示要调用的WebService方法名。

步骤3 设置调用方法的参数值,如果没有参数,可以省略。设置方法的参数值的代码如下:
Request.addProperty(“param1″,”value”);
Request.addProperty(“param2″,”value”);

要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。

步骤4 生成调用WebService方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述,代码如下:
SoapSerializationEnvelope envelope=
new SoapSerializationEnvelope(SoapEnvelope.VER11);
Envelope.bodyOut = request;

创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。该版本号需要根据服务端WebService的版本号设置。在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,该属性的值就是在步骤2创建的SoapObject对象。

步骤5 创建HttpTransportsSE对象。通过HttpTransportsSE类的构造方法可以指定WebService的WSDL文档的URL。
HttpTransportSE ht=new HttpTransportSE
(“http:// fy.webxml.com.cn/webservices/EnglishChinese.asmxwsdl”);

步骤6 使用call方法调用WebService方法,代码如下:
ht.call(null,envelope);

call方法的第一个参数一般为null,第2个参数就是在步骤4创建的SoapSerialization-Envelope对象。

步骤7 使用getResponse方法获得WebService方法的返回结果,代码如下:
SoapObject soapObject =(SoapObject)envelope.getResponse();

步骤8 解析返回的内容。

在开发中返回顶部与底部我们经常会用到了,下面我们来看一篇关于Android监听ScrollView滑动到顶端和底部例子,具体的如下所示。

package zm.scroolview;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ScrollView;

public class MainActivity extends Activity{
    private ScrollView sl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sl = (ScrollView) findViewById(R.id.sl);
        sl.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                switch (motionEvent.getAction()) {
                    case MotionEvent.ACTION_DOWN:

                        break;
                    case MotionEvent.ACTION_MOVE:
                        int scrollY=view.getScrollY();
                        int height=view.getHeight();
                        int scrollViewMeasuredHeight=sl.getChildAt(0).getMeasuredHeight();
                        if(scrollY==0){
                            System.out.println("滑动到了顶端 getScrollY()="+scrollY);
                        }
                        if((scrollY+height)==scrollViewMeasuredHeight){
                            System.out.println("滑动到了底部 scrollY="+scrollY);
                            System.out.println("滑动到了底部 height="+height);
                            System.out.println("滑动到了底部 scrollViewMeasuredHeight="+scrollViewMeasuredHeight);
                        }
                        break;

                    default:
                        break;
                }
                return false;
            }
        });
    }
}

[!--infotagslink--]

相关文章

  • iPhone输错密码导致手机锁定怎么办 iPhone输错密码手机锁定解决方法

    如果反复输错屏幕密码,手机就会进入锁定模式,也就是永久停用状态,只能抹掉数据以解除锁定状态和清除锁屏密码...2022-09-14
  • PHP操作MSSQL存储过程修改用户密码

    存储过程在数据库的应用中我们用到的非常的多了,下面我们来看一篇关于PHP操作MSSQL存储过程修改用户密码的例子,具体的如下所示。 mssql2008 存储过程 下面可以直接...2016-11-25
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • js检验密码强度(低中高)附图

    最近一直在做通行证项目,里面的注册模块中输入密码需要显示密码强度(低中高)。今天就把做的效果给大家分享下,代码没有网上搜索的那么复杂,能够满足一般的需求。 html 代码如下: 复制代码 代码如下: <!DOCTYPE HTML> <htm...2014-06-07
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • Android WebView加载html5页面实例教程

    如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
  • 深入理解Android中View和ViewGroup

    深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • Android用MemoryFile文件类读写进行性能优化

    java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
  • Android设置TextView竖着显示实例

    TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
  • JavaScript仿支付宝密码输入框

    那么今天我就用JavaScript代码来实现这个效果吧,那么首先介绍一下整个的思路,首先我们先将确定输入密码的位数,我的需求是5位,那么就用一个div标签包住5个input标签...2016-01-02
  • android.os.BinderProxy cannot be cast to com解决办法

    本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20
  • 基于JavaScript实现表单密码的隐藏和显示出来

    为了网站的安全性,很多朋友都把密码设的比较复杂,但是如何密码不能明显示,不知道输的是对是错,为了安全起见可以把密码显示的,那么基于js代码如何实现的呢?下面通过本文给大家介绍JavaScript实现表单密码的隐藏和显示,需要的朋友参考下...2016-03-03
  • Android 实现钉钉自动打卡功能

    这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
  • Android 开发之布局细节对比:RTL模式

    下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
  • Android中使用SDcard进行文件的读取方法

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
  • Android开发之PhoneGap打包及错误解决办法

    下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20