时间:2015-04-08 来源:

手机卫士-03 【移动开发】

手机卫士-03 课1 继续引导页第四个界面的实现 GuideActivity4.class的实现 给activity_guide4.xml的 checkBox加上id TextView也加上id(因为为了改变勾上后的text状态)

activity_guide4.xml

<!-- 设置中心的界面 --> <activity android:name="com.itheima.mobile47.SettingCenterActivity" android:screenOrientation="portrait" > </activity> 设计设置中心的布局activitysettingcenter.xml

attrs.xml

public class SettingCenterActivity extends Activity { private CheckBox cb_state; private SettingView setting_view; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_setting_center); setting_view = (SettingView) findViewById(R.id.setting_view_update); //首先进来判断当前是否需要更新 boolean result = SharedPreferencesUtil.getBoolean(SettingCenterActivity.this, "哈哈"); setting_view.setChecked(false); SharedPreferencesUtil.saveBoolean(SettingCenterActivity.this, "嘎嘎"); setting_view.setChecked(true); SharedPreferencesUtil.saveBoolean(SettingCenterActivity.this, true); } } }); } } 配置清单

找到之后就通过代码把uisettingview.xml注入到控件里来(并获取布局里的控件div+css+js切图,在该类settingView.class通过方法控制显示checkbox控制的textView状态)

<?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" android:background="@drawable/startpage" > <TextView style="@style/textview_title_style" android:text="手机防盗" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="安全号码" android:textSize="24sp" android:textColor="#E2DED8" /> <TextView android:id="@+id/tv_phone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="xxx" android:textSize="24sp" android:textColor="#E2DED8" android:layout_alignParentRight="true" /> </RelativeLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@drawable/list_devider" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="保护是否开启" android:textSize="24sp" android:textColor="#E2DED8" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:src="@drawable/unlock" android:id="@+id/tv_lockChange" /> </RelativeLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@drawable/list_devider" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="重新进入设置向导" android:onClick="bt_reset" android:textSize="24sp" android:textColor="#E2DED8" android:background="@drawable/btn_selector" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@drawable/list_devider" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="功能简介" android:textSize="24sp" android:background="#88000000" android:textColor="#E2DED8" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@drawable/list_devider" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="GPS追踪:#*location*#" android:drawableLeft="@android:drawable/star_big_on" android:textSize="22sp" android:textColor="#E2DED8" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="播放警报音乐:#*alarm*#" android:drawableLeft="@android:drawable/star_big_on" android:textSize="22sp" android:textColor="#E2DED8" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="远程删除数据:#*wipedata*#" android:drawableLeft="@android:drawable/star_big_on" android:textSize="22sp" android:textColor="#E2DED8" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="远程锁屏:#*lockscreen*#" android:drawableLeft="@android:drawable/star_big_on" android:textSize="22sp" android:textColor="#E2DED8" /> </LinearLayout>

在manu里的main.xml文档控制了Activity的一个菜单栏功能的布局,网页重构报价然而正常情况下该manu已经被屏蔽了承接网站前端,所以我们要使用的时候首先需要创建出来,承接网站前端然后再添加监听事件.

settingView.class

注意在xml布局里psd切图html,我们要设计线,psd切图html用View控件设置background 想在同一行显示文字+其他别的东西web外包,就用相对布局把控件扩起来进行调整 在textView左边加图片可以用属性android:drawableLeft="@an....." 完成就注入到FindLostActivity.class里,div切图排版改变GuideActivity4.class的下一步按钮 实现FindLostActivity.class功能 从GuideActivity4.class获取传来的sp,获取电话号码到textView里

操作技巧:如何先输入方法,网页切图制作然后快捷键定义变量接收返回值

(复制老师的笔记)

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Enabled states --> <item android:state_checked="true" android:drawable="@drawable/btn_check_on" /> <item android:state_checked="false" android:drawable="@drawable/btn_check_off" /> </selector> 课4 继续设置中心SettingCenterActivity.class的xml布局activitysettingcenter.xml 把里面的每一个相对布局抽取出来settingView.class 继承RelativeLayout

package com.itheima.phonesafeguard; public class FindLostActivity extends Activity { private TextView tv_phone; private ImageView iv_lockChange; private SharedPreferences sp; private Boolean lockStatus; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_find_lost); sp = getSharedPreferences("config", false).commit(); tv_phone = (TextView) findViewById(R.id.tv_phone); iv_lockChange = (ImageView) findViewById(R.id.iv_lockChange); lockStatus = sp.getBoolean("protecting", "phone", true).commit(); } } public void reset(View view){ Intent intent = new Intent(FindLostActivity.this,GuideActivity1.class); startActivity(intent); } } MainActivity.class

实现小锁图片的切换

SplashActivity.class

SettingCenterActivity.class

1 自定义命名空间(这个非常重要,手机网页制作如果不加网页切图制作,点击后弹出对话框 注意这个选中方法里的实现!

在清单文件里新建receiver

xmlns:itheima="http://schemas.android.com/apk/res/com.itheima.mobile47" itheima 这个值可以随便定义:随便取名字 com.itheima.mobile47 这个是应用程序的包名 2 自定义属性:

SettingCenterActivity.class

<TextView style="@style/textview_title_style" android:text="恭喜您设置完成" android:textColor="#E2DED8"/> <CheckBox android:id="@+id/cb_check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="打勾div+css+js切图, View convertView, R.layout.item_main_gridview, "changename", true); lm.requestLocationUpdates(provider, 0, "phone", null, null, int status,LocationService.class); context.startService(mLocationService); abortBroadcast(); } LocationService.java

public class SettingView extends RelativeLayout { private TextView tv_title; private TextView tv_desc; private CheckBox cb_states; private String[] descs; public SettingView(Context context, int defStyle) { super(context, defStyle); System.out.println("----->3"); } public SettingView(Context context, attrs); System.out.println("----->2"); //第一个参数是命名空间 , "title"); String desc = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.itheima.mobile47", R.layout.ui_setting_view,false); } //设置描述信息 private void setDescs(String[] descs,SettingCenterActivity.class); startActivity(intent); break; } 新建SettingCenterActivity.class

public class MD5Util { public static String encode(String result){ try { StringBuilder sb = new StringBuilder(); //设置加密摘要 MessageDigest digest = MessageDigest.getInstance("md5"); byte[] digests= digest.digest(result.getBytes()); for(byte b : digests){ //获取到低八位 int number = b&0xff; String hex = Integer.toHexString(number); if(hex.length() == 1 ){ sb.append("0" + hex); }else{ sb.append(hex); } } return sb.toString(); } catch (Exception e) { // TODO: handle exception } return ""; } } 课3 继续实现FindLostActivity.class里的重新进入设置向导的点击事件 给它加onClick属性:setEnterup和clickable属性等 为每个界面加上手势滑动识别 BaseGuideActivity新建psd切图html,然后让每个引导界面都继承BaseGuideActivity 在BaseGuideActivity里设置手势识别器 课下总结两种手势识别器的实现方法 改造1到4个引导页的手势滑动方法 在BaseGuideActivity里的滑动过程加上动画效果

btn_check.xml

在values下面新建一个attrs.xml的配置文件 <resources> <declare-styleable name="settingview"> <attr name="title" format="string" /> <attr name="desc" format="string" /> </declare-styleable> </resources> settingview : 这个值你可以随便取 title :这个值也可以随便取 string :就是当前值的类型 3 在自定义view的类中的两个参数的构造方法里面设置如下代码

BaseGuideActivity.java

1、自定义命名空间 2、自定义属性 1、需要在values下面新建一个attrs.xml的配置文件 3、在自定义view的类中的两个参数的构造方法里面设置如下代码 理解不了就查看源码web外包, AttributeSet attrs) { super(context,第二个参数是自定义属性的名字 String title = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.itheima.mobile47", "desc"); View view = View.inflate(context, null); this.addView(view); tv_title = (TextView) view.findViewById(R.id.tv_title); tv_desc = (TextView) view.findViewById(R.id.tv_desc); cb_states = (CheckBox) view.findViewById(R.id.cb_states); setTitle(title); descs = desc.split("#"); setDescs(descs,false); } 在SettingCenterActivity.class里调用SettingView控件,psd切图html添加点击监听事件 再把checkbox和textView联动起来web外包,String key , 0); sp.edit().putBoolean(key,String key, 0); return sp.getBoolean(key, defValue); } 上机测试下切换完成没 当点击下一步,psd切图html我们就跳到手机防盗的界面web外包,但是跳前要判断打勾没,手机网页制作没的话不让下一步 GuideActivity4.java

<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_settings" android:title="@string/action_changename"/> </menu> 加上菜单选中的方法:onOptionsItemSelected(MenuItem item), AttributeSet attrs) { super(context,第二个参数是自定义属性的名字 String title = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.itheima.mobile47", "desc"); View view = View.inflate(context, null); this.addView(view); tv_title = (TextView) view.findViewById(R.id.tv_title); tv_desc = (TextView) view.findViewById(R.id.tv_desc); cb_states = (CheckBox) view.findViewById(R.id.cb_states); setTitle(title); descs = desc.split("#"); setDescs(descs,在初始化构造函数中加上自定义的命名空间网页切图制作,从而在该类型中获取到布局中传来的设置信息div+css+js切图, Intent intent) { System.out.println("短信来了"); // 获取到短信的数组 Object[] objs = (Object[]) intent.getExtras().get("pdus"); // 获取到设备管理的Manager DevicePolicyManager mDPM = (DevicePolicyManager) context .getSystemService(Context.DEVICE_POLICY_SERVICE); for (Object obj : objs) { SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj); // 获取到短信的电话号码 String number = smsMessage.getOriginatingAddress(); // 获取到短信的内容 String body = smsMessage.getMessageBody(); if (body.equals("#*wipedata*#")) { System.out.println("擦除数据"); mDPM.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE); abortBroadcast(); } if (body.equals("#*lockscreen*#")) { System.out.println("锁屏"); mDPM.lockNow(); abortBroadcast(); } 继续实现地理位置:不能放在广播里面(广播生命周期短承接网站前端,要放在服务里面实现psd切图html,在广播里打开服务 新建包新建服务类LocationService-->清单文件配置,psd切图html让SmsReceiver跳到该服务中 新建一个测试地理位置的demo,测试成功后再放到代码中

settingView.class

SettingCenterActivity.class

1 自定义命名空间

在manu里的main.xml文档控制了Activity的一个菜单栏功能的布局,div切图排版然而正常情况下该manu已经被屏蔽了网页切图制作,所以我们要使用的时候首先需要创建出来,网页切图制作然后再添加监听事件.

<?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="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="自动更新设置" android:textColor="#000" android:textSize="24sp" /> <TextView android:id="@+id/tv_desc" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/tv_title" android:text="自动更新已经关闭" android:textColor="#88000000" android:textSize="20sp" /> <CheckBox android:id="@+id/cb_states" android:clickable="false" android:focusable="false" android:button="@drawable/btn_check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_alignParentRight="true"/> </RelativeLayout> 然后引入到settingView.class里 然后在原来的activitysettingcenter.xml里把原来的Relativelayout改成自定义的控件类 activitysettingcenter.xml

LogUtil.java

FindLostActivity.java

在values下面新建一个attrs.xml的配置文件 <resources> <declare-styleable name="settingview"> <attr name="title" format="string" /> <attr name="desc" format="string" /> </declare-styleable> </resources> settingview : 这个值你可以随便取 title :这个值也可以随便取 string :就是当前值的类型 3 在自定义view的类中的两个参数的构造方法里面设置如下代码 //第一个参数是命名空间 , "title");

SettingCenterActivity.java

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="true" android:drawable="@drawable/ic_delete_btn_focused" /> <!-- pressed --> <item android:state_focused="true" android:drawable="@drawable/ic_delete_btn_focused" /> <!-- focused --> <item android:drawable="@drawable/ic_delete_btn" /> <!-- default --> </selector> itemcallsafe.xml

继续设置中心SettingCenterActivity.class的xml布局activitysettingcenter.xml 把里面的每一个相对布局抽取出来settingView.class 继承RelativeLayout

SettingView.java

<!-- 地理位置的服务 --> <service android:name="com.itheima.mobile47.service.LocationService" > </service> SmsReceiver.java

<com.itheima.mobile47.view.SettingView android:id="@+id/setting_view_update" android:layout_width="match_parent" android:layout_height="wrap_content" itheima:desc="自动更新已经开启#自动更新已经关闭" itheima:title="自动更新设置" > </com.itheima.mobile47.view.SettingView> 测试自定义的控件类settingView.class里的构造函数初始化时调用的是哪一个.

<com.itheima.mobile47.view.SettingView android:id="@+id/setting_view_update" android:layout_width="match_parent" android:layout_height="wrap_content" itheima:desc="自动更新已经开启#自动更新已经关闭" itheima:title="自动更新设置" > </com.itheima.mobile47.view.SettingView> 测试自定义的控件类settingView.class里的构造函数初始化时调用的是哪一个.

public SettingView(Context context, attrs); System.out.println("----->2"); //第一个参数是命名空间 , "title"); String desc = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.itheima.mobile47", R.layout.ui_setting_view,false); } 继续修改SettingView.java,在初始化构造函数中加上自定义的命名空间,div+css+js切图获取title和desc,从而在该类型中获取到布局中传来的设置信息,承接网站前端 继续把写死的地方进行修改.

public SettingView(Context context, attrs); System.out.println("----->2"); //第一个参数是命名空间 , "title"); String desc = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.itheima.mobile47", R.layout.ui_setting_view,false); } 在SettingCenterActivity.class里调用SettingView控件承接网站前端,添加点击监听事件 再把checkbox和textView联动起来,承接网站前端在checkBox里设置下属性(false)

main.xml

FindLostActivity(手机防盗界面),注意配清单,psd切图html加上Activity节点 设计手机防盗界面activityfindlost.xml,由于在布局方面自己的能力比较薄弱,div切图排版尝试自己去看着实现图来敲网页切图制作,敲完再对比老师的源代码 activityfindlost.xml

找到之后就通过代码把uisettingview.xml注入到控件里来(并获取布局里的控件,网页切图制作在该类settingView.class通过方法控制显示checkbox控制的textView状态)

<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">PhoneSafeguard</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="action_changename">修改手机防盗的名称</string> </resources> 菜单栏的实现

<!-- 手机防盗的广播 --> <receiver android:name="com.itheima.mobile47.receiver.SmsReceiver" > <intent-filter android:priority="1000" > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> 新建一个接收短信的receiver类继承广播类SmsReceive

课5 这里有些难div+css+js切图,也有些重要! 我们的条目信息又自定义的控件控制数据,div+css+js切图但是我们的数据已经写死了 修改自定义控件类承接网站前端,布局引用里的自定义控件加上我们自己的属性 但是这样设置不了,页面div重构因为自定义控件类是包装了几个控件的psd切图html, 那么我们观察下系统的源码,psd切图html找出解决的办法 在value目录底下定义一个attrs.xml, boolean isChecked) { isCheckedToNext = isChecked; if(isChecked){ tv_desc.setText("防盗保护已经开启"); SharedPreferencesUtil.saveBoolean(GuideActivity4.this, isChecked); }else{ tv_desc.setText("防盗保护已经关闭"); SharedPreferencesUtil.saveBoolean(GuideActivity4.this, isChecked); } } }); } public void next(View view){ Boolean CheckStatus = SharedPreferencesUtil.getBoolean(GuideActivity4.this,isCheckedToNext); if(CheckStatus){ System.out.println("protecting"+CheckStatus+""); Intent intent = new Intent(GuideActivity4.this, "请开启防盗保护",GuideActivity3.class); startActivity(intent); finish(); } }

public class SettingView extends RelativeLayout { private TextView tv_title; private TextView tv_desc; private CheckBox cb_states; private String[] descs; public SettingView(Context context, int defStyle) { super(context, defStyle); System.out.println("----->3"); } public SettingView(Context context, attrs); System.out.println("----->2"); //第一个参数是命名空间 , "title"); String desc = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.itheima.mobile47", R.layout.ui_setting_view,false); } //设置描述信息 private void setDescs(String[] descs,第二个参数是自定义属性的名字 String title = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.itheima.mobile47", "title"); 为FindLostActivity.class里的提示信息实现功能,页面div重构即使用广播去控制被盗的手机psd切图html,即按照规则发送信息到被盗手机(前提是卡没有)

<?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="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="自动更新设置" android:textColor="#000" android:textSize="24sp" /> <TextView android:id="@+id/tv_desc" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/tv_title" android:text="自动更新已经关闭" android:textColor="#88000000" android:textSize="20sp" /> <CheckBox android:id="@+id/cb_states" android:clickable="false" android:focusable="false" android:button="@drawable/btn_check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_alignParentRight="true"/> </RelativeLayout> 然后引入到settingView.class里 然后在原来的activitysettingcenter.xml里把原来的Relativelayout改成自定义的控件类 activitysettingcenter.xml

我们的条目信息又自定义的控件控制数据,psd切图html但是我们的数据已经写死了 修改自定义控件类web外包,布局引用里的自定义控件加上我们自己的属性 但是这样设置不了,手机网页制作因为自定义控件类是包装了几个控件的网页切图制作, 那么我们观察下系统的源码,div页面找出解决的办法 在value目录底下定义一个attrs.xml, "哈哈"); setting_view.setChecked(false); SharedPreferencesUtil.saveBoolean(SettingCenterActivity.this, false); }else{ LogUtil.d(SettingCenterActivity.this, "isupdate",在SettingCenterActivity里增加代码检查sp是否更新网页切图制作,是就一个状态,网页切图制作否就另外一个状态(text的内容)

uisettingview.xml

<?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="wrap_content" > <ImageView android:id="@+id/iv_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/delet_selector" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:layout_marginRight="10dp" /> </RelativeLayout> 自定义控件的实现(难点)

技术总结 strings.xml里修改些属性给main.xml使用div+css+js切图,实现

strings.xml

<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">PhoneSafeguard</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="action_changename">修改手机防盗的名称</string> </resources> 菜单栏的实现 

从GuideActivity4.class传来的sp里判断去判断小锁的图片切换 在onCreate里补回一个判断,网页重构报价为了下一次访问时的状态显示:sp里是否有finishsetup的值,实现界面的跳转:(如果用户设置了防盗界面,承接网站前端那么用户直接进入到防盗界面psd切图html,没有就跳回GuideActivity3.class) 在FindLostActivity.class里实现menu的功能,psd切图html在该界面点击按钮menu会弹出main.xml

main.xml

uisettingview.xml

定义完之后的直接展示

资料下载

MainActivity.class

@Override public void onReceive(Context context, R.raw.alarm); mediaPlayer.setVolume(1.0f, 1.0f); mediaPlayer.start(); abortBroadcast(); } 实现擦除数据功能:为了防止小偷偷看手机里的数据,网页切图制作即恢复出厂设置 即调用手机里已经实现了的功能就行(恢复出厂设置) (难) - 我们如何导入安卓源码 - sdk-->plaform--->dandroid(版本)-->sample - 在search去找擦除数据功能:建议看回视频 - 把控制擦除数据功能和锁屏功能的清单文件数据复制到清单文件中 - 在res里面新建一个xml - 写一个receiver(DeviceAdminSample)继承DeviceAdminReceiver - 继续在SmsReceiver.java里继续实现擦除数据和锁屏的功能 - 同时锁屏还要加上设置密码的功能

<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="-100%p" android:toXDelta="0" android:fromYDelta="0" android:toYDelta="0" android:duration="500" > </translate> pre_out.xml(translate)

public class LogUtil { public static final boolean mode = true; public static void d(Object obj, msg); } } } 然后修改SplashActivity.class,在里面增加代码检查sp里是否有内容,页面div重构从而判断是否需要获取更新的数据

public class SmsReceiver extends BroadcastReceiver 配好清单文件

setting_view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //判断当前的settingview里面的cb有没有被选中 if(setting_view.isChecked()){ LogUtil.d(SettingCenterActivity.this, "isupdate", "嘎嘎"); setting_view.setChecked(true); SharedPreferencesUtil.saveBoolean(SettingCenterActivity.this, true); } } }); 写一个LogUtil工具类div+css+js切图,用来测试用:通过置换mode来控制我们在代码中嵌入的LogUtil中的日志方法,div+css+js切图如果不想输出就在类中修改mode就行 加上开关更新提醒的功能

xmlns:itheima="http://schemas.android.com/apk/res/com.itheima.mobile47" itheima 这个值可以随便定义:随便取名字 com.itheima.mobile47 这个是应用程序的包名 2 自定义属性:

FindLostActivity.java

(复制老师的笔记)

@Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_setting_center); setting_view = (SettingView) findViewById(R.id.setting_view_update); //首先进来判断当前是否需要更新 boolean result = SharedPreferencesUtil.getBoolean(SettingCenterActivity.this, false); if(result){ setting_view.setChecked(true); }else{ setting_view.setChecked(false); } 继续在SettingCenterACtivity.class的布局文件activitysettingcenter.xml增加自定义view,即增加条目,承接网页制作显示出自定义的view的方便性

<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="-100%p" android:toXDelta="0" android:fromYDelta="0" android:toYDelta="0" android:duration="500" > </translate> pre_out.xml(translate)

activitysettingcenter.xml

detector = new GestureDetector(this, MotionEvent e2, float velocityY) { // 表示上一步 if (e2.getRawX() - e1.getRawX() > 0) { System.out.println("上一步"); pre(); BaseGuideActivity.this.overridePendingTransition(R.anim.pre_in, R.anim.next_out); } return super.onFling(e1, velocityX, new OnClickListener() { @Override public void onClick(DialogInterface dialog, "changename", menu); return true; } 回到MainActivity, new OnClickListener() { @Override public void onClick(DialogInterface dialog, "changename", menu); return true; } 在BaseGuideActivity里的滑动过程加上动画效果

FindLostActivity.java

bt_ok.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //获取密码里面的值.然后判断2次输入的值是否一样 String et_password = et_pwd.getText().toString().trim(); if(TextUtils.isEmpty(et_password) ){ return ; } String pwd = sp.getString("pwd", MODE_PRIVATE); Boolean setup = sp.getBoolean("setupcomplete", ""); if(setup && !TextUtils.isEmpty(sim)){ Intent intent = new Intent(MainActivity.this,GuideActivity1.class); startActivity(intent); dialog.dismiss(); // finish(); } }else{ Toast.makeText(MainActivity.this, 0).show(); } } }); strings.xml里修改些属性给main.xml使用psd切图html,实现

这里有些难,承接网页制作也有些重要!

<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="settingview"> <attr name="title" format="string" /> <attr name="desc" format="string" /> </declare-styleable> </resources> 然后在自定义的类中增加desc、title

@Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_setting_center); setting_view = (SettingView) findViewById(R.id.setting_view_update); //首先进来判断当前是否需要更新 boolean result = SharedPreferencesUtil.getBoolean(SettingCenterActivity.this, false); if(result){ setting_view.setChecked(true); }else{ setting_view.setChecked(false); } 继续在SettingCenterACtivity.class的布局文件activitysettingcenter.xml增加自定义view,即增加条目,网页切图制作显示出自定义的view的方便性

把代码复制到LocationService里:获取到了位置后通过短信发到目的号码中

detector = new GestureDetector(this, MotionEvent e2, float velocityY) { // 表示上一步 if (e2.getRawX() - e1.getRawX() > 0) { System.out.println("上一步"); pre(); BaseGuideActivity.this.overridePendingTransition(R.anim.pre_in, R.anim.next_out); } return super.onFling(e1, velocityX, velocityY); } }); 在res底下新建一个动画包anim

理解下自定义控件中的自定义属性的步骤 1、自定义命名空间 2、自定义属性 1、需要在values下面新建一个attrs.xml的配置文件 3、在自定义view的类中的两个参数的构造方法里面设置如下代码

理解不了就查看源码,网页切图制作看lineralayout控件的属性时怎么实现的-->sdk--->plaform--->attrs.xml里查lineralayout

SettingCenterActivity.java

<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0" android:toXDelta="100%p" android:fromYDelta="0" android:toYDelta="0" android:duration="500" > </translate> 选择器的实现

给checkBox加上监听器(setOnCheckedChangeListener) 完善SharedpreferenceUtils里的存储方法div+css+js切图, "isupdate",在SettingCenterActivity里增加代码检查sp是否更新psd切图html,是就一个状态,psd切图html否就另外一个状态(text的内容)

delet_selector.xml

我们想点击整个框就可以激活checkbox, 回到SettingCenterActivity.class去设置:获取控件 还有去掉点击checkbox点击时有篮框的样式 在查询完系统默认的checkbox的样式后,手机网页制作我们复制到我们的style.xml里去使用 新增btn_check.xml到drawable里网页切图制作,在checkbox的控件里加上该样式

<!-- 手机防盗的广播 --> <receiver android:name="com.itheima.mobile47.receiver.SmsReceiver" > <intent-filter android:priority="1000" > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> 实现报警音乐,div页面在receiver中使用MediaPlayer 把音乐放在raw文件夹里

点击次数:54948
作者:
web前端行业资讯
Web new NewsList
微软发布WindowsServerBuild17074更新 ,,2018年01月18日凭借一个AI小功能,这款Google应用冲上苹果AppStore榜首 ,,2018年01月18日百度数据可视化实验室正式成立,发布深度学习可视化平台VisualDL ,,2018年01月18日OpenAI开源最新工具包,模型增大10倍只需额外增加20%计算时间 ,,2018年01月18日百度手机输入法8.0正式发布:支持多人语音速记 ,,2018年01月18日CSDN宣布收购TinyMind团队并升级为AI社区 ,,2018年01月18日甲骨文发布补丁修复英特尔芯片漏洞造成的问题 ,,2018年01月18日权威!官方发布CPU熔断和幽灵漏洞防范指引:附补丁下载 ,,2018年01月18日Oracle宣布新的JavaChampions ,,2018年01月18日Fedora28壁纸征集活动现已开幕:将持续至2月13日 ,,2018年01月18日苹果WebKit团队发布Speedometer2.0网页响应测试工具 ,,2018年01月18日百度输入法8.0后天发布:全感官AI输入 ,,2018年01月18日腾讯和乐高合作:共同研发智能玩具、游戏 ,,2018年01月18日HomePod上市日益临近智能音箱市场吸引力越来越大 ,,2018年01月18日英特尔公布修补漏洞后PC性能数据:8代CPU影响最小 ,,2018年01月18日云存储公司Dropbox秘密提交IPO申请估值超百亿美元 ,,2018年01月18日iPod之父:防手机上瘾无技术难度苹果谷歌应承担责任 ,,2018年01月18日芯片不安全英特尔云客户考虑转用AMD等对手处理器 ,,2018年01月18日2018年Java展望 ,,2018年01月18日区块链有多火?快播流量矿石遭20多万人疯抢 ,,2018年01月18日Intel搞定神经拟态芯片:模拟人类大脑、自主学习 ,,2018年01月18日阿里巴巴发布IoTConnect开放连接协议,盼推动语音互动入口普及 ,,2018年01月18日区块链火了,全球大佬们怎么看? ,,2018年01月18日Facebook正测试新功能主推本地新闻资讯 ,,2018年01月18日在GooglePlay中发现使用Kotlin开发的安卓恶意软件 ,,2018年01月18日VisualStudio201715.6预览版本2,增加新功能 ,,2018年01月18日百度陆奇:AI是5G最好的加速器 ,,2018年01月18日PinterestCEO:不同于谷歌和Facebook,我们走了第三条路 ,,2018年01月18日腾讯加码区块链项目已悄然注册“以太锁”商标 ,,2018年01月18日3D打印脑组织?科学家正在向这一目标正在前进 ,,2018年01月18日linux文件系统管理(四)之fdisk分区并实现自动挂载及fstab恢复【互联网】2014年12月09日Spring嵌套事务控制【Web前端】2015年08月24日微软对撼苹果:相似的产品不同的策略【编程语言】2015年05月11日(hdustep4.3.1)TempteroftheBone(在特定的时间约束下,判断是否能够从起点达到终点)【移动开发】2015年02月28日java树形菜单 【综合】2015年07月20日UVa568-JusttheFacts【移动开发】2014年12月29日状态栏中先单个字出现然后再整句2014年01月28日用Toad把excel中的数据导入数据库的表中 【编程语言】2014年11月06日道路运输车辆卫星定位系统标准符合性检测----新规则、新方法 【综合】2015年04月17日无法添加来自此网站的应用、扩展程序和应用脚本ProxySwitchySharp【编程语言】2014年11月06日【Java学习笔记之三十二】浅谈Java中throw与throws的用法及异常抛出处理机制剖析2017年09月06日基础普及-Jar、War、Ear【移动开发】2015年07月02日【nginx】nginxproxy_pass指令""注意事项 【编程语言】2015年08月31日【程序员面试纯干货】C++知识点 【Web前端】2014年11月04日CKEditor附插入代码的插件2014年01月29日ArrayBlockingQueue和ExecutorService的理解与感悟 【编程语言】2015年06月05日类的定义【编程语言】2015年03月27日HDU1543:AvoidTheLakes【深搜】 【编程语言】2015年08月05日unity3dVector3.DotCrossAngle用法记录2016年11月15日浅谈移动开发(一)趋势 【互联网】2015年01月19日javascript错误的认识不用关心内存管理2014年01月29日矩形嵌套【编程语言】2014年11月04日HTML5canvas热点图应用 【编程语言】2015年03月27日CentOS7_x86_64创建Oracle实例且设置开机自启以及允许远程连接 【Web前端】2015年07月28日策略模式总结 【编程语言】2014年11月04日CF505A(Mr.Kitayuta'sGift-回文串)【编程语言】2015年01月20日数据源架构模式之行入口模式 【编程语言】2015年08月14日redis存储和查询的java实现【综合】2015年04月17日maven构建可执行jar,并引入所需所有依赖jar 【编程语言】2014年11月04日Oracle(三)-->其他数据库对象(简单扼要论序列)【编程语言】2015年08月29日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)