attrs.xml文件的使用詳解---定義xml屬性

Android中在values中定義一個attrs.xml,然後自己定義一個組件MyView

attrs.xml內容如下:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <?xml version="1.0" encoding="utf-8"?>       
  2. <resources>       
  3.     <declare-styleable name="MyView">       
  4.         <attr name="textColor" format="color" />       
  5.         <attr name="textSize" format="dimension" />       
  6.     </declare-styleable>       
  7. </resources>   

定義的組件MyView:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. package com.jiangwei.demo;  
  2.   
  3. import android.content.Context;  
  4. import android.content.res.TypedArray;  
  5. import android.graphics.Canvas;  
  6. import android.graphics.Color;  
  7. import android.graphics.Paint;  
  8. import android.graphics.Paint.Style;  
  9. import android.graphics.Rect;  
  10. import android.util.AttributeSet;  
  11. import android.view.View;  
  12.   
  13. public class MyView extends View {  
  14. private Paint mPaint;  
  15. private static final String mString = "Welcome !";  
  16. public MyView(Context context) {  
  17. super(context);  
  18. mPaint = new Paint();  
  19. }  
  20.   
  21. public MyView(Context context, AttributeSet attrs) {  
  22. super(context, attrs);  
  23. mPaint = new Paint();  
  24. TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyView);  
  25. int textColor = a.getColor(R.styleable.MyView_textColor, 0XFFFFFFFF);  
  26. float textSize = a.getDimension(R.styleable.MyView_textSize, 36);  
  27. mPaint.setTextSize(textSize);  
  28. mPaint.setColor(textColor);  
  29. a.recycle();  
  30. }  
  31.   
  32. @Override  
  33. protected void onDraw(Canvas canvas) {  
  34. // TODO Auto-generated method stub  
  35. super.onDraw(canvas);  
  36. // 設置填充  
  37. mPaint.setStyle(Style.FILL);  
  38. // 畫一個矩形,前倆個是矩形左上角座標,後面倆個是右下角座標  
  39. canvas.drawRect(new Rect(10, 10, 100, 100), mPaint);  
  40. mPaint.setColor(Color.BLUE);  
  41. // 繪製文字  
  42. canvas.drawText(mString, 10, 110, mPaint);  
  43. }  
  44. }  

main.xml內容:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout   
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     xmlns:test="http://schemas.android.com/apk/res/com.jiangwei.demo"//一定記得添加前綴  
  5.     android:layout_width="fill_parent"  
  6.     android:layout_height="fill_parent"  
  7.     android:orientation="vertical" >  
  8.     <com.jiangwei.demo.MyView  
  9. android:layout_width="fill_parent"   
  10.    android:layout_height="fill_parent"   
  11.    test:textSize="20px"//test是個前綴  
  12.    test:textColor="#ffffff"/>  
  13. </LinearLayout>  


具體內容:

格式如上,其中“xmlns:wen”冒號後面是標籤名,在下面使用時(只對當前文件可用)
<TextView  wen:屬性名/>
“com.iteye.googlers”是你的工程包名。
1. reference:參考某一資源ID。
    (1)屬性定義:
            

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <declare-styleable name = "名稱">  
  2.                    <attr name = "background" format = "reference" />  
  3. </declare-styleable>  

    (2)屬性使用:
            
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <ImageView  
  2.                      android:layout_width = "42dip"  
  3.                      android:layout_height = "42dip"  
  4.                      android:background = "@drawable/圖片ID"  
  5.                      />  


2. color:顏色值。
    (1)屬性定義:
            

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <declare-styleable name = "名稱">  
  2.                    <attr name = "textColor" format = "color" />  
  3.             </declare-styleable>  

    (2)屬性使用:
           
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <TextView  
  2.                     android:layout_width = "42dip"  
  3.                     android:layout_height = "42dip"  
  4.                     android:textColor = "#00FF00"  
  5.                     />  

 3. boolean:布爾值。
    (1)屬性定義:
            
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <declare-styleable name = "名稱">  
  2.                 <attr name = "focusable" format = "boolean" />  
  3. </declare-styleable>  

    (2)屬性使用:
            
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <Button  
  2.                    android:layout_width = "42dip"  
  3.                    android:layout_height = "42dip"  
  4.                    android:focusable = "true"/>  

4. dimension:尺寸值。
     (1)屬性定義:
             
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <declare-styleable name = "名稱">  
  2.                    <attr name = "layout_width" format = "dimension" />  
  3. </declare-styleable>  

    (2)屬性使用:
            
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <Button  
  2.                    android:layout_width = "42dip"  
  3.                    android:layout_height = "42dip"  
  4.                   />  

 5. float:浮點值。
    (1)屬性定義:
            
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <declare-styleable name = "AlphaAnimation">  
  2.                    <attr name = "fromAlpha" format = "float" />  
  3.                    <attr name = "toAlpha" format = "float" />  
  4. </declare-styleable>  

    (2)屬性使用:
            
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <alpha  
  2.        android:fromAlpha = "1.0"  
  3.        android:toAlpha = "0.7"  
  4. />  
 
6. integer:整型值。
    (1)屬性定義:
            
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <declare-styleable name = "AnimatedRotateDrawable">  
  2.                    <attr name = "visible" />  
  3.                    <attr name = "frameDuration" format="integer" />  
  4.                    <attr name = "framesCount" format="integer" />  
  5.                    <attr name = "pivotX" />  
  6.                    <attr name = "pivotY" />  
  7.                    <attr name = "drawable" />  
  8. </declare-styleable>  

    (2)屬性使用:
            
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <animated-rotate  
  2.                    xmlns:android = "http://schemas.android.com/apk/res/android"    
  3.                    android:drawable = "@drawable/圖片ID"    
  4.                    android:pivotX = "50%"    
  5.                    android:pivotY = "50%"    
  6.                    android:framesCount = "12"    
  7.                    android:frameDuration = "100"  
  8.                    />  
 
7. string:字符串。
    (1)屬性定義:
            
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <declare-styleable name = "MapView">  
  2.                    <attr name = "apiKey" format = "string" />  
  3. </declare-styleable>  

    (2)屬性使用:
            
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <com.google.android.maps.MapView  
  2.                     android:layout_width = "fill_parent"  
  3.                     android:layout_height = "fill_parent"  
  4.                     android:apiKey = "0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g"  
  5.                     />  

8. fraction:百分數。
     (1)屬性定義:
            
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <declare-styleable name="RotateDrawable">  
  2.                    <attr name = "visible" />  
  3.                    <attr name = "fromDegrees" format = "float" />  
  4.                    <attr name = "toDegrees" format = "float" />  
  5.                    <attr name = "pivotX" format = "fraction" />  
  6.                    <attr name = "pivotY" format = "fraction" />  
  7.                    <attr name = "drawable" />  
  8. </declare-styleable>  

    (2)屬性使用:
            
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <rotate  
  2.                  xmlns:android = "http://schemas.android.com/apk/res/android"   
  3.                android:interpolator = "@anim/動畫ID"  
  4.                  android:fromDegrees = "0"   
  5.                android:toDegrees = "360"  
  6.                  android:pivotX = "200%"  
  7.                  android:pivotY = "300%"   
  8.                android:duration = "5000"  
  9.                  android:repeatMode = "restart"  
  10.                  android:repeatCount = "infinite"  
  11.                 />  

9. enum:枚舉值。
    (1)屬性定義:
            
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <declare-styleable name="名稱">  
  2.                    <attr name="orientation">  
  3.                           <enum name="horizontal" value="0" />  
  4.                           <enum name="vertical" value="1" />  
  5.                    </attr>              
  6. </declare-styleable>  

    (2)屬性使用:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <LinearLayout  
  2.                     xmlns:android = "http://schemas.android.com/apk/res/android"  
  3.                     android:orientation = "vertical"  
  4.                     android:layout_width = "fill_parent"  
  5.                     android:layout_height = "fill_parent"  
  6.                     >  
  7. </LinearLayout>  

10. flag:位或運算。
     (1)屬性定義:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <declare-styleable name="名稱">  
  2.                    <attr name="windowSoftInputMode">  
  3.                            <flag name = "stateUnspecified" value = "0" />  
  4.                            <flag name = "stateUnchanged" value = "1" />  
  5.                            <flag name = "stateHidden" value = "2" />  
  6.                            <flag name = "stateAlwaysHidden" value = "3" />  
  7.                            <flag name = "stateVisible" value = "4" />  
  8.                            <flag name = "stateAlwaysVisible" value = "5" />  
  9.                            <flag name = "adjustUnspecified" value = "0x00" />  
  10.                            <flag name = "adjustResize" value = "0x10" />  
  11.                            <flag name = "adjustPan" value = "0x20" />  
  12.                            <flag name = "adjustNothing" value = "0x30" />  
  13.                     </attr>           
  14. lt;/declare-styleable>  

     (2)屬性使用:
            
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <activity  
  2.       android:name = ".StyleAndThemeActivity"  
  3.       android:label = "@string/app_name"  
  4.       android:windowSoftInputMode = "stateUnspecified | stateUnchanged | stateHidden">  
  5.       <intent-filter>  
  6.             <action android:name = "android.intent.action.MAIN" />  
  7.             <category android:name = "android.intent.category.LAUNCHER" />  
  8.       </intent-filter>  
  9. </activity>  


     注意:
     屬性定義時可以指定多種類型值。
    (1)屬性定義:
            
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <declare-styleable name = "名稱">  
  2.       <attr name = "background" format = "reference|color" />  
  3. </declare-styleable>  

    (2)屬性使用:
             
[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <ImageView  
  2.         android:layout_width = "42dip"  
  3.         android:layout_height = "42dip"  
  4.         android:background = "@drawable/圖片ID|#00FF00"  
  5.         />  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章