有时候页面有几个模块布局是一致的,每个模块所包含的布局块是一样的,放在一起设置,当作一个控件组合
自定义相对布局,布局样式同时获取样式或者设置样式的参数 相对布局view_setting_item.xml里面有3个组件
<?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="70dp" android:padding="5dp" > <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/black" android:textSize="22sp" /> <TextView android:id="@+id/tv_desc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_title" android:layout_marginTop="3dp" android:textColor="#a000" android:textSize="18sp" /> <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:clickable="false" android:focusable="false" android:focusableInTouchMode="false" /> <View android:layout_width="match_parent" android:layout_height="0.2dp" android:layout_alignParentBottom="true" android:background="#a000" /> </RelativeLayout>自定义相对布局,继承来自相对布局,用上面的样式进行填充,获取到样式中的一些属性,并提供接口方便外面进行编辑。
package com.ldw.safe.view; import com.ldw.safe.R; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.CheckBox; import android.widget.RelativeLayout; import android.widget.TextView; /* * 设置自定义相对布局,布局的结构用view_setting_item进行填充,并初始化SettingItemView的方法,来设置或者获取某些参数 */ public class SettingItemView extends RelativeLayout { private TextView tvTitle; private TextView tvDesc; private CheckBox cbStatus; public SettingItemView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initView(); } public SettingItemView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } public SettingItemView(Context context) { super(context); initView(); } //初始化布局 private void initView(){ //将定义的布局文件设置成为当前的SettingItemView View.inflate(getContext(), R.layout.view_setting_item, this); tvTitle = (TextView) findViewById(R.id.tv_title); tvDesc = (TextView) findViewById(R.id.tv_desc); cbStatus = (CheckBox) findViewById(R.id.cb_status); } //设置相对布局的元素的属性 public void setTitle(String title){ tvTitle.setText(title); } //设置相对布局的元素的属性 public void setDesc(String desc){ tvDesc.setText(desc); } //获取相对布局的元素的属性 public boolean isChecked(){ return cbStatus.isChecked(); } //设置相对布局的元素的属性 public void setChecked(boolean check){ cbStatus.setChecked(check); } }布局中使用相对布局activity_seting.xml,自定义的相对布局相当于一个全新的布局,使用这个布局的时候需要把完全的包名加上
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView style="@style/TitleStyle" android:text="手机设置" /> <com.ldw.safe.view.SettingItemView android:id="@+id/siv_update" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>获取自定义布局的参数,并设置参数(使用)
package com.ldw.safe.Activity; import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import com.ldw.safe.R; import com.ldw.safe.view.SettingItemView; /** * 设置中心 */ public class SettingActivity extends Activity { private SettingItemView siv_update;//设置自动更新 private SharedPreferences mPref;//把设置的数据保存在mPref @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setting); //把设置的数据保存在mPref mPref = getSharedPreferences("config", MODE_PRIVATE); siv_update = (SettingItemView)findViewById(R.id.siv_update); siv_update.setTitle("自动更新设置"); //获取保存的数据,判断之前选择的是开始还是关闭,初始化进入界面是否勾选 boolean autoUpdate = mPref.getBoolean("auto_update", true); if(autoUpdate){ siv_update.setDesc("自动更新已经开启"); siv_update.setChecked(true); }else{ siv_update.setDesc("自动更新已经关闭"); siv_update.setChecked(false); } siv_update.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { //判断右边框的勾选状态 if(siv_update.isChecked()){ //设置不勾选 siv_update.setChecked(false); siv_update.setDesc("自动更新已经关闭"); //编辑mPref的值 mPref.edit().putBoolean("auto_update", false).commit(); }else{ //设置勾选 siv_update.setChecked(true); siv_update.setDesc("自动更新已经开启"); //编辑mPref的值 mPref.edit().putBoolean("auto_update", true).commit(); } } }); } }