360項目-02

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();
}
相關文章
相關標籤/搜索