2015-12-07 20:58:11 zhangphil 阅读数 2514


Android ClearEditText:输入用户名、密码错误时整体删除及输入为空时候晃动提示

Android开发中经常要要求用户输入一些值得情况,比如,用户名,密码,如果用户输入错误,需要删除,那么按回退删除键也可以,但也可以在输入框右侧提供一个小按钮一次性删除全部内容。同时,如果用户忘记输入某个值,比如用户名和密码没有完全输入只输入了用户名而忘记密码,那么应该提醒用户输入密码。
Android ClearEditText实现了上述功能,Android ClearEditText运行时功能展示如动图所示:


Android ClearEditText在github上的链接地址是:https://github.com/zhangphil/ClearEditText

2018-05-02 17:56:54 qq_36903042 阅读数 3039

每个Android开发者都会遇到一个问题就是在App的登陆界面会有记住密码和记住用户名的复选框按钮,是怎么实现的呢?下面进行展示一下操作代码!我们以最简单的自动默认记住用户名为例子,用户选择复选框自行后期添加就好了!

我们先介绍一下SharedPreferences,SharedPreferencesAndroid平台上一个轻量级的存储类,主要是保存一些常用的配置参数,它是采用xml文件存放数据。SharedPreferences是一个接口,而且在这个接口里没有提供写入数据和读取数据的能力。但它是通过其Editor接口中的一些方法来操作SharedPreference的。(SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现

实现步骤:

 

       1、根据Context获取SharedPreferences对象

  2、利用edit()方法获取Editor对象。

  3、通过Editor对象存储key-value键值对数据。

    4、通过commit()方法提交数据。

 

新建MainActivity.java文件,代码如下:

 

 

public class MainActivity extends AppCompatActivity {

    private EditText username,password;
    //数据存储API(SharedPreferences)
    private SharedPreferences sp=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        username = (EditText) findViewById(R.id.username);
        password = (EditText) findViewById(R.id.password);
    /**
     * userinfo :存放数据的文件名 (后缀.xml自动加上)
     * Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读、写
     */
        sp = this.getSharedPreferences("userinfo", Context.MODE_PRIVATE); // 
    //sp.getString()第二个参数是缺省值,如果SharedPreferences中不存在值就返回缺省值
        String saved_username = sp.getString("USERNAME", ""); //获取sp里面存储的数据
        String saved_password = sp.getString("PASSWORD","");
        username.setText(saved_username);//将sp中存储的username写入EditeText
        password.setText(saved_password);//将sp中存储的password写入EditeText

    }
    //登陆
    public void Login(View view){
        SharedPreferences.Editor editor = sp.edit();
        //新建一个Editor对象来存储键值对用户名和密码
        editor.putString("USERNAME", username.getText().toString());
        editor.putString("PASSWORD",password.getText().toString());
        //提交数据
        editor.commit();
        Toast.makeText(MainActivity.this,"登陆成功!",Toast.LENGTH_LONG).show();
    }
}

Context.getSharedPreferences(String name,int mode)来得到一个SharedPreferences实例,其中

那额,:是指文件名称,不需要加后缀.xml,系统会自动为我们添加上

mode:是指定读写方式,其值有三种,
分别为:

   Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读、写。
   ②Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读写。

   ③Context.MODE_WORLD_READABLE指定该SharedPreferences数据能被其他应用程序读,但不能写。

 

关于SharedPreferences的知识点先写到这,如果后期用到别的我会增加的!欢迎反馈和改正!

 

 

 

2014-12-23 00:47:13 c602273091 阅读数 14615

今天做的就是在界面输入用户名和密码,如果正确的话显示登陆成功,否则就是失败了!

界面很挫,就是很挫!

输入用户名:Android

密码:2014

结果如下:

接着重置,返回原来图片!

如果密码错误呢?

点重置返回原来界面!

接着长按图标按钮,就出现动态textview!

具体代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.practice2.MainActivity$PlaceholderFragment" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="35dp"
        android:layout_marginTop="34dp"
        android:ems="10"
        android:gravity="center" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="35dp"
        android:layout_marginTop="34dp"
        android:ems="10"
        android:gravity="center"
        android:inputType="textPassword" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="25dp"
        android:gravity="center"
        android:text="您好,请输入用户名和密码" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="0.53"
            android:text="重置" />

        <ImageButton
            android:id="@+id/imageButton1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.47"
            android:src="@drawable/ic_launcher" />
    </LinearLayout>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        android:text="" />

</LinearLayout>

后代:

package com.example.practice2;



import android.support.v7.app.ActionBarActivity;
import android.support.v4.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;


public class MainActivity extends ActionBarActivity {
	
	EditText account = null;
	EditText code = null;
	ImageButton ibtn = null;
	Button btn = null;
	TextView information = null;
	TextView mcont = null;
	Context cont = null;
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.fragment_main);
		
		
		
		
		account = (EditText) findViewById(R.id.editText1);
		code = (EditText) findViewById(R.id.editText2);
		ibtn = (ImageButton) findViewById(R.id.imageButton1);
		btn = (Button) findViewById(R.id.button1);
		information = (TextView) findViewById(R.id.textView1);
		mcont =(TextView) findViewById(R.id.textView2);
		cont = this;
		mcont = new TextView(cont);
        mcont.setText("万万没想到");
		//ibtn = new ImageButton(this);
        
		ibtn.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String username = ((EditText)findViewById(R.id.editText1)).getText().toString();
        		String pwd = ((EditText)findViewById(R.id.editText2)).getText().toString();
        		if(username.equals("android")&&pwd.equals("2014")){
        			ibtn.setImageDrawable(getResources().getDrawable(R.drawable.state1));
        			account.setVisibility(View.GONE);
        			code.setVisibility(View.GONE);	
        			information.setText("用户名密码正确");
        		}
        		else{
        			ibtn.setImageDrawable(getResources().getDrawable(R.drawable.state2));
        			account.setVisibility(View.GONE);
        			code.setVisibility(View.GONE);	
        			information.setText("用户名密码错误");
        		}
			}	
		});
		
		ibtn.setOnLongClickListener(new OnLongClickListener(){
			@Override
			public boolean onLongClick(View v) {
				// TODO Auto-generated method stub
				LinearLayout mLinearLayout = (LinearLayout)findViewById(R.id.LinearLayout1);
    			mcont = new TextView(cont);
    			mcont.setText("万万没想到");
    			mLinearLayout.addView(mcont);
				//mLinearLayout.setLayoutParams(new RelativeLayout.LayoutParams(-1, -1));

				//TextView mView = new TextView(this);
				//mView.setId(2);
				//mView.setText("this is a test text!");
				//RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
				//    -2, -2);
				// layoutParams.setMargins(100, 100, 100, 100);
				//layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, -1);
				
				
				
				//Toast.makeText(cont, "万万没想到", Toast.LENGTH_LONG).show();
				
    			//mLinearLayout.addView(mcont);
				return true;
			}
			
		});
		
		btn.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				ibtn.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher));
				information.setText("您好,请输入用户名和密码");
    			account.setVisibility(0);
    			code.setVisibility(0);
    			account.setHint("username");
    			code.setHint("password");
    			account.setText("");
    			code.setText("");				
			}
			
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

	/**
	 * A placeholder fragment containing a simple view.
	 */
	public static class PlaceholderFragment extends Fragment {

		public PlaceholderFragment() {
		}

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
				Bundle savedInstanceState) {
			View rootView = inflater.inflate(R.layout.fragment_main, container,
					false);
			return rootView;
		}
	}
}


2016-06-14 11:30:29 zice_ 阅读数 1758

开发过程中,有时候会有这样的需求:


点击某个按钮之后显示一个对话框,对话框上面有一个输入框,并且有“确认”和“取消”两个按钮。当用户点击确认按钮时,需要对输入框的内容进行判断。如果内容为空则不关闭对话框,并toast提示。

使用AlertDialog.Builder创建对话框时,可以使用builder.setNegativeButton和builder.setPositiveButton两个方法设置取消按钮和确认按钮的点击事件。然而问题在于,只要用户点击了确认按钮或者取消按钮,系统就会自动将对话框关闭。


解决此问题的方法是:

  1. 创建Builder对象
        mEdit = new EditText(this);
        AlertDialog.Builder builder=new Builder(this,AlertDialog.THEME_HOLO_LIGHT);
        builder.setTitle("设置密保问题");
        builder.setMessage("你的手机号码");
        builder.setView(mEdit);
        builder.setCancelable(false);
  1. 使用builder.setPositiveButton设置确认按钮的文字,但是不添加监听。即:
        builder.setPositiveButton("确认", null);
  1. 得到AlertDialog对象
        dialog=builder.create();
        dialog.show();
  1. 获取到对话框上的确认按钮,然后对该按钮添加普通的View.OnClickListener。在用户输入正确的时候,手动调用alertDialog.dismiss()关闭对话框。
            dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new OnClickListener() {

            @Override
                public void onClick(View v) {
                    String mB=mEdit.getText().toString().trim();
                    if (!TextUtils.isEmpty(mB)) {//密保不为空
                        dialog.dismiss();
                    }else {
                    Toast.makeText(GuideGesturePasswordActivity.this, "密保为空",Toast.LENGTH_SHORT).show();
                    }
                }
            });

问题完美解决。

2017-11-11 21:34:39 xinpengfei521 阅读数 15297

#Android实现密码隐藏显示

需求:当用户点击提现按钮的时候,弹出输入支付密码的popupwindow,输入密码框后面有显示和隐藏支付密码的切换按钮。

老规矩先验货:

这里写图片描述

这里写图片描述

##1.布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="275dp"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="#FFFFFF"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tvRecharge"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:gravity="center"
            android:text="支付密码验证"
            android:textSize="18sp" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:background="#11000000"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <EditText
                android:id="@+id/etPayPwd"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@null"
                android:hint="输入支付密码"
                android:inputType="textPassword"
                android:padding="10dp"
                android:paddingRight="10dp" />

            <ToggleButton
                android:id="@+id/togglePwd"
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:layout_marginRight="10dp"
                android:background="@drawable/toggle_pwd_selector"
                android:padding="10dp"
                android:textOff=""
                android:textOn="" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/tvCancel"
                android:layout_width="0dp"
                android:layout_height="48dp"
                android:layout_weight="1"
                android:gravity="center"
                android:text="取消"
                android:textSize="16sp" />

            <TextView
                android:id="@+id/tvConfirm"
                android:layout_width="0dp"
                android:layout_height="48dp"
                android:layout_weight="1"
                android:gravity="center"
                android:text="确定"
                android:textSize="16sp" />
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

##2.代码实现

public class MainActivity extends AppCompatActivity {

    private PopupWindow popupWindow;
    private View popupView;
    private EditText etPayPwd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnWithdraw = (Button) findViewById(R.id.btnWithdraw);
        btnWithdraw.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showPayPwdDialog();
                BrightnessManager.lightOff(MainActivity.this);
            }
        });
    }

    private void showPayPwdDialog() {
        if (popupWindow == null) {
            popupView = View.inflate(MainActivity.this, R.layout.popupwindow_pay_pwd, null);
            popupWindow = new PopupWindow(popupView, WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.MATCH_PARENT);
            popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
                @Override
                public void onDismiss() {
                    BrightnessManager.lightOn(MainActivity.this);
                    etPayPwd.setText("");
                }
            });
            popupWindow.setBackgroundDrawable(new BitmapDrawable());
            popupWindow.setFocusable(true);
            popupWindow.setOutsideTouchable(true);

            ToggleButton togglePwd = (ToggleButton) popupView.findViewById(R.id.togglePwd);
            etPayPwd = (EditText) popupView.findViewById(R.id.etPayPwd);
            togglePwd.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (isChecked) {
                        //如果选中,显示密码
                        etPayPwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                    } else {
                        //否则隐藏密码
                        etPayPwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
                    }
                }
            });

            popupView.findViewById(R.id.tvCancel).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    popupWindow.dismiss();
                    BrightnessManager.lightOn(MainActivity.this);
                }
            });

            popupView.findViewById(R.id.tvConfirm).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String payPwd = etPayPwd.getText().toString();
                    popupWindow.dismiss();
                    BrightnessManager.lightOn(MainActivity.this);
                    if (!TextUtils.isEmpty(payPwd)) {
                        Toast.makeText(MainActivity.this, "提现请求提交成功!", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }

        if (popupWindow.isShowing()) {
            popupWindow.dismiss();
            BrightnessManager.lightOn(MainActivity.this);
        }
        popupWindow.showAtLocation(MainActivity.this.findViewById(R.id.activity_main),
                Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
    }
}

demo传送门:http://download.csdn.net/download/xinpengfei521/10114649

OK!今天双11,马云硬是将光棍节过成了购物狂欢节,你让我们这些光棍儿们怎么想?好吧,与我们没关系,咱们继续撸咱们的代码,为了早日迎娶白富美,走向人生巅峰,继续撸不要停!!!

本文首发于我的微信公众号,更多干货文章,请扫描二维码订阅哦:

您可以扫描上面的二维码,来关注我的微信公众号,来学习更多的干货文章!

另外,我还建了一个免费的知识星球,感兴趣的微信扫码即可加入!

image

没有更多推荐了,返回首页