在主界面点击第一个功能“手机防盗”进入手机防盗页面,如果是第一次进入则弹出密码设置框让用户设置密码,否则弹出密码输入框让用户输入密码进入。
界面效果图:
新建“手机防盗”页面,Activity为LostProtectedActivity,layout为layout\activity_lostprotected.xml,界面布局下一节详细设计,目前为一个空白页面。
添加MainActivity对Item点击的事件处理代码,当点击第一个item的时候进入LostProtectedActivity:
package com.example.mobilesafe;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
/**
* Created by sing on 13-12-24.
* desc:
*/
public class MainActivity extends Activity {
//activity_main中的gridview控件
private GridView gv_main;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gv_main = (GridView)findViewById(R.id.gv_main);
//为gv_main对象设置适配器,该适配器为每个item填充对应的数据
gv_main.setAdapter(new MainAdapter(this));
//为gv_main设置点击item的处理事件
gv_main.setOnItemClickListener(new AdapterView.OnItemClickListener() {
/**
* item点击事件
* @param adapterView
* @param view
* @param i
* @param l
*/
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = null;
switch (i) {
case 0: //手机防盗
intent = new Intent(MainActivity.this, LostProtectedActivity.class);
startActivity(intent);
break;
case 8: //设置中心
intent = new Intent(MainActivity.this, SettingCenterActivity.class);
startActivity(intent);
break;
}
}
});
}
}
LostProtectedActivity的onCreate里判断是否是第一次进入“手机防盗”,判断的依据是配置文件中是否有设置过密码。如果是第一次进入该页面则弹出密码设置对话框,如图一,否则弹出密码输入对话框,如图二。
package com.example.mobilesafe;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.example.utils.util;
/**
* Created by sing on 13-12-25.
* desc:
*/
public class LostProtectedActivity extends Activity implements View.OnClickListener {
//保存配置
private SharedPreferences sp;
private AlertDialog dialog;
//第一次进入手机防盗弹出设置密码对话框的控件
private EditText et_first_dlg_pswd;
private EditText et_first_dlg_pswd_confirm;
private Button bt_first_dlg_ok;
private Button bt_first_dlg_cancel;
//非第一次进入手机防盗弹出设置密码对话框的控件
private EditText et_normal_dlg_pswd;
private Button bt_normal_dlg_ok;
private Button bt_normal_dlg_cancel;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lostprotected);
sp = getSharedPreferences("config", MODE_PRIVATE);
//如果是第一次进入手机防盗则弹出设置密码对话框,否则弹出输入密码对话框
if (isFirstEntry()) {
showFirstEntryDialog();
}else {
showNormalEntryDialog();
}
}
/**
* 判断是否是第一次进入手机防盗页面,判断方法是检测有没有设置过密码
* @return
*/
private boolean isFirstEntry() {
String password = sp.getString("password", "");
return password.isEmpty();
}
/**
*第一次进入手机防盗弹出设置密码对话框
*/
private void showFirstEntryDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
View view = View.inflate(this, R.layout.first_entry_dialog, null);
et_first_dlg_pswd = (EditText)view.findViewById(R.id.et_first_dlg_pswd);
et_first_dlg_pswd_confirm = (EditText)view.findViewById(R.id.et_first_dlg_pswd_confirm);
bt_first_dlg_ok = (Button)view.findViewById(R.id.bt_first_dlg_ok);
bt_first_dlg_cancel = (Button)view.findViewById(R.id.bt_first_dlg_cancel);
//xml中已经设置android:onClick="onClick",这里无需再设置
//bt_first_dlg_ok.setOnClickListener(this);
//bt_first_dlg_cancel.setOnClickListener(this);
builder.setView(view);
dialog = builder.create();
dialog.show();
}
/**
*非第一次进入手机防盗弹出输入密码对话框
*/
private void showNormalEntryDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
View view = View.inflate(this, R.layout.normal_entry_dialog, null);
et_normal_dlg_pswd = (EditText)view.findViewById(R.id.et_normal_dlg_pswd);
bt_normal_dlg_ok = (Button)view.findViewById(R.id.bt_normal_dlg_ok);
bt_normal_dlg_cancel = (Button)view.findViewById(R.id.bt_normal_dlg_cancel);
//xml中已经设置android:onClick="onClick",这里无需再设置
//bt_normal_dlg_ok.setOnClickListener(this);
//bt_normal_dlg_cancel.setOnClickListener(this);
builder.setView(view);
dialog = builder.create();
dialog.show();
}
@Override
public void onClick(android.view.View view) {
switch (view.getId()) {
case R.id.bt_first_dlg_cancel:
dialog.cancel();
finish();
break;
case R.id.bt_first_dlg_ok:
String pswd = et_first_dlg_pswd.getText().toString().trim();
String pswdconfirm = et_first_dlg_pswd_confirm.getText().toString().trim();
//密码不能为空
if (pswd.isEmpty() || pswdconfirm.isEmpty()) {
Toast.makeText(this, "密码不能为空", 1).show();
return;
}
//判断两次密码输入是否相等
if (pswd.equals(pswdconfirm)) {
//保存密码
SharedPreferences.Editor editor = sp.edit();
editor.putString("password", util.md5String(pswd));
editor.commit();
dialog.dismiss();
//设置完毕后进入主界面,要求用户重新进入
finish();
}else {
Toast.makeText(this, "两次密码不相同", 1).show();
return;
}
break;
case R.id.bt_normal_dlg_cancel:
finish();
break;
case R.id.bt_normal_dlg_ok:
String inputpswd = et_normal_dlg_pswd.getText().toString().trim();
if (inputpswd.isEmpty()) {
Toast.makeText(this, "密码不能为空", 1).show();
return;
}
String savedpswd = sp.getString("password", "");
if (util.md5String(inputpswd).equals(savedpswd)) {
Toast.makeText(this, "密码正确进入界面", 1).show();
dialog.dismiss();
return;
}else {
Toast.makeText(this, "密码不正确", 1).show();
return;
}
}
}
}
isFirstEntry通过读取配置文件中password是否有被设置过来判断是否是第一次进入“手机防盗”,配置文件保存在:
/data/data/com.example.mobilesafe/shared_prefs/config.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="autoupdate" value="false" />
<string name="password">202cb962ac59075b964b07152d234b70</string>
</map>
第一次进入手机防盗弹出设置密码对话框的showFirstEntryDialog和非第一次进入手机防盗弹出输入密码对话框的showNormalEntryDialog,使用的对话框布局分别为:first_entry_dialog.xml、normal_entry_dialog.xml。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="设置密码"
android:id="@+id/textView"
android:layout_gravity="center_horizontal"
android:textSize="30sp"
android:textStyle="bold"
android:gravity="center_horizontal" />
<View
android:layout_height="1dip"
android:layout_width="fill_parent"
android:layout_marginTop="5dip"
android:background="@drawable/devide_line" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/et_first_dlg_pswd"
android:hint="请输入密码" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/et_first_dlg_pswd_confirm"
android:layout_gravity="center_horizontal"
android:hint="请再次输入密码" />
<View
android:layout_height="1dip"
android:layout_width="fill_parent"
android:layout_marginTop="5dip"
android:background="@drawable/listview_devider" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="0dip"
android:layout_height="wrap_content"
android:text="确定"
android:id="@+id/bt_first_dlg_ok"
android:onClick="onClick"
android:layout_weight="1" />
<Button
android:layout_width="0dip"
android:layout_height="wrap_content"
android:text="取消"
android:id="@+id/bt_first_dlg_cancel"
android:onClick="onClick"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="输入密码"
android:id="@+id/textView"
android:layout_gravity="center_horizontal"
android:textSize="30sp"
android:textStyle="bold"
android:gravity="center_horizontal" />
<View
android:layout_height="1dip"
android:layout_width="fill_parent"
android:layout_marginTop="5dip"
android:background="@drawable/devide_line" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/et_normal_dlg_pswd"
android:hint="请输入密码" />
<View
android:layout_height="1dip"
android:layout_width="fill_parent"
android:layout_marginTop="5dip"
android:background="@drawable/listview_devider" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="0dip"
android:layout_height="wrap_content"
android:text="确定"
android:id="@+id/bt_normal_dlg_ok"
android:onClick="onClick"
android:layout_weight="1" />
<Button
android:layout_width="0dip"
android:layout_height="wrap_content"
android:text="取消"
android:id="@+id/bt_normal_dlg_cancel"
android:onClick="onClick"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
两个按钮由于是平分所在LinearLayout容器的宽度,所以不设置它们的宽度属性,而设置权重属性:android:layout_weight="1",因为权重都设置为1,那么它们所占父容器的宽度比例就是1:1,也就是各占一半。