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();
}