2015-12-15 57 views
3

我已經在Android定製的TextView設置多個標誌的屬性,我該如何恢復使用TypedArray如何從TypedArray獲取標誌屬性?

屬性
<some.text.view.that.i.defined.TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     font:sanFrancisco="bold|italic"/> 


<attr name="fontSanFrancisco"> 
    <flag name="regular" value="0"/> 
    <flag name="bold" value="1"/> 
    <flag name="italic" value="2"/> 
</attr> 

<declare-styleable name="font"> 
    <attr name="sanFrancisco" format="flag"/> 
</declare-styleable> 

回答

3

attrs.xml

<resources> 
    <declare-styleable name="font"> 
     <attr name="my_sampleFlag" /> 
    </declare-styleable> 
    <attr name="my_sampleFlag"> 
     <flag name="regular" value="0" /> 
     <flag name="bold" value="1" /> 
     <flag name="italic" value="2" /> 
    </attr> 
</resources> 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:custom="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center"> 
    <com.example.checkstack.MyView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="Hello World" 
     android:layout_marginTop="20dip"/> 
</LinearLayout> 

MyView的

public class MyView extends TextView { 

    public MyView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    public MyView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     applyCustomFont(context, attrs); 
    } 

    public MyView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     applyCustomFont(context, attrs); 
    } 

    private void applyCustomFont(Context context, AttributeSet attrs) { 

      TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.font); 
      int textStyle = a.getInt(R.styleable.font_my_sampleFlag, 1); 
      setTypeface(null, textStyle); 
      a.recycle(); 
    } 
} 
0

嘗試這樣的事:

int style = attrs.getInteger(R.styleable.HighlightedTextView_highlightStyle, -1); 
    if(style >= 0) { 
     setHighlightStyle(style); 
    } 
    attrs.recycle(); 
    } 

這裏是整個tutorial link