现在res/values中定义一个attrs.xml,设置view属性
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="AddDeleteViewStyle">
<attr name="left_text" format="string"></attr>
<attr name="right_text" format="string"></attr>
<attr name="middle_text" format="string"></attr>
<attr name="left_text_color" format="color"></attr>
</declare-styleable>
</resources>
控件布局<?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="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<TextView
android:id="@+id/txt_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#cca19b9b"
android:padding="10dp"
android:text="-"/>
<EditText
android:id="@+id/et_number"
android:layout_width="150dp"
android:gravity="center"
android:text="1"
android:layout_height="50dp" />
<TextView
android:id="@+id/txt_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#cca19b9b"
android:padding="10dp"
android:text="+"/>
</LinearLayout>
使用控件要在activity_main.xml中设置xmlns:app="http://schemas.android.com/apk/res-auto"
<com.example.fanjie.customview.AddDeleteView
android:layout_width="300dp"
android:layout_height="50dp"
android:layout_gravity="center"
app:left_text="减"
app:right_text="加"
app:middle_text="3"
app:left_text_color="#0000FF"
android:id="@+id/adv_main"
/>
自定义组合viewimport android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
* author:Created by WangZhiQiang on 2017/11/1.
*/
public class AddDeleteView extends LinearLayout{
private OnAddDelClickListener listener;
private EditText etNumber;
//对外提供一个点击的回调接口
interface OnAddDelClickListener{
void onAddClick(View v);
void onDelClick(View v);
}
public void setOnAddDelClickListener(OnAddDelClickListener listener){
if(listener!=null){
this.listener=listener;
}
}
public AddDeleteView(Context context) {
this(context,null);
}
public AddDeleteView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public AddDeleteView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context, attrs, defStyleAttr);
}
private void initView(Context context, AttributeSet attrs, int defStyleAttr) {
View.inflate(context,R.layout.layout_add_delete,this);
TextView txtDelete = (TextView) findViewById(R.id.txt_delete);
TextView txtAdd = (TextView) findViewById(R.id.txt_add);
etNumber = (EditText) findViewById(R.id.et_number);
//获取样式
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AddDeleteViewStyle);
String leftText = typedArray.getString(R.styleable.AddDeleteViewStyle_left_text);
String rightText = typedArray.getString(R.styleable.AddDeleteViewStyle_right_text);
String middleText = typedArray.getString(R.styleable.AddDeleteViewStyle_middle_text);
int leftTextColor = typedArray.getColor(R.styleable.AddDeleteViewStyle_left_text_color, Color.RED);
txtDelete.setText(leftText);
txtAdd.setText(rightText);
etNumber.setText(middleText);
txtDelete.setTextColor(leftTextColor);
//回收
typedArray.recycle();
txtDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
listener.onDelClick(view);
}
});
txtAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
listener.onAddClick(view);
}
});
}
/**
* 对外提供设置EditText值的方法
* @param number
*/
public void setNumber(int number){
if(number>0){
etNumber.setText(number+"");
}
}
/**
* 得到控件原来的值
* @return
*/
public int getNumber(){
int number=0;
try {
String trim = etNumber.getText().toString().trim();
number = Integer.valueOf(trim);
}catch (Exception e){
number=0;
}
return number;
}
}