前段時間用到向360按鈕樣式的開關,於是就翻了出來,拿出來記錄一下便於以後查找.
一,首先在res目錄中values創建attrs.xml文件並在xml中設置屬性
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="SettingView">
<!-- 設置文本屬性 -->
<attr name="title" format="string" /> <!-- name:屬性的名稱 format:屬性的值的類型-->
<!-- 開關按鈕隱藏顯示的屬性 -->
<attr name="istoggle" format="boolean" />
</declare-styleable>
</resources>
二,創建一個類繼承RelativeLayout,然後就是增加屬性啦
public class SettingView extends RelativeLayout {
private static final String NAMESPACE = "http://schemas.android.com/apk/res-auto";
private TextView mText;
private ImageView mIsToggle;
public boolean mToggle;
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();
String title = attrs.getAttributeValue(NAMESPACE, "title");
mText.setText(title);
boolean isToggle = attrs.getAttributeBooleanValue(NAMESPACE, "istoggle", true);
mIsToggle.setVisibility(isToggle ? View.VISIBLE : View.GONE);
}
/**
* 給自定義控件加載設置中心條目的佈局文件
*/
private void initView() {
View view = View.inflate(getContext(), R.layout.settingview, null);
this.addView(view);
mText = (TextView) view.findViewById(R.id.setting_tv_text);
mIsToggle = (ImageView) view.findViewById(R.id.settting_iv_istoggle);
}
/**
* 提供給activity,讓activity可以通過調用此方法更改自定義控件開關按鈕圖片
*
*/
public void setToggleOn(boolean isToggle){
mToggle = isToggle;
if (isToggle) {
//開的圖片
mIsToggle.setImageResource(R.mipmap.on);
}else{
//關的圖片
mIsToggle.setImageResource(R.mipmap.off);
}
}
/**
* 獲取開關按鈕的狀態,提供給activity用的
*/
public boolean isToggle(){
return mToggle;
}
/**
* 更改開關按鈕
*/
public void toggle(){
setToggleOn(!mToggle);
}