您的位置:首页 > 移动开发 > Android开发

android项目自定义组合控件

2015-11-27 17:38 393 查看
自定义控件首先要有一个布局文件

<?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="60dp"
android:padding="5dp" >

<TextView
android:id="@+id/tv_down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_up"
android:textColor="#a000"
android:textSize="14sp" />

<View
android:id="@+id/view1"
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#a000"
android:layout_alignParentBottom="true"/>

<CheckBox
android:id="@+id/ck_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_alignParentRight="true"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
/>

<TextView
android:id="@+id/tv_up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:textColor="#000"
android:textSize="22sp" />

</RelativeLayout>


然后要写一个类来继承一个父布局,

在里面就可以进行设置

package com.itheima.view;

import com.itheima.superman.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;

public class SeetingView extends RelativeLayout{

private TextView tv_up;
private TextView tv_down;
private CheckBox ck_right;
public SeetingView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView();
}

public SeetingView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}

public SeetingView(Context context) {
super(context);
initView();
}
//初始化布局
private void initView(){
//给这个布局一个父控件
View.inflate(getContext(),R.layout.item_seeting, this);
tv_up = (TextView) findViewById(R.id.tv_up);
tv_down = (TextView) findViewById(R.id.tv_down);
ck_right = (CheckBox) findViewById(R.id.ck_right);
}
//设置顶部文字
public void setUp(String text){
tv_up.setText(text);
}
//设置底部文字
public void setDown(String text){
tv_down.setText(text);
}
//是否被选中
public boolean isChecked(){
return ck_right.isChecked();
}
public void setChecked(boolean b){
ck_right.setChecked(b);
}

}


然后就可以在布局中使用自定义的布局了

<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"
android:background="@drawable/home_bg">

<TextView
style="@style/TitleStyle"
android:text="设置中心"
/>
<com.itheima.view.SeetingView
android:id="@+id/stv_updata"
android:layout_marginTop="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>

</LinearLayout>


之后再activity里进行操作,和系统控件一样

package com.itheima.superman;

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

import com.itheima.view.SeetingView;

public class SeetingActivity extends Activity {
private SeetingView stv_updata;
private SharedPreferences mPreferences;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_seeting);
mPreferences = getSharedPreferences("config", 0);
stv_updata = (SeetingView) findViewById(R.id.stv_updata);
stv_updata.setUp("自动更新设置");
if (mPreferences.getBoolean("check", true)) {
stv_updata.setChecked(true);
stv_updata.setDown("自动更新已经开启");
} else {
stv_updata.setChecked(false);
stv_updata.setDown("自动更新已经关闭");
}
stv_updata.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// 选中状态
if (stv_updata.isChecked()) {
stv_updata.setChecked(false);
stv_updata.setDown("自动更新已经关闭");
mPreferences.edit().putBoolean("check", false).commit();
} else {
stv_updata.setChecked(true);
stv_updata.setDown("自动更新已经开启");
mPreferences.edit().putBoolean("check", true).commit();
}

}
});
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: