shape资源创建图片 (重点)
1.res -> drawable -> xxx.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<!-- shape : 图片的形状 rectangle:矩形 oval:椭圆,圆形 line:线 ring:环形-->
<!-- corners : 角的弧度 -->
<corners android:radius="32dp"/>
<!-- solid 颜色 -->
<solid android:color="#99FFFFFF"/>
<!-- size : 设置宽高 -->
<size android:width="32dp"
android:height="32dp"
/>
<!-- gradient : 渐变色 angle:渐变的角度 -->
<gradient android:startColor="#FF0000" android:centerColor="#00FF00" android:endColor="#0000FF" android:angle="-90"/>
</shape>
2.布局文件使用
<!-- layout_margin : 距离父控件上下左右的距离
scaleType : 设置图片显示类型,center:保持图片大小不变,并在ImageView中心显示
-->
<ImageView
android:id="@+id/home_btn_setting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/setting"
android:layout_alignParentRight="true"
android:layout_margin="4dp"
android:background="@drawable/shape_home_setting"
android:scaleType="center"
/>
状态选择器 (重点)
状态选择器:特殊的图片,可以根据不同的状态显示不同的图片,比如按下,抬起
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/button_pressed" /> <!-- pressed :按下显示的图片-->
<item android:state_focused="true"
android:drawable="@drawable/button_focused" /> <!-- focused :获取焦点显示的图片-->
<item android:state_hovered="true"
android:drawable="@drawable/button_focused" /> <!-- hovered :鼠标悬停显示的图片-->
<item android:drawable="@drawable/button_normal" /> <!-- default : 默认显示的状态-->
</selector>
步骤:
1.res -> drawable -> xxx.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/shape_home_setting_pressed" /> <!-- pressed :按下显示的图片-->
<item android:drawable="@drawable/shape_home_setting" /> <!-- default : 默认显示的状态-->
</selector>
2.布局文件使用,设置控件的背景
<!-- layout_margin : 距离父控件上下左右的距离
scaleType : 设置图片显示类型,center:保持图片大小不变,并在ImageView中心显示
clickable : 设置imageView可以点击
-->
<ImageView
android:id="@+id/home_btn_setting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/setting"
android:layout_alignParentRight="true"
android:layout_margin="4dp"
android:background="@drawable/selector_home_setting"
android:scaleType="center"
android:clickable="true"
/>
展示gridview的数据
1.设置获取数据
private final String[] TITLES = new String[] { "手机防盗", "骚扰拦截", "软件管家",
"进程管理", "流量统计", "手机杀毒", "缓存清理", "常用工具" };
private final String[] DESCS = new String[] { "远程定位手机", "全面拦截骚扰", "管理您的软件",
"管理运行进程", "流量一目了然", "病毒无处藏身", "系统快如火箭", "工具大全" };
private final int[] ICONS = new int[] { R.drawable.sjfd, R.drawable.srlj,
R.drawable.rjgj, R.drawable.jcgl, R.drawable.lltj, R.drawable.sjsd,
R.drawable.hcql, R.drawable.cygj };
2.设置gridview的adapter展示数据
/**
* 初始化控件 2016-9-26 下午5:17:47
*/
private void initView() {
......
// 根据listview操作一样
mGridView.setAdapter(new Myadapter());
}
private class Myadapter extends BaseAdapter {
// 设置条目的个数
@Override
public int getCount() {
return ICONS.length;
}
// 设置条目的样式
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//将布局文件转化成view对象
View view = View.inflate(getApplicationContext(), R.layout.home_gridview_item, null);
//从view对象中获取控件,展示数据
ImageView mIcon = (ImageView) view.findViewById(R.id.item_iv_icon);
TextView mTitle = (TextView) view.findViewById(R.id.item_tv_title);
TextView mDesc = (TextView) view.findViewById(R.id.item_tv_desc);
//展示数据
mIcon.setImageResource(ICONS[position]);//根据条目的索引,从数据中获取图片,设置给imageView展示
mTitle.setText(TITLES[position]);
mDesc.setText(DESCS[position]);
return view;
}
// 根据条目的索引,获取条目对应的数据
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
// 获取条目的id
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
}
Gridview的条目样式细节修改
1.修改位置距离
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="6dp"
android:background="@drawable/selector_home_gridview_item_bg"
>
<!-- padding : 距离上下左右内边框的距离 -->
<ImageView
android:id="@+id/item_iv_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/sjfd"
android:layout_centerVertical="true"
/>
<!-- gravity : 控制控件内部内容/控件的位置
layout_gravity : 控制控件在父控件的位置
layout_centerVertical : RelativeLayout中才可以使用的属性,让控件在父控件垂直居中
-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_toRightOf="@+id/item_iv_icon"
android:layout_marginLeft="6dp"
android:layout_centerVertical="true"
>
<TextView
android:id="@+id/item_tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="手机防盗"
android:textSize="18sp"
android:textColor="#000000"
android:layout_gravity="center_vertical"
/>
<TextView
android:id="@+id/item_tv_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="远程定位手机"
android:textSize="14sp"
android:textColor="#99000000"
android:layout_marginTop="5dp"
android:layout_gravity="center_vertical"
/>
</LinearLayout>
</RelativeLayout>
2.设置条目的状态选择器
res -> drawable -> xxx.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:drawable="@drawable/antispam_report_button_press"></item>
<item android:drawable="@drawable/antispam_report_button"></item>
</selector>
3.修改gridview的行与行,列与列之间的距离
<!-- numColumns : 设置显示的列数
horizontalSpacing : 设置列与列之间的距离
verticalSpacing : 行与行之间的距离
-->
<GridView
android:id="@+id/home_gv_gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="2"
android:horizontalSpacing="5dp"
android:verticalSpacing="5dp"
></GridView>
跳转设置中心界面并搭建设置中心界面
1.跳转操作
HomeActivity.java
/**
* 设置按钮的点击事件
* view:被点击的控件的view对象
* 2016-9-27 上午10:31:12
*/
public void enterSetting(View view){
//跳转设置中心界面
Intent intent = new Intent(this,SettingActivity.class);
startActivity(intent);
}
2.搭建设置中心界面
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<!-- paddingTop : 距离控件内顶边框的距离 -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="设置中心"
android:background="#429ED6"
android:textSize="20sp"
android:textColor="#FFFFFF"
android:gravity="center"
android:paddingTop="8dp"
android:paddingBottom="8dp"
/>
</LinearLayout>
样式抽取操作 (重点)
因为每个activity的标题的样式都是一样的,所有抽取到样式文件中
1.将属性样式抽取到样式文件中
res -> values -> styles.xml -> 创建style条目
<style name="ActivityTitleStyle">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:background">#429ED6</item>
<item name="android:textSize">20sp</item>
<item name="android:textColor">#FFFFFF</item>
<item name="android:gravity">center</item>
<item name="android:paddingTop">8dp</item>
<item name="android:paddingBottom">8dp</item>
</style>
2.布局文件使用样式
<!-- paddingTop : 距离控件内顶边框的距离
style: 设置使用样式
-->
<TextView
style="@style/ActivityTitleStyle"
android:text="设置中心"
/>
将设置中心条目的布局抽取到自定义组合控件操作 (重点)
1.创建设置中心条目的布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:paddingLeft="30dp"
android:paddingRight="30dp"
>
<TextView
android:id="@+id/settingview_tv_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置自动更新"
android:textColor="#000000"
android:textSize="18sp"
android:layout_centerVertical="true"
/>
<ImageView
android:id="@+id/settingview_iv_islock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/off"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
/>
</RelativeLayout>
2.创建自定义控件
public class SettingView extends RelativeLayout {
public SettingView(Context context) {
//super(context);
this(context,null);
}
public SettingView(Context context, AttributeSet attrs) {
//super(context, attrs);
this(context,attrs,-1);
}
public SettingView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView();
}
}
3.将设置中心条目的布局文件转化为view对象,添加自定义控件中
/**
* 将设置中心条目的布局,添加到自定义控件
* 2016-9-27 上午10:55:58
*/
private void initView() {
//将设置中心条目的布局,转化成view对象,添加到自定义控件中
View view = View.inflate(getContext(), R.layout.settingview, null);
this.addView(view);//将一个view对象,添加到自定义控件中
}
4.使用操作
<cn.itcast.mobliesafe05.view.SettingView
android:id="@+id/setting_sv_update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
></cn.itcast.mobliesafe05.view.SettingView>
设置条目的背景
因为每个条目的背景都不一样,所有没有抽取背景,直接单独设置
1.创建背景的状态选择器
res -> drawable -> xxx.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/first_pressed" /> <!-- pressed :按下显示的图片-->
<item android:drawable="@drawable/first_normal" /> <!-- default : 默认显示的状态-->
</selector>
2.设置设置中心中的界面的自定义控件
<cn.itcast.mobliesafe05.view.SettingView
android:id="@+id/setting_sv_update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/selector_setting_item_top"
android:layout_marginTop="8dp"
android:clickable="true"
></cn.itcast.mobliesafe05.view.SettingView>
创建自定义属性操作 (重点)
自定义属性:因为系统没有提供相关属性给我们使用,所以我们要自己创建,自己使用
参考系统的操作
sdk\platforms\android-16\data\res\values\attrs.xml -> 搜索TextView
步骤
res -> values -> attrs.xml
<resources>
<declare-styleable name="SettingView">
<!-- 设置文本的属性 -->
<attr name="title" format="string" /> <!-- name : 属性的名称 format:属性的值的类型 -->
</declare-styleable>
</resources>
检测:查看R文件是否有创建属性的标示
使用自定属性的操作 (重点)
1.布局文件中使用自定义属性
activity_setting.xml
1.1.设置命名空间
xmlns:itcast="http://schemas.android.com/apk/res/cn.itcast.mobliesafe05"
1.2.控件中如何使用
<cn.itcast.mobliesafe05.view.SettingView
android:id="@+id/setting_sv_update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/selector_setting_item_top"
android:layout_marginTop="8dp"
android:clickable="true"
itcast:title="设置自动更新"
></cn.itcast.mobliesafe05.view.SettingView>
2.因为自定义控件是否无法显示文本,显示文本是通过自定义控件中的textview显示的,所以需要将设置的文本传递给自定义控件的textview进行显示
cn.itcast.mobliesafe05.view.SettingView.java
2.1.在自定义控件获取设置给自定义控件的文本数据
public SettingView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView();
//因为自定义控件无法显示自定义属性设置的文本,所以需要将自定义属性的文本获取出来设置给textview显示
//1.获取自定义属性的值,因为AttributeSet保存到控件的所有属性的值
//通过命名空间和属性的名称,获取属性的值
//namespace : 命名空间
//name : 属性的名称
String title = attrs.getAttributeValue(NAMESPACE, "title");
}
2.2.将自定义控件中的textview初始化出来
/**
* 将设置中心条目的布局,添加到自定义控件
* 2016-9-27 上午10:55:58
*/
private void initView() {
.....
//初始化控件
mText = (TextView) view.findViewById(R.id.settingview_tv_text);
mIcon = (ImageView) view.findViewById(R.id.settingview_iv_islock);
}
2.3.将获取的属性的值设置给textview展示
public SettingView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
.........
//2.将获取的属性的值设置给textview展示了
mText.setText(title);
}
创建一个隐藏显示图片的属性
1.创建自定义的属性
res -> values -> attrs.xml
<resources>
<declare-styleable name="SettingView">
<!-- 设置文本的属性 -->
<attr name="title" format="string" /> <!-- name : 属性的名称 format:属性的值的类型 -->
<!-- 隐藏显示图片的属性 -->
<attr name="istoggle" format="boolean" />
</declare-styleable>
</resources>
2.布局文件中使用
2.1.命名空间
xmlns:itcast="http://schemas.android.com/apk/res/cn.itcast.mobliesafe05"
2.2.控件中使用
<cn.itcast.mobliesafe05.view.SettingView
......
itcast:istoggle="true"
></cn.itcast.mobliesafe05.view.SettingView>
3.在自定义控件中获取属性的值,根据属性的值设置图片隐藏显示
SettingView.java
public SettingView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
.......
//获取隐藏显示图片属性的值,根据属性的值设置图片的隐藏显示
//参数3:默认的值,表示没有获取到属性的值的时候,使用什么样的值
boolean b = attrs.getAttributeBooleanValue(NAMESPACE, "istoggle", true);
//根据获取的值,设置图片显示隐藏
mIcon.setVisibility(b ? View.VISIBLE : View.GONE);//设置控件的隐藏显示
}
开启关闭开关
1.在SettingActivity中设置条目的点击事件
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.setting_sv_update:
//按钮是开启 -> 关闭 关闭 -> 开启
break;
default:
break;
}
}
2.因为在Activity中点击条目,更改的时候自定义控件中的图片的值,所以需要在自定义控件中创建方法,方便activity调用
/**
* 提供给activity调用的方法,通过activity传递过来的值,设置开启还是关闭操作
* 2016-9-27 下午2:58:45
*/
public void setToggleOn(boolean isToggle){
//保存开关的状态
mIsToggle = isToggle;
if (isToggle) {
mIcon.setImageResource(R.drawable.on);
}else{
mIcon.setImageResource(R.drawable.off);
}
}
/**
* 提供给activity调用的,返回给activity的开关的状态
* 2016-9-27 下午3:01:41
*/
public boolean isToggle(){
return mIsToggle;
}
3.在Activity的点击事件中调用自定义控件中创建的方法使用
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.setting_sv_update:
//开启 -> 关闭 关闭 -> 开启
//问题:需要知道开关是开启还是关闭
if (mUpdate.isToggle()) {
mUpdate.setToggleOn(false);
}else{
mUpdate.setToggleOn(true);
}
break;
default:
break;
}
}
开启关闭优化操作
1.在SettingView自定义控件中创建优化的方法
/**
* 封装了开启 ->关闭 关闭 -> 开启的操作
* 2016-9-27 下午3:08:41
*/
public void toggle(){
//第一步优化
/*if (isToggle()) {
setToggleOn(false);
}else{
setToggleOn(true);
}*/
//第二步优化
/*if (mIsToggle) {
setToggleOn(!mIsToggle);
}else{
setToggleOn(!mIsToggle);
}*/
//第三步优化
setToggleOn(!mIsToggle);
}
2.在Activity中点击事件中实现调用优化方法
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.setting_sv_update:
//按钮是开启 -> 关闭 关闭 -> 开启
mUpdate.toggle();
break;
default:
break;
}
}
回显开关状态
点击条目开启/关闭按钮的时候,保存按钮的开关状态,当再次进入的时候,获取保存的状态,根据保存的状态设置按钮的开启和关闭
具体步骤:
1.创建SharedPreferences工具类,设置保存和获取数据的操作
public class SharedPreferencesUtils {
private static SharedPreferences sp;
/**
* 保存boolean信息的操作
* 2016-9-27 下午3:18:45
*/
public static void saveBoolean(Context context,String key,boolean value){
//name : 保存信息的文件的名称
if (sp==null) {
sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
}
//保存数据
//key : 保存信息的名称
//value : 保存的信息
sp.edit().putBoolean(key, value).commit();
}
/**
* 获取boolean信息的操作
* 2016-9-27 下午3:22:06
*/
public static boolean getBoolean(Context context,String key,boolean defValue){
if (sp==null) {
sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
}
//key : 保存信息的名称
//defValue : 默认的值
return sp.getBoolean(key, defValue);
}
}
2.在activity的点击事件中保存开关状态
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.setting_sv_update:
//按钮是开启 -> 关闭 关闭 -> 开启
mUpdate.toggle();
//保存开关状态,方便回显操作
SharedPreferencesUtils.saveBoolean(this, "isUpdate", mUpdate.isToggle());
break;
default:
break;
}
}
3.在再次进入activity进行回显操作
private void initView() {
mUpdate = (SettingView) findViewById(R.id.setting_sv_update);
//设置自动更新的点击事件
mUpdate.setOnClickListener(this);
//再次进入界面回显设置自动更新的开关操作
setUpdate();
}
/**
* 回显设置自动更新开关状态
* 2016-9-27 下午3:25:21
*/
private void setUpdate() {
boolean b = SharedPreferencesUtils.getBoolean(this, "isUpdate", true);
//根据保存的状态,设置开关状态
mUpdate.setToggleOn(b);
}
SharedPreferences的key的优化操作
1.创建公共接口
public interface Constants {
/**设置自动更新的key**/
public static final String ISUPDATE="isUpdate";
}
2.在代码中使用
boolean b = SharedPreferencesUtils.getBoolean(this, Constants.ISUPDATE, true);
根据保存的开关状态控制是否显示更新对话框
cn.itcast.mobliesafe05.SplashActivity.java
private void initView() {
mVersion = (TextView) findViewById(R.id.splash_tv_version);
....
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//获取保存的设置中心设置自动更新按钮的开关状态,如果是true:更新操作,如果是false:不再更新,跳转首页
boolean b = SharedPreferencesUtils.getBoolean(getApplicationContext(), Constants.ISUPDATE, true);
if (b) {
update();
}else{
//跳转到首页
enterHome();
}
}
}, 2000);//延迟多久给handler发送消息
}
设置显示设置密码对话框 (重点)
HomeActivity.java
1.设置gridview条目的点击事件
private void initView() {
....
//设置gridview的条目点击事件
mGridView.setOnItemClickListener(this);
}
/**gridview条目点击事件**/
//view : 被点击条目的view对象
//position : 被点击的条目的索引
//id : 被点击的条目的id
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
switch (position) {
case 0:
//手机防盗
//弹出设置密码/输入密码对话框
showSetPassWordDialog();
break;
}
}
2.创建设置密码对话框的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- drawableLeft : 在文本的左边设置图片
drawablePadding : 设置图片和文本的距离
-->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="初始化密码设置"
android:textColor="#000000"
android:textSize="18sp"
android:drawableLeft="@drawable/dialog_title_default_icon"
android:padding="8dp"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:background="@drawable/dialog_title_background"
/>
<!-- inputType : 设置输入的类型 -->
<EditText
android:id="@+id/dialog_et_psw"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入密码"
android:inputType="textPassword"
android:layout_margin="8dp"
/>
<EditText
android:id="@+id/dialog_et_confirm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请再次输入密码"
android:inputType="textPassword"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="8dp"
>
<Button
android:id="@+id/dialog_btn_ok"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="确定"
android:layout_marginRight="4dp"
android:background="@drawable/selector_home_dialog_ok"
android:textColor="#FFFFFF"
/>
<Button
android:id="@+id/dialog_btn_cancel"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="取消"
android:layout_marginLeft="4dp"
android:background="@drawable/selector_home_dialog_cancel"
/>
</LinearLayout>
</LinearLayout>
3.设置显示对话框
private void showSetPassWordDialog() {
AlertDialog.Builder builder = new Builder(this);
//将布局文件转化为view对象
View view = View.inflate(this, R.layout.home_setpassword_dialog, null);
//将一个布局文件的view对象设置给dialog,通过dialog显示
builder.setView(view);
builder.show();
}
设置密码对话框的操作
private void showSetPassWordDialog() {
AlertDialog.Builder builder = new Builder(this);
//将布局文件转化为view对象
View view = View.inflate(this, R.layout.home_setpassword_dialog, null);
//初始化控件,设置操作
final EditText mPsw = (EditText) view.findViewById(R.id.dialog_et_psw);
final EditText mConfirm = (EditText) view.findViewById(R.id.dialog_et_confirm);
Button mOk = (Button) view.findViewById(R.id.dialog_btn_ok);
Button mCancel = (Button) view.findViewById(R.id.dialog_btn_cancel);
//设置确定和取消按钮的点击事件
mOk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//1.获取输入的密码
String psw = mPsw.getText().toString().trim();
//判断密码是否为空
if (TextUtils.isEmpty(psw)) {// null ""
Toast.makeText(getApplicationContext(), "密码不能为空", 0).show();
//不能执行其他操作
return;
}
//2.获取再次输入密码
String confirm = mConfirm.getText().toString().trim();
//判断两次输入密码是否一致
if (psw.equals(confirm)) {
Toast.makeText(getApplicationContext(), "密码设置成功", 0).show();
//隐藏对话框
dialog.dismiss();
}else{
Toast.makeText(getApplicationContext(), "两次密码不一致", 0).show();
}
}
});
mCancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//隐藏对话框
dialog.dismiss();
}
});
//将一个布局文件的view对象设置给dialog,通过dialog显示
builder.setView(view);
//builder.show();
dialog = builder.create();
dialog.show();
}
判断弹出设置密码对话框还是输入密码对话框
1.修改SharedPreferencesUtils工具类,增加保存String类型数据的操作
/**
* 保存String信息的操作
* 2016-9-27 下午3:18:45
*/
public static void saveString(Context context,String key,String value){
//name : 保存信息的文件的名称
if (sp==null) {
sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
}
//保存数据
//key : 保存信息的名称
//value : 保存的信息
sp.edit().putString(key, value).commit();
}
/**
* 获取String信息的操作
* 2016-9-27 下午3:22:06
*/
public static String getString(Context context,String key,String defValue){
if (sp==null) {
sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
}
//key : 保存信息的名称
//defValue : 默认的值
return sp.getString(key, defValue);
}
2.在HomeActivity的设置密码对话框中,密码设置成功,保存设置的密码
private void showSetPassWordDialog() {
.....
//设置确定和取消按钮的点击事件
mOk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
......
//判断两次输入密码是否一致
if (psw.equals(confirm)) {
.......
//保存的设置的密码
SharedPreferencesUtils.saveString(getApplicationContext(), Constants.SJFDPSW, psw);
}else{
Toast.makeText(getApplicationContext(), "两次密码不一致", 0).show();
}
}
});
.....
}
3.在Gridview条目点击事件中,增加判断操作
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
switch (position) {
case 0:
//手机防盗
//弹出设置密码/输入密码对话框
//判断是弹出设置密码对话框还是弹出输入密码对话框
//可以在设置密码成功的是将密码保存,获取保存的密码来判断是弹出设置密码还是输入密码对话框
String sp_psw = SharedPreferencesUtils.getString(getApplicationContext(), Constants.SJFDPSW, "");
if (TextUtils.isEmpty(sp_psw)) {
//弹出设置密码对话框
showSetPassWordDialog();
}else{
//弹出输入密码对话框
Toast.makeText(getApplicationContext(), "弹出输入密码对话框", 0).show();
}
break;
}
}
输入密码对话框操作
参考设置密码对话框
/**
* 显示输入密码对话框
* 2016-9-27 下午4:59:58
*/
private void showEnterPassWordDialog() {
AlertDialog.Builder builder = new Builder(this);
//将布局文件转化为view对象
View view = View.inflate(this, R.layout.home_enterpassword_dialog, null);
//初始化控件,设置操作
final EditText mPsw = (EditText) view.findViewById(R.id.dialog_et_psw);
Button mOk = (Button) view.findViewById(R.id.dialog_btn_ok);
Button mCancel = (Button) view.findViewById(R.id.dialog_btn_cancel);
mOk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//1.获取输入的密码
String psw = mPsw.getText().toString().trim();
if (TextUtils.isEmpty(psw)) {
Toast.makeText(getApplicationContext(), "密码不能为空", 0).show();
return;
}
//2.判断密码输入是否正确了
//判断输入的跟保存的是否一致
String sp_psw = SharedPreferencesUtils.getString(getApplicationContext(), Constants.SJFDPSW, "");
//判断密码是否正确了
if (psw.equals(sp_psw)) {
Toast.makeText(getApplicationContext(), "密码正确", 0).show();
dialog.dismiss();
}else{
Toast.makeText(getApplicationContext(), "密码错误", 0).show();
}
}
});
mCancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
//将一个布局文件的view对象设置给dialog,通过dialog显示
builder.setView(view);
//builder.show();
dialog = builder.create();
dialog.show();
}