防盗输入密码后,需要跳转到一个设置界面,第一次来需要设置一些功能,以后就不用设置了
layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="60dp" android:text="手机防盗" android:background="#00FF00" android:gravity="center" android:textSize="25sp"/> </LinearLayout>activity
public class LostFindActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_lostfind); } }
需要在manifest里声明,在homeactivity里跳转
if (password_input_digest.equals(password_saved)) { //密码跟保存的一致,则可以进入该模块 Toast.makeText(HomeActivity.this, "密码正确,即将进入设置模块", 1).show(); dialog.dismiss(); //进入该模块 Intent intent = new Intent(HomeActivity.this, LostFindActivity.class); startActivity(intent); }
在这个页面要去判断用户是否设置了,已经设置了就进入这个页面,没有的话就进入设置页面,分为四个activity,一个一个来
public class LostFindActivity extends Activity { private SharedPreferences sp; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_lostfind); sp=getSharedPreferences("config", MODE_PRIVATE); //进入这个防盗页面的时候,应该去判断,如果用户之前有过设置,则显示本页面 if (sp.getBoolean("setupcomplete", false)) { //设置过 }else { //如果没有设置过,则需要跳入到设置页面1,让用户先去设置一下 Intent intent = new Intent(this, Setup1Activity.class); startActivity(intent); } } }再来看setup1 这相当于一个欢迎界面,显示一些可设置选项,并且需要能点击 下一步 记得manifest里声明
先来布局
<?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" > <TextView android:layout_width="fill_parent" android:layout_height="60dp" android:background="#00FF00" android:gravity="center" android:text="1.欢迎使用手机防盗" android:textSize="25sp" /> <TextView android:layout_width="fill_parent" android:layout_height="30dp" android:layout_marginLeft="5dp" android:gravity="center_vertical" android:text="您的手机防盗卫士:" android:textColor="#000000" android:textSize="18sp" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:drawableLeft="@android:drawable/btn_star_big_on" android:text="SIM卡变更报警" android:gravity="center_vertical" android:textSize="16sp" android:layout_marginLeft="8dp" android:textColor="#000000"/> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:drawableLeft="@android:drawable/btn_star_big_on" android:text="GPS追踪" android:gravity="center_vertical" android:textSize="16sp" android:layout_marginLeft="8dp" android:textColor="#000000"/> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:drawableLeft="@android:drawable/btn_star_big_on" android:text="数据远程销毁" android:gravity="center_vertical" android:textSize="16sp" android:layout_marginLeft="8dp" android:textColor="#000000"/> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:drawableLeft="@android:drawable/btn_star_big_on" android:text="远程锁屏" android:gravity="center_vertical" android:textSize="16sp" android:layout_marginLeft="8dp" android:textColor="#000000"/> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_online" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_invisible" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_invisible" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_invisible" /> </LinearLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/setup1" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:text="下一步" /> </RelativeLayout> </LinearLayout>
但是明显可以优化,因为textView里有大量重复代码,应该抽取出来,自定义样式,values下styles里定义
<style name="setup1_item"> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:drawableLeft">@android:drawable/btn_star_big_on</item> <item name="android:gravity">center_vertical</item> <item name="android:textSize">16sp</item> <item name="android:layout_marginLeft">8dp</item> <item name="android:textColor">#000000</item> </style>
可以代替掉
<TextView style="@style/setup1_item" android:text="SIM卡变更报警" /> <TextView style="@style/setup1_item" android:text="GPS追踪" /> <TextView style="@style/setup1_item" android:text="数据远程销毁" /> <TextView style="@style/setup1_item" android:text="远程锁屏" />
OK,要给这个button来一个响应
<Button android:onClick="next" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:text="下一步" />
点这个按钮会跳到另一个页面,先来实现这个页面,这其中又用到了之前的自定义控件和定义styles属性来减少重复
<style name="setup_button_pre"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:layout_alignParentBottom">true</item> <item name="android:layout_alignParentLeft">true</item> <item name="android:onClick">previous</item> <item name="android:text">上一步</item> </style> <style name="setup_button_next"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:layout_alignParentBottom">true</item> <item name="android:layout_alignParentRight">true</item> <item name="android:onClick">next</item> <item name="android:text">下一步</item> </style>
完整layout
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:rjl="http://schemas.android.com/apk/res/com.rjl.mobilephonemanager" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="60dp" android:background="#00FF00" android:gravity="center" android:text="2.手机卡的绑定" android:textSize="25sp" /> <TextView android:layout_width="fill_parent" android:layout_height="30dp" android:layout_marginLeft="5dp" android:gravity="center_vertical" android:text="通过绑定手机卡:" android:textColor="#000000" android:textSize="18sp" /> <TextView android:layout_marginTop="5dp" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:gravity="center_vertical" android:text="下次重启手机,如果发现sim卡变化n就会发送报警短信" android:textColor="#000000" android:textSize="18sp" /> <com.rjl.mobilephonemanager.ui.SettingItem android:id="@+id/settingitem_autoupdate" android:layout_width="fill_parent" android:layout_height="wrap_content" rjl:itemtitle="点击绑定sim卡" rjl:desc_checkbox_on="已经绑定" rjl:desc_checkbox_off="尚未绑定"/> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal" android:layout_marginTop="5dp"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_invisible" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_online" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_invisible" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_invisible" /> </LinearLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/bind" /> </RelativeLayout> </LinearLayout>
那么从1跳到2,2还要能回跳到1,都需要finish自己,任务栈
public void next(View v){ Intent intent = new Intent(this, Setup2Activity.class); startActivity(intent); finish(); }
public class Setup2Activity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_setup2); } public void next(View v){ } public void previous() { // TODO Auto-generated method stub Intent intent = new Intent(this, Setup1Activity.class); startActivity(intent); finish(); } }
1、2之间的跳转完毕,现在来完善2
这里每一个属性之间都要一个横线,前面的设置中心settingitem也需要添加一个,这里也需要
<View android:layout_width="fill_parent" android:layout_height="0.5dp" android:background="#000000" android:layout_alignParentBottom="true"/> </RelativeLayout>
tv_setting_title.setText(itemname); //防盗设置页面2需要一个默认开启 tv_setting_description.setText(desc_checkbox_off);
有个小问题,settingitem里面应该是60dp
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="60dp" >
完善上一步和下一步这些button,鼠标点击上去的一瞬间应该是变色的,用户体验会比较好
button本身是一个view,其各种属性是在sdkplatformsandroid-19dataresvaluesstyles下定义的
<style name="Widget.Button"> <item name="android:background">@android:drawable/btn_default</item> <item name="android:focusable">true</item> <item name="android:clickable">true</item> <item name="android:textAppearance">?android:attr/textAppearanceSmallInverse</item> <item name="android:textColor">@android:color/primary_text_light</item> <item name="android:gravity">center_vertical|center_horizontal</item> </style>
而背景属性又在sdkplatformsandroid-19dataresdrawable的btn_default里定义
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/btn_default_normal" /> <item android:state_window_focused="false" android:state_enabled="false" android:drawable="@drawable/btn_default_normal_disable" /> <item android:state_pressed="true" android:drawable="@drawable/btn_default_pressed" /> <item android:state_focused="true" android:state_enabled="true" android:drawable="@drawable/btn_default_selected" /> <item android:state_enabled="true" android:drawable="@drawable/btn_default_normal" /> <item android:state_focused="true" android:drawable="@drawable/btn_default_normal_disable_focused" /> <item android:drawable="@drawable/btn_default_normal_disable" /> </selector>
其相应的获取焦点的状态和背景图就在这定义了
所以我们要在drawable新建一个btn_default的XML文件,并且是selector属性的
<?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/btn_green_pressed" /> <item android:state_focused="true" android:state_enabled="true" android:drawable="@drawable/btn_green_pressed" /> <item android:state_enabled="true" android:drawable="@drawable/btn_green_normal" /> </selector>
先修改一下1里面的next按钮
<Button android:onClick="next" android:background="@drawable/btn_default" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:text="下一步" />
然后同样可以修改2的,不过其后几个页面都会有这两个按钮,所以我们可以写到styles里方便引用
<RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/bind" /> <Button style="@style/setup_button_pre"/> <Button style="@style/setup_button_next" /> </RelativeLayout>
OK,可以实现3了
public class Setup3Activity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_setup3); } public void next(View v){ Intent intent = new Intent(this, Setup4Activity.class); startActivity(intent); finish(); } public void previous(View v) { // TODO Auto-generated method stub Intent intent = new Intent(this, Setup2Activity.class); startActivity(intent); finish(); } }
layout
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:rjl="http://schemas.android.com/apk/res/com.rjl.mobilephonemanager" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="60dp" android:background="#00FF00" android:gravity="center" android:text="3.设置安全号码" android:textSize="25sp" /> <TextView android:layout_width="fill_parent" android:layout_height="30dp" android:layout_marginLeft="5dp" android:gravity="center_vertical" android:text="sim卡变更后" android:textColor="#000000" android:textSize="18sp" /> <TextView android:layout_marginTop="5dp" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:gravity="center_vertical" android:text="报警短信会自动发送给安全号码" android:textColor="#000000" android:textSize="18sp" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请输入安全号码"/> <Button android:onClick="selectpeople" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="选择联系人"/> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal" android:layout_marginTop="5dp"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_invisible" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_invisible" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_online" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_invisible" /> </LinearLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/phone" /> <Button style="@style/setup_button_pre"/> <Button style="@style/setup_button_next" /> </RelativeLayout> </LinearLayout>
3的activity里要获取联系人,后面再来实现
public void selectpeople(View v){ //需要实现从系统的联系人里获取一个联系人信息 }
再来4,在4里设置成功后,用户应该去的是LostFindActivity,而不再进行设置,这需要在LostFindActivity和4里使用SharedPreferences来保存并做判断
layout
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:rjl="http://schemas.android.com/apk/res/com.rjl.mobilephonemanager" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="60dp" android:background="#00FF00" android:gravity="center" android:text="4.恭喜您设置完成" android:textSize="25sp" /> <CheckBox android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="您还没有开启手机防盗保护"/> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="激活超级管理员n您就可以远程擦除数据" android:padding="5dp" android:background="@drawable/textbg_setup4" android:textSize="18sp" android:layout_margin="5dp"/> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal" android:layout_marginTop="5dp"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_invisible" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_invisible" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_invisible" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/presence_online" /> </LinearLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/bind" /> <Button style="@style/setup_button_pre"/> <Button style="@style/setup_button_next" android:text="设置完成"/> </RelativeLayout> </LinearLayout>
activity
public class Setup4Activity extends Activity { private SharedPreferences sp ; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_setup4); } public void next(View v) { // TODO Auto-generated method stub sp=getSharedPreferences("config", MODE_PRIVATE); Editor editor = sp.edit(); editor.putBoolean("setupcomplete", true); editor.commit(); Intent intent = new Intent(this, LostFindActivity.class); startActivity(intent); finish(); } public void previous(View v) { // TODO Auto-generated method stub Intent intent = new Intent(this, Setup3Activity.class); startActivity(intent); finish(); } }
完成lostfind的layout
<?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" > <TextView android:layout_width="fill_parent" android:layout_height="60dp" android:text="手机防盗" android:background="#00FF00" android:gravity="center" android:textSize="25sp"/> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="10dp" android:paddingLeft="10dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="安全号码" android:layout_alignParentLeft="true" android:textSize="20sp"/> <TextView android:id="@+id/tv_lostfind_safenum" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="5556" android:layout_alignParentRight="true" android:textSize="20sp"/> </RelativeLayout> <View android:layout_marginTop="5dp" android:layout_width="fill_parent" android:layout_height="0.2dp" android:background="#000000"/> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="10dp" android:paddingLeft="10dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="防盗保护是否开启" android:layout_alignParentLeft="true" android:textSize="20sp" android:gravity="center_vertical"/> <ImageView android:id="@+id/iv_lostfind_lockstatus" android:layout_width="wrap_content" android:layout_height="30dp" android:layout_alignParentRight="true" android:src="@drawable/unlock"/> </RelativeLayout> <View android:layout_marginTop="5dp" android:layout_width="fill_parent" android:layout_height="0.2dp" android:background="#000000"/> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="resetup" android:text="重新进入设置向导页面" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#55000000" android:text="功能简介" android:textSize="18sp" android:padding="8dp"/> <TextView style="@style/setup1_item" android:text="GPS追踪#*location*#" android:layout_margin="5dp"/> <TextView style="@style/setup1_item" android:text="播放报警音乐#*alarm*#" android:layout_margin="5dp"/> <TextView style="@style/setup1_item" android:text="远程删除数据#*wipedata*#" android:layout_margin="5dp"/> <TextView style="@style/setup1_item" android:text="远程锁屏#*lockscreen*#" android:layout_margin="5dp" /> </LinearLayout>
public void resetup(View v){ Intent intent = new Intent(this,Setup1Activity.class); startActivity(intent); finish(); }
至此UI基本完成,这样子框架就搭完毕了。