Android深入了解自定义属性

Android -- 深入了解自定义属性 http://www.cnblogs.com/wjtaigwh/p/6594680.html  (基础篇)

深入理解Android 自定义attr Style styleable以及其应用 http://www.jianshu.com/p/61b79e7f88fc

Android中View自定义XML属性详解以及R.attr与R.styleable的区别 http://blog.csdn.net/iispring/article/details/50708044

attrs.xml

            //在styleable中声明
    
    
    
    
     ...

 

    
    
    

 

    
        
        
        
    


        //也可直接声明,这样定义属性存在一个问题:不能通过style或theme设置这个属性的值。

format一共支持11种类型

reference, color, boolean,  dimension, string

float, integer, fraction, enum, flag,  混合类型

在java代码中获取的方法

private void init(Context context, AttributeSet attrs, int defStyleAttr) {
       //获取自定义属性的值
       TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyTextView2, defStyleAttr, 0);
       mText = a.getString(R.styleable.MyTextView2_myText);
       mTextColor = a.getColor(R.styleable.MyTextView2_myTextColor, Color.BLACK);
       mTextSize = a.getDimension(R.styleable.MyTextView2_myTextSize, 30f);
       a.recycle();
          ...
       Log.i(TAG, "mText :" + mText + ",mTextColor:" + mTextColor+ ",mTextSize:" + mTextSize);
   }

obtainStyledAttributes函数获取属性

其实我们在前面已经使用了obtainStyledAttributes来获取属性了,现在来看看这个函数的声明吧:

obtainAttributes(AttributeSet set, int[] attrs) //从layout设置的属性集中获取attrs中的属性

obtainStyledAttributes(int[] attrs) //从系统主题中获取attrs中的属性

obtainStyledAttributes(int resId,int[] attrs) //从资源文件定义的style中读取属性

obtainStyledAttributes (AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)//最复杂,请参考原文


一个attr的应用(RecycleView自定义分割线):

public class DividerItemDecoration extends RecyclerView.ItemDecoration {  
  
    private static final int[] ATTRS = new int[]{  
            android.R.attr. listDivider  
    };
    ...
}
  
    
  
  
     
          
         
       
        
        
  



 

你可能感兴趣的:(Android深入了解自定义属性)