android 組合控制元件-屬性獲取
--屬性檔案 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="
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>