--属性文件 values下新建atrrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- <declare-styleable name="control_textbox_attrs"> -->
<!-- <attr name="android:text" />标题 -->
<!-- <attr name="android:enabled" /> -->
<!-- <attr name="android:minWidth"/>标题宽度 -->
<!-- <attr name="android:tag"/> 如果是文本,可以不管,如果是数字,需录入数字, -->
<!-- </declare-styleable> -->
<declare-styleable name="control_textbox_attrs">
<attr name="title" format="string" /><!-- 标题 -->
<attr name="enabled" format="boolean" />
<attr name="title_width" format="string"/><!-- 标题宽度 -->
<attr name="InputType" format="string"/>
<attr name="value" format="string"/>
</declare-styleable>
</resources>
--
package kd.scan;
import android.content.Context;
import android.content.res.TypedArray;
import android.text.InputType;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
//qk 20160115 文本框控件,建化布局
//缺点:目前取属性都是用的系统有的属性,用自己命名的属性一直取不到,原因不明。
//目前这种控件也满足需求,后期找出原因有修正
//20160126 直接从attrs中取值 qk
public class Control_Textbox extends RelativeLayout{
//控件
private TextView control_textbox_title;
private EditText control_textbox_text;
//变量
private String strTextbox_title;
private String strWidth;
private boolean blnEnabled;
private int intTextbox_width;
private String strValue;
private String strInputType;//输入类型:数字 or 文本
private String strNameSpace="http://schemas.android.com/apk/res/kd.scan";
public Control_Textbox(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
try{
// TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.control_textbox_attrs);
blnEnabled= attrs.getAttributeBooleanValue(strNameSpace, "enabled", true);
strWidth= attrs.getAttributeValue(strNameSpace, "title_width");
if(!(strWidth==null)){
strWidth=strWidth.replace("dp", "");
intTextbox_width=(int) Float.parseFloat(strWidth);
intTextbox_width=mypublicfunction.dip2px(context, intTextbox_width);//转化成pix
}else{
intTextbox_width=-1;
}
strTextbox_title=attrs.getAttributeValue(strNameSpace, "title");
strInputType=attrs.getAttributeValue(strNameSpace, "InputType");
if(strInputType==null){
strInputType="文本";
}
strValue=attrs.getAttributeValue(strNameSpace, "value");
LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.control_textbox, this);
control_textbox_title=(TextView)findViewById(R.id.control_textbox_title);
control_textbox_text=(EditText)findViewById(R.id.control_textbox_text);
if(intTextbox_width!=-1){
control_textbox_title.setWidth(intTextbox_width);
}
control_textbox_title.setText(strTextbox_title);
control_textbox_text.setEnabled(blnEnabled);
if(strInputType.equals("数字")){
control_textbox_text.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
control_textbox_text.setGravity(Gravity.RIGHT);
}
control_textbox_text.setText(strValue);
}catch(Exception e){
Toast.makeText(context, e.getMessage().toString(), Toast.LENGTH_SHORT).show();
e.getCause();
}
}
// public Control_Textbox(Context context, AttributeSet attrs) {
// super(context, attrs);
// // TODO Auto-generated constructor stub
//
// try{
// TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.control_textbox_attrs);
// blnEnabled= a.getBoolean(R.styleable.control_textbox_attrs_android_enabled,true );
//
// strWidth=(String) a.getText(R.styleable.control_textbox_attrs_android_minWidth);//属性文件中按dp赋值
// if(!(strWidth==null)){
// strWidth=strWidth.replace("dip", "");
// intTextbox_width=(int) Float.parseFloat(strWidth);
// intTextbox_width=mypublicfunction.dip2px(context, intTextbox_width);//转化成pix
// }else{
// intTextbox_width=-1;
// }
// String strtemp=(String) a.getText(R.styleable.control_textbox_attrs_android_tag);
// if(strtemp==null || strtemp.equals("")){
// strtemp="文本,";
// }
// String[] strTag=strtemp.split(",");
//
// strTextbox_title=(String) a.getText(R.styleable.control_textbox_attrs_android_text);
// a .recycle();
//
// LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// inflater.inflate(R.layout.control_textbox, this);
// control_textbox_title=(TextView)findViewById(R.id.control_textbox_title);
// control_textbox_text=(EditText)findViewById(R.id.control_textbox_text);
// if(intTextbox_width!=-1){
// control_textbox_title.setWidth(intTextbox_width);
// }
// control_textbox_title.setText(strTextbox_title);
// control_textbox_text.setEnabled(blnEnabled);
// if(strTag[0].equals("数字")){
// control_textbox_text.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
// control_textbox_text.setGravity(Gravity.RIGHT);
//
// }
//
//
// }catch(Exception e){
// Toast.makeText(context, e.getMessage().toString(), Toast.LENGTH_SHORT).show();
// e.getCause();
// }
// }
//取值赋值方法
public void SetTextboxValue(String value){
this.strValue=value;
control_textbox_text.setText(value);
}
public String GetTextBoxValue(){
return this.strValue;
}
public void SetTextBoxEnable(Boolean blnEnable){
control_textbox_text.setEnabled(blnEnable);
}
}
--调用
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mycontrol="http://schemas.android.com/apk/res/kd.scan"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/loginback"
>
<kd.scan.Control_Textbox
android:id="@+id/wccc"
android:layout_width="300dp"
android:layout_height="wrap_content"
mycontrol:title="供应商:"
mycontrol:title_width="100dp"
></kd.scan.Control_Textbox>