仔仔手機安全衛士demo(四)

imageimage

需求:實現如上功能,用戶可自由選擇是否自動更新app,當選擇時,提示自動更新已開啓,當取消是,顯示自動更新已關閉,只要點擊設置自動更新字樣或者選項按鈕,都可選擇。android

接下來,使用自定義標籤實現app

第一步:在res/values/下建立一個attrs.xml文件eclipse

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="SettingItemView">
        <attr name="mytitle" format="string" />
        <attr name="description_on" format="string" />
        <attr name="description_off" format="string" />
    </declare-styleable>
</resources>
注意:屬性的名稱不能與android中已定義的名稱重複,不然會拋出屬性名已定義的異常
因爲使用的是android studio,在前面一篇文章有提到eclipse與android studio在開發自定義標籤時的區別
在使用到自定義標籤的佈局文件中加入該命名空間
xmlns:zaizai=http://schemas.android.com/apk/res-auto
如我再activity-setting.xml中使用
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:zaizai="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="55dip"
        android:background="@android:color/holo_green_dark"
        android:gravity="center"
        android:text="設置中心"
        android:textColor="@android:color/black"
        android:textSize="22sp" />

    <com.zaizai.safty.ui.SettingItemView
        zaizai:mytitle="設置自動更新"
        zaizai:description_on="設置自動更新已經開啓"
        zaizai:description_off="設置自動更新已經關閉"
        android:id="@+id/siv_update"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>
自定義標籤裏的佈局文件爲
<?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="70dip"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dip"
        android:layout_marginLeft="5dip"
        android:layout_marginTop="10dip"
        android:textColor="@android:color/black"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/tv_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv_title"
        android:layout_marginBottom="10dip"
        android:layout_marginLeft="5dip"
        android:textColor="@android:color/black"
        android:textSize="12sp" />

    <CheckBox
        android:id="@+id/cb_status"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="10dip"
        android:clickable="false" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="0.2dip"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="5dip"
        android:layout_marginRight="5dip"
        android:background="#000000"
        android:keyTextColor="@android:color/black" />

</RelativeLayout>
注意:<checkBox 必定要將其clickable置爲false,使其失去被點擊能力
由於CheckBox的點擊事件的優先級大於TextView,若是不使其失去被點擊的能力,那麼當點擊CheckBox的時候,自定義控件的其餘組件將接收不到點擊事件
自定義控件所屬的類文件爲
package com.zaizai.safty;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;

import com.zaizai.safty.ui.SettingItemView;

/**
 * 設置中心類文件
 * Created by zaizai on 2015/10/14.
 */
public class SettingActivity extends Activity {

    private SettingItemView siv_update;
    /*用來存儲設置文件*/
    private SharedPreferences preferences;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_setting);

        siv_update = (SettingItemView) this.findViewById(R.id.siv_update);
        preferences = getSharedPreferences("config",MODE_PRIVATE);
        boolean update_status = preferences.getBoolean("update", false);
        if (update_status) {
            /*自動升級已經開始*/
            siv_update.setChecked(true);
            /*siv_update.setDescription("自動升級已經開啓");*/
        } else {
            /*自動升級已經關閉*/


            siv_update.setChecked(false);
            /*siv_update.setDescription("自動升級已經關閉");*/
        }
        siv_update.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences.Editor editor = preferences.edit();

                /*判斷是否選中,調用自定義的函數*/
                if (siv_update.isChecked()) {
                    //自動升級已被選中,再次點擊應該將其置爲false
                    siv_update.setChecked(false);
                   /* siv_update.setDescription("自動升級已經關閉");*/
                    editor.putBoolean("update", false);
                } else {
                    //沒有打開自動升級
                    siv_update.setChecked(true);
                    /*siv_update.setDescription("自動升級已經開啓");*/
                    editor.putBoolean("update", true);
                }
                editor.commit();
            }
        });
    }
}
如上便完成了一個自定義更新控件
相關文章
相關標籤/搜索