1. 程式人生 > >android 組合控制元件-屬性獲取

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="

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>