一、效果图如下


在开发的时候,有时需要可控的显示和隐藏输入框,下面是自己写的demo,贴出来共享

activity_update_password.xml

<?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" >    <include layout="@layout/titlebar_update_password" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical"        android:padding="2dp" >        <RelativeLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginLeft="5dp"            android:layout_marginRight="5dp"            android:layout_marginTop="5dp" >            <TextView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_alignParentLeft="true"                android:text="@string/Current_Password" />            <TextView                android:id="@+id/activity_update_show01"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_alignParentRight="true"                android:layout_marginTop="5dp"                android:clickable="true"                android:onClick="showPassword"                android:padding="5dp"                android:text="@string/Show_Password"                android:textColor="@drawable/read_more_btn"                android:textSize="10sp" />        </RelativeLayout>        <EditText            android:id="@+id/activity_update_currentPassword"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginTop="10dp"            android:background="@android:drawable/edit_text"            android:hint="@string/Current_Password"            android:singleLine="true"            android:textColor="#000000"            android:inputType="textPassword"            android:textCursorDrawable="@null" />        <RelativeLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginLeft="5dp"            android:layout_marginRight="5dp"            android:layout_marginTop="5dp" >            <TextView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_alignParentLeft="true"                android:text="@string/New_Password" />            <TextView                android:id="@+id/activity_update_show02"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_alignParentRight="true"                android:layout_marginTop="5dp"                android:clickable="true"                android:onClick="showPassword"                android:padding="5dp"                android:text="@string/Show_Password"                android:textColor="@drawable/read_more_btn"                android:textSize="10sp" />        </RelativeLayout>        <EditText            android:id="@+id/activity_update_newPassword"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginTop="10dp"            android:background="@android:drawable/edit_text"            android:hint="@string/New_Password"            android:singleLine="true"            android:textColor="#000000"             android:inputType="textPassword"            android:textCursorDrawable="@null" />        <RelativeLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginLeft="5dp"            android:layout_marginRight="5dp"            android:layout_marginTop="5dp" >            <TextView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_alignParentLeft="true"                android:text="@string/confirm_password" />            <TextView                android:id="@+id/activity_update_show03"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_alignParentRight="true"                android:layout_marginTop="5dp"                android:clickable="true"                android:onClick="showPassword"                android:padding="5dp"                android:text="@string/Show_Password"                android:textColor="@drawable/read_more_btn"                android:textSize="10sp" />        </RelativeLayout>        <EditText            android:id="@+id/activity_update_confirmPassword"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginTop="10dp"            android:background="@android:drawable/edit_text"            android:hint="@string/confirm_password"            android:singleLine="true"            android:textColor="#000000"       <span style="color:#ff6666;">      android:inputType="textPassword"</span>            android:textCursorDrawable="@null" />        <Button            android:id="@+id/activity_update_updatePassword"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginTop="10dp"            android:background="@drawable/theme_btn"            android:text="@string/Update_Password" />    </LinearLayout></LinearLayout>
Update按钮点击效果

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:drawable="@drawable/theme_blue_normal" android:state_enabled="true" android:state_window_focused="false"/>    <item android:drawable="@drawable/theme_blue_normal" android:state_enabled="false"/>    <item android:drawable="@drawable/theme_blue_press" android:state_pressed="true"/>    <item android:drawable="@drawable/theme_blue_normal" android:state_focused="true"/></selector>

需要提供2张图片背景即可,即点击前后的背景图片

文字点击效果

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_pressed="true" android:color="#f00"/>    <item android:state_focused="true" android:color="@color/activity_search_title_bg"/>    <item android:color="@color/activity_search_title_bg"/></selector>
需要2种颜色,即点击前后的文字颜色

主类

package com.chinabuye.android.activity;import http.HttpRestClient;import http.JsonHttpResponseHandler;import org.json.JSONException;import org.json.JSONObject;import tool.NewTokenCallBack;import tool.TokenTools;import tool.UserInfo;import android.app.Activity;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.os.Bundle;import android.os.Handler;import android.text.InputType;import android.text.method.HideReturnsTransformationMethod;import android.text.method.PasswordTransformationMethod;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import com.chinabuye.android.R;public class UpdatePasswordActivity extends Activity implements OnClickListener {private EditText currentPassword;private EditText newPassword;private EditText confirmPassword;private ImageView back;private Button updateBtn;private AlertDialog dialog;<span style="color:#ff6666;">private boolean mbDisplayFlg01 = false; // 用于动态显示和隐藏密码private boolean mbDisplayFlg02 = false;private boolean mbDisplayFlg03 = false;</span>@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);manageActivity();setContentView(R.layout.activity_update_password);initView();}private void initView() {currentPassword = (EditText) this.findViewById(R.id.activity_update_currentPassword);newPassword = (EditText) this.findViewById(R.id.activity_update_newPassword);confirmPassword = (EditText) this.findViewById(R.id.activity_update_confirmPassword);updateBtn = (Button) this.findViewById(R.id.activity_update_updatePassword);updateBtn.setOnClickListener(this);back = (ImageView) this.findViewById(R.id.activity_update_back);back.setOnClickListener(this);createDialog();}private void manageActivity() {ActivityInstanceManager.getActivityInstanceManager().addActivity(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.activity_update_updatePassword:String currentPass = currentPassword.getText().toString().trim();String newPass = newPassword.getText().toString().trim();String confirmPass = confirmPassword.getText().toString().trim();if ("".equals(currentPass) || currentPass == null) {Toast.makeText(this, R.string.Current_password_cannot_be_empty, Toast.LENGTH_LONG).show();break;}if ("".equals(newPass) || newPass == null) {Toast.makeText(this, R.string.New_password_connot_be_empty, Toast.LENGTH_LONG).show();break;}if ("".equals(confirmPass) || confirmPass == null) {Toast.makeText(this, R.string.confirm_password_connot_be_empty, Toast.LENGTH_LONG).show();break;}if (!confirmPass.equals(newPass)) {Toast.makeText(this, R.string.The_password_donnot_match, Toast.LENGTH_LONG).show();break;}//判断输入的格式是否是邮箱格式if (currentPass.equals(newPass)) {Toast.makeText(this, R.string.The_same_password_enter_again, Toast.LENGTH_LONG).show();break;}updatePasswordMethod(currentPass, newPass);break;case R.id.activity_update_back:finish();break;default:break;}}public void showPassword(View view) {<span style="color:#ff6666;">switch (view.getId()) {case R.id.activity_update_show01:if (!mbDisplayFlg01) {// display password text, for example "123456",从隐藏到显示currentPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());} else {// hide password, display ".",从显示到隐藏currentPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());}mbDisplayFlg01 = !mbDisplayFlg01;currentPassword.postInvalidate();break;case R.id.activity_update_show02:if (!mbDisplayFlg02) {// display password text, for example "123456",从隐藏到显示newPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());} else {// hide password, display ".",从显示到隐藏newPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());}mbDisplayFlg02 = !mbDisplayFlg02;newPassword.postInvalidate();break;case R.id.activity_update_show03:if (!mbDisplayFlg03) {// display password text, for example "123456",从隐藏到显示confirmPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());} else {// hide password, display ".",从显示到隐藏confirmPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());}mbDisplayFlg03 = !mbDisplayFlg03;confirmPassword.postInvalidate();break;default:break;}</span>}private void updatePasswordMethod(final String currentPass, final String newPass) {TokenTools.requestNewToken(this, new NewTokenCallBack() {@Overridepublic void getNewTokenSuccess(String newAccessToken) {if (newAccessToken != null) {String customerid = UserInfo.getUserInfoInstance().getUserid();if (customerid == null || "".equals(customerid)) {Toast.makeText(UpdatePasswordActivity.this, R.string.There_are_some_problems_with_customerid, Toast.LENGTH_LONG).show();} else {HttpRestClient.updatePassword(UpdatePasswordActivity.this, customerid, currentPass, newPass, newAccessToken, new JsonHttpResponseHandler() {@Overridepublic void onSuccess(JSONObject response) {super.onSuccess(response);try {String result = response.getString("result");if ("true".equals(result)) {String desc = response.getString("desc");handler.sendEmptyMessage(1);} else {Toast.makeText(UpdatePasswordActivity.this, UpdatePasswordActivity.this.getResources().getString(R.string.Some_problems_have_arisen), Toast.LENGTH_LONG).show();}} catch (JSONException e) {e.printStackTrace();}}});}}}});}private Handler handler = new Handler() {@Overridepublic void handleMessage(android.os.Message msg) {switch (msg.what) {case 1:if (dialog != null)dialog.show();break;default:break;}};};private void createDialog() {dialog = new AlertDialog.Builder(this).setIcon(R.drawable.ic_launcher).setCancelable(false).setTitle("Exit Dialog").setMessage(R.string.You_have_successfully_changed_the_password).setPositiveButton("Exit", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 将存储在本地的密码设置为空SharedPreferences sp = UpdatePasswordActivity.this.getSharedPreferences("userInfo", Context.MODE_WORLD_READABLE);Editor editor = sp.edit();editor.putBoolean("isLogout", true);editor.putString("PASSWORD", null);editor.commit();Intent intent = new Intent(UpdatePasswordActivity.this, LoginActivity.class);startActivity(intent);finish();}}).create();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {if (dialog.isShowing()) {return true;} else {Intent intent = new Intent(UpdatePasswordActivity.this, HelpAboutActivity.class);intent.setAction("update_to_helpabout");startActivity(intent);finish();}}return super.onKeyDown(keyCode, event);}}

主类是我从项目中抠出来的,关键部分用红色标记。

更多相关文章

  1. 【Android(安卓)开发教程】FrameLayout帧布局
  2. 网页中android Toast效果的实现
  3. Android(安卓)之WebView实现下拉刷新和其他相关刷新功能
  4. Android动画学习三(Activity跳转动画)
  5. Android(安卓)添加标签;角标;控件角落添加Tip
  6. Android(安卓)Gradle打包签名的方式
  7. 【Android(安卓)界面效果4】android背景选择器selector用法汇总
  8. Android新闻公告切换效果(上下滚动&左右滚动)
  9. android仿人人网右边可推出的效果

随机推荐

  1. Spring SpEL系列二 @Value,xml, Java代码
  2. java必备——网络编程初解
  3. 蓝桥杯--第七届决赛:路径之谜
  4. 异步执行多个任务并在JavaScript函数中返
  5. Java-控制台传递参数
  6. 怎样让自己对编程感兴趣?
  7. 数据结构-java与c实现带头结点的单链表
  8. 本地方法中printf如何传给java--java系统
  9. Maven:主线程中的NoClassDefFoundError
  10. spring boot返回date类型