2016-02-29 109 views
4
编程属性

我有以下的自定义属性:设置自定义Android中

<declare-styleable name="BoxGridLayout"> 
     <attr name="numColumns" format="integer" /> 
     <attr name="numRows" format="integer" /> 
     <attr name="separatorWidth" format="dimension" /> 
     <attr name="separatorColor" format="color" /> 
     <attr name="equalSpacing" format="boolean" /> 
    </declare-styleable> 

在自定义视图我们可以得到自定义属性如下:

TypedArray a = context.getTheme().obtainStyledAttributes(attrs, 
       R.styleable.BoxGridLayout, 
       0, 
       defStyleAttr); 

     try { 
      mStrokeWidth = a.getDimensionPixelSize(R.styleable.BoxGridLayout_separatorWidth, DEFAULT_STROKE_WIDTH); 
      mStrokeColor = a.getColor(R.styleable.BoxGridLayout_separatorColor, DEFAULT_COLOR); 
      mColumnCount = a.getInteger(R.styleable.BoxGridLayout_numColumns, DEFAULT_COLUMN_COUNT); 
      mRowCount = a.getInteger(R.styleable.BoxGridLayout_numRows, DEFAULT_ROW_COUNT); 
      mEqualSpacing = a.getBoolean(R.styleable.BoxGridLayout_equalSpacing, DEFAULT_EQUAL_SPACING); 
     } finally { 
      a.recycle(); 
     } 

,我们需要把它们设置在XML视图layout:

<com.github.ali.android.client.customview.view.PadLayout 
     android:id="@+id/padLayout" 
     style="@style/PadLayoutStyle" 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" 
     custom:numColumns="3" 
     custom:numRows="4" 
     custom:separatorColor="@color/dialer_theme_color" 
     custom:separatorWidth="1dp"> 

我们如何在java代码中以编程方式设置这些自定义属性,而不是通过cu stom namespace in xml?

+0

正在添加二传手到'PadLayout'不是一种选择?这就是通常所做的。 –

+0

?你的PadLayout是一个自定义视图,所以你需要在你的课堂上有这些特性。 – king

回答

-3

您可以使用LayoutParams.For例如:

LinearLayout parent=new LinearLayout(this); 
    View child=new View(this); 
    float density =getResources().getDisplayMetrics().density; 
    LinearLayout.LayoutParams lllp=new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
    lllp.setMargins((int) (10*density), (int) (10*density), (int) (10*density), (int) (10*density)); 
    lllp.gravity=Gravity.CENTER; 
    child.setPadding((int) (10*density), (int) (10*density), (int) (10*density), (int) (10*density)); 
    child.setLayoutParams(lllp); 
    parent.addView(child);