手機衛士專案(第一天)

我叫阿狸貓發表於2014-04-01

1.獲取應用版本資訊

try {
	//獲取包管理器
	PackageManager pm = getPackageManager();
	//獲取包資訊(AndroidManifest.xml檔案裡的所有資訊都封裝在PackageInfo類裡)    引數一:清單檔案裡的包名  引數二:寫0即可
	PackageInfo info = pm.getPackageInfo(getPackageName(), 0);
	return info.versionName;
} catch (NameNotFoundException e) {
	e.printStackTrace();
	return "";
}

2.handler.postDelay()執行延時動作  下面這個例子就是延時5秒再彈出吐司

/*
 * handler.postDelayed   這個方法的作用是在新執行緒中延遲指定時間去做某個操作
 * 第一個引數:需要延遲做的操作
 * 第二個引數:延遲的時間
 */
handler.postDelayed(new Runnable() {
	@Override
	public void run() {
		Toast.makeText(getApplicationContext(), "哈哈哈",Toast.LENGTH_SHORT).show();
	}
}, 5000);

3.如果希以下兩個屬性作用於TextView上並且生效,那麼就需要自定義一個TextView,繼承TextView類,覆寫父類的構造方法,最後再覆寫isFocused方法,永遠返回true即可。

android:ellipsize="marquee"
android:focusableInTouchMode="true"

4.狀態選擇器  手指按下 離開的時候顯示不同顏色或者圖片

在res目錄下建立drawable資料夾,建立顏色選擇器xml檔案(home_item_selector.xml)

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

home_item_selector.xml這個檔案裡引用的顏色是values資料夾下的colors.xml檔案裡定義的顏色

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="gray">#33000000</color>
</resources>

最後將home_item_selector.xml檔案引入到某個佈局檔案,例如這個專案中就是引入到九宮格的grid_home_item.xml檔案中

android:background="@drawable/home_item_selector"


5.自定義的組合控制元件:

(1).建立一個自定義的組合控制元件,繼承一個佈局RelativeLayout或者LinearLayout等

(2).實現父類的建構函式,建立一個initView方法(用於來顯示自定義的控制元件佈局)  在每個建構函式裡都要使用下。

View view = View.inflate(getContext(), R.layout.ui_setting_view,this);//this表示掛載到當前自定義組合控制元件上

(3).宣告名稱空間  res/應用程式裡清單檔案的包名   xmlns:自定義名稱

xmlns:xxc="http://schemas.android.com/apk/res/com.example.mobilesaf"
(4).在自定義元件裡新增自定義屬性:  例如   xxc:title="我是標題"

(5).在valuse資料夾下建立attrs.xml   在裡面宣告自定義的屬性

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <declare-styleable name="SettingView"><!-- 這個name值在引用的時候加在attr的name前邊  例如SettingView_title -->
        <attr name="title" format="string" />
        <attr name="desc_on" format="string" />
        <attr name="desc_off" format="string" />
    </declare-styleable>
</resources>
(6).在自定義組合控制元件的java程式碼裡,在兩個引數的構造方法裡新增如下程式碼

將自定義的屬性  xxc:title之類的  和attrs集合建立對應關係    第二個引數是在R檔案裡自動生成的,是一個陣列,只封裝了自定義的屬性,名字和attrs.xml中declare-styleab標籤中的name屬性一致

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SettingView);
獲取自定義屬性,設定到原始元件上   引數是attrs.xml中declare-styleab標籤中的name屬性  + _  attr標籤中name屬性

String title = a.getString(R.styleable.SettingView_title);
tv_setting_title.setText(title);


專案中SettingView.java  自定義組合控制元件

import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.View;
import android.widget.CheckBox;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.example.mobilesaf.R;

/**
 * 設定介面裡的自定義元件
 * 裡面有個Title,Content,CheckBox
 */
public class SettingView extends RelativeLayout {

	private TextView tv_setting_title;
	private TextView tv_setting_desc;
	private CheckBox cb_setting_state;
	private String desc_on;
	private String desc_off;

	public SettingView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		initView();
	}

	public SettingView(Context context, AttributeSet attrs) {
		super(context, attrs);
		initView();
		TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SettingView);
		String title = a.getString(R.styleable.SettingView_title);
		tv_setting_title.setText(title);
		desc_on = a.getString(R.styleable.SettingView_desc_on);
		desc_off = a.getString(R.styleable.SettingView_desc_off);
	}

	public SettingView(Context context) {
		super(context);
		initView();
	}

	public void initView(){
		View view = View.inflate(getContext(), R.layout.ui_setting_view, this);//this表示掛載到當前自定義組合控制元件上
		tv_setting_title = (TextView) view.findViewById(R.id.tv_setting_title);
		tv_setting_desc = (TextView) view.findViewById(R.id.tv_setting_desc);
		cb_setting_state = (CheckBox) view.findViewById(R.id.cb_setting_state);
	}
	
	/**
	 * 設定標題內容
	 * @param text
	 */
	public void setTitle(String text){
		tv_setting_title.setText(text);
	}
	
	/**
	 * 設定描述內容
	 * @param text
	 */
	public void setDesc(String text){
		tv_setting_desc.setText(text);
	}
	
	/**
	 * 獲取多選框選中狀態
	 * @return
	 */
	public boolean isChecked(){
		return cb_setting_state.isChecked();
	}
	
	/**
	 * 設定核取方塊狀態,並設定相應的描述資訊
	 * @param checked
	 */
	public void setCheck(boolean checked){
		cb_setting_state.setChecked(checked);
		if(checked){
			setDesc(desc_on);
		}else{
			setDesc(desc_off);
		}
	}
}





相關文章