手机卫士Day201_定义自定义控件的属性_401、演示当前扩展的麻烦性,再增加自定义组合控件的使用情境;2、去掉setting_item_view.xml的文字,运行演示;3、在SettingItemView里加自定义组合控件的标题方法setTitle();4、在SettingActivity代码里写另外一个设置条的标题和描述信息赋值;5、参照系统控件TextView讲解系控件的属性特点;6、自定义标题属性title、描述打开属性descon、描述关闭属性descoff;7、参照系统的命名空间写自定义的命名空间,并演示删除系统命名空间报错;8、讲解自定命名空间;9、演示运行时报错;10、找到目录platforms\android-16\data\res\values\attrs.xml,参照TextView讲解;11、在工程里res/values目录下创建attrs.xm文件内容如下:?xmlversion=1.0encoding=utf-8?resourcesdeclare-styleablename=SettingItemViewattrname=titleformat=string/attrname=desc_onformat=string/attrname=desc_offformat=string//declare-styleable/resources12、属性使用,讲解两个参数的构造方法:在布局文件里面所定义的所有属性,都会被封装到AttributeSet的属性集合里面;13、得到属性值(attrs.getAttributeValue(0))并打印出来;14、使用更方便的方法:attrs.getAttributeValue();15、把得到的值关联到各个控件里去;16、删除SettingActivity用代码设置的描述信息和标题信息;17、在布局文件里多次使用自定义控件,并演示;02_总结自定义组合控件的过程_101、声明一个View对象继承相对布局,或者线性布局或者其他的ViewGroup。2、在自定义的View对象里面重写它的构造方法。在构造方法里面就把布局都初始化完毕。3、根据业务需求添加一些api方法,扩展自定义的组合控件;4、希望在布局文件里面可以自定义一些属性。5、声明自定义属性的命名空间。xmlns:itheima=、在res目录下的values目录下创建attrs.xml的文件声明你写的属性。declare-styleablename=SettingItemViewattrname=titleformat=string/attrname=desc_onformat=string/attrname=desc_offformat=string//declare-styleable7、在布局文件中写哪些你自定义的属性。8、使用这些定义的属性。自定义View对象的构造方法里面有一个带两个参数的构造方法布局文件里面定义的属性都放在AttributeSetattrs获取那些定义的属性。03_自定义对话框_401、画图两个对话框的样子;2、写大体逻辑代码;showLostFindDialog();//进入手机防盗的对话框;isSetupPwd();//判断是否设置过密码,用到共享偏好。privatebooleanisSetupPW(){Stringpassword=sp.getString(password,null);return!TextUtils.isEmpty(password);}showSetupPwdDialog();showEnterDialog();布局文件(dialog_setup.password.xml):?xmlversion=1.0encoding=utf-8?LinearLayoutxmlns:android=:layout_width=300dipandroid:layout_height=wrap_contentandroid:orientation=verticalTextViewandroid:layout_width=300dipandroid:layout_height=40dipandroid:background=#66ff6600android:gravity=centerandroid:text=设置密码android:textColor=#000000android:textSize=20sp/EditTextandroid:id=@+id/et_setup_pwdandroid:layout_width=280dipandroid:layout_height=wrap_contentandroid:hint=请输入密码/EditTextandroid:id=@+id/et_setup_pwd_confirmandroid:layout_width=280dipandroid:layout_height=wrap_contentandroid:hint=请再输入密码/LinearLayoutandroid:layout_width=280dipandroid:layout_height=wrap_contentandroid:gravity=centerandroid:orientation=horizontalButtonandroid:id=@+id/okandroid:layout_width=140dipandroid:layout_height=wrap_contentandroid:text=确定/ButtonButtonandroid:id=@+id/cancelandroid:layout_width=140dipandroid:layout_height=wrap_contentandroid:text=取消/Button/LinearLayout/LinearLayoutshowSetupPwdDialog();对话框的代码:确定按钮:Stringpassword=et_setup_pwd.getText().toString().trim();Stringpassword_confirm=et_setup_pwd_confirm.getText().toString().trim();if(TextUtils.isEmpty(password)||TextUtils.isEmpty(password_confirm)){Toast.makeText(getApplicationContext(),密码为空,0).show();return;}if(password.equals(password_confirm)){//密码相同-保存并且进入手机防盗页面Editoreditor=sp.edit();editor.putString(password,password);editor.commit();dialog.dismiss();//进入手机防盗页面Log.i(TAG,密码已经保存,进入手机防盗页面);}else{Toast.makeText(getApplicationContext(),密码不一致,0).show();return;}取消按钮前提dialog=builder.show();dialog.dismiss();3、设置密码对话框部署并找出不好看的原因,并且修改;修改大小小于父控件;4、设置密码对话框变得好看。加ID,并实现点击代码逻辑;初始化ID、取消事件--dialog抽取出去:确定事件:5、拷贝进入密码对话框布局文件,并命名为:dialog_enter_password.xml6、拷贝进入密码对话框的代码并修改7、总结:不同的布局文件里面各自的ID是可以重名的但是同一个布局文件里,相同的ID不允许重名的;04_自定义对话框的细节_10本知识点需要:手机能共享网络1、创建2.3模拟器展示对话框(有黑背景),4.12和2.3的区别,并说明原因2、解决在2.3对话框有黑背景的问题设置背景为白:android:background=#ffffffalertDialog=builder.create();alertDialog.setView(view,0,0,0,0);alertDialog.show();05_密码的MD5加密_241、为什么要加密--不加密的不安全知识拓展:root权限买过来的手机是没有root权限的;Root权限是linux系统的超级管理员权限;如果你的手机刷机了,那就有root权限模拟器能看到data/data里的数据,是为了方便开发者没有root权限的手机是看不到data/data有root权限的符号:#没有root权限的符号:$查看config.xml命令catconfig.xml2、md5算法不可逆的:原文--》密文、用系统的API可以实现;123456---密文1987----密文;算法步骤:1、用每个byte去和11111111做与运算并且得到的是int类型的值:byte&11111111;2、把int类型转成16进制并返回String类型;3、不满八个二进制位就补全;publicstaticvoidmain(String[]args)throwsNoSuchAlgorithmException{MessageDigestdigest=MessageDigest.getInstance(md5);Stringpassword=123456;byte[]result=digest.digest(password.getBytes());StringBufferbuffer=newStringBuffer();for(byteb:result){//0xff是十六进制,十进制为255intnuber=b&0xff;Stringstr=Integer.toHexString(nuber);if(str.length()==1){buffer.append(0);}buffer.append(str);}//这就是MD5加密得到的值System.out.println(buffer);}没有事先准备的算法异常;4、网站验证算法是否正确()、加密再加密再演示5、密码加盐6、合并代码进入工程(MD5Utils)7、删除config.xml(rm*),并演示;06_手机防盗设置向导的第一个界面_40准备:需要谷歌文档1、演示百度输入法设置向导2、创建LostFindActivity,在HomeActivity激活并可以进入;判断是否用户设置向导,如果没有就进入设置向导;3、创建Setup1Activity4、自定义标题样式命名:text_title_style5、自定义文本样式text_content_style(图片名star_big_on)。6、小点图片(presence_online、presence_invisible)07_自定义按钮状态背景_151、在android-16\data\res\values\styles.xml看一下系统定义的Button样式,看一下低版本和版本的区别2、看一下帮助文档(Develog/AppResources/ResourceTypes)Button如何自定义;创建drawble目录,拷贝文档中定义的案例;3、用美图秀秀自定义按钮背景(50*50),命名:button.xml4、用别人