从customView android获取样式引用

从customView android获取样式引用,android,android-custom-view,android-styles,Android,Android Custom View,Android Styles,我有从LinearLayout扩展的自定义视图。在editText和ImageView内部。 我想为editText设置自定义样式 <resources> <declare-styleable name="custom_view"> <attr name="editTextStyle" format="reference" /> </declare-styleable> </resources> <

我有从LinearLayout扩展的自定义视图。在editText和ImageView内部。 我想为editText设置自定义样式

<resources>
    <declare-styleable name="custom_view">
        <attr name="editTextStyle" format="reference" />
    </declare-styleable>
</resources>

<com.test.CustomView
    xmlns:android="http://schemas.android.com/apk/res"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:editTextStyle="@style/CustomEditTextStyle"
    />

我一直在接受CustomView中的样式引用。 如何从参考中获取样式


我很高兴能得到任何帮助!谢谢

您可以按照其中一个Android视图源代码进行操作。 例如,取自TextView.java

/*
     * Look the appearance up without checking first if it exists because
     * almost every TextView has one and it greatly simplifies the logic
     * to be able to parse the appearance first and then let specific tags
     * for this View override it.
     */
    TypedArray a = theme.obtainStyledAttributes(attrs,
            com.android.internal.R.styleable.TextViewAppearance, defStyleAttr, defStyleRes);
    TypedArray appearance = null;
    int ap = a.getResourceId(
            com.android.internal.R.styleable.TextViewAppearance_textAppearance, -1);
    a.recycle();
    if (ap != -1) {
        appearance = theme.obtainStyledAttributes(
                ap, com.android.internal.R.styleable.TextAppearance);
    }
    if (appearance != null) {
        int n = appearance.getIndexCount();
        for (int i = 0; i < n; i++) {
            int attr = appearance.getIndex(i);

            switch (attr) {
            case com.android.internal.R.styleable.TextAppearance_textColorHighlight:
                textColorHighlight = appearance.getColor(attr, textColorHighlight);
                break;

            case com.android.internal.R.styleable.TextAppearance_textColor:
                textColor = appearance.getColorStateList(attr);
                break;

            case com.android.internal.R.styleable.TextAppearance_textColorHint:
                textColorHint = appearance.getColorStateList(attr);
                break;

            case com.android.internal.R.styleable.TextAppearance_textColorLink:
                textColorLink = appearance.getColorStateList(attr);
                break;

            case com.android.internal.R.styleable.TextAppearance_textSize:
                textSize = appearance.getDimensionPixelSize(attr, textSize);
                break;

            case com.android.internal.R.styleable.TextAppearance_typeface:
                typefaceIndex = appearance.getInt(attr, -1);
                break;

            case com.android.internal.R.styleable.TextAppearance_fontFamily:
                fontFamily = appearance.getString(attr);
                break;

            case com.android.internal.R.styleable.TextAppearance_textStyle:
                styleIndex = appearance.getInt(attr, -1);
                break;

            case com.android.internal.R.styleable.TextAppearance_textAllCaps:
                allCaps = appearance.getBoolean(attr, false);
                break;

            case com.android.internal.R.styleable.TextAppearance_shadowColor:
                shadowcolor = appearance.getInt(attr, 0);
                break;

            case com.android.internal.R.styleable.TextAppearance_shadowDx:
                dx = appearance.getFloat(attr, 0);
                break;

            case com.android.internal.R.styleable.TextAppearance_shadowDy:
                dy = appearance.getFloat(attr, 0);
                break;

            case com.android.internal.R.styleable.TextAppearance_shadowRadius:
                r = appearance.getFloat(attr, 0);
                break;

            case com.android.internal.R.styleable.TextAppearance_elegantTextHeight:
                elegant = appearance.getBoolean(attr, false);
                break;

            case com.android.internal.R.styleable.TextAppearance_letterSpacing:
                letterSpacing = appearance.getFloat(attr, 0);
                break;

            case com.android.internal.R.styleable.TextAppearance_fontFeatureSettings:
                fontFeatureSettings = appearance.getString(attr);
                break;
            }
        }

        appearance.recycle();
    }
/*
*查找外观而不首先检查它是否存在,因为
*几乎每个TextView都有一个,它大大简化了逻辑
*能够首先解析外观,然后让特定的标记
*对于此视图,请覆盖它。
*/
TypedArray a=主题。获取样式属性(属性,
com.android.internal.R.styleable.TextViewAppearance、defStyleAttr、defStyleRes);
TypedArray外观=空;
int ap=a.getResourceId(
com.android.internal.R.styleable.TextViewAppearance\u textAppearance,-1);
a、 回收();
如果(ap!=-1){
外观=主题。获取样式属性(
ap,com.android.internal.R.styleable.textpearance);
}
if(外观!=null){
int n=appearance.getIndexCount();
对于(int i=0;i
您可以按照其中一个Android视图源代码进行操作。 例如,取自TextView.java

/*
     * Look the appearance up without checking first if it exists because
     * almost every TextView has one and it greatly simplifies the logic
     * to be able to parse the appearance first and then let specific tags
     * for this View override it.
     */
    TypedArray a = theme.obtainStyledAttributes(attrs,
            com.android.internal.R.styleable.TextViewAppearance, defStyleAttr, defStyleRes);
    TypedArray appearance = null;
    int ap = a.getResourceId(
            com.android.internal.R.styleable.TextViewAppearance_textAppearance, -1);
    a.recycle();
    if (ap != -1) {
        appearance = theme.obtainStyledAttributes(
                ap, com.android.internal.R.styleable.TextAppearance);
    }
    if (appearance != null) {
        int n = appearance.getIndexCount();
        for (int i = 0; i < n; i++) {
            int attr = appearance.getIndex(i);

            switch (attr) {
            case com.android.internal.R.styleable.TextAppearance_textColorHighlight:
                textColorHighlight = appearance.getColor(attr, textColorHighlight);
                break;

            case com.android.internal.R.styleable.TextAppearance_textColor:
                textColor = appearance.getColorStateList(attr);
                break;

            case com.android.internal.R.styleable.TextAppearance_textColorHint:
                textColorHint = appearance.getColorStateList(attr);
                break;

            case com.android.internal.R.styleable.TextAppearance_textColorLink:
                textColorLink = appearance.getColorStateList(attr);
                break;

            case com.android.internal.R.styleable.TextAppearance_textSize:
                textSize = appearance.getDimensionPixelSize(attr, textSize);
                break;

            case com.android.internal.R.styleable.TextAppearance_typeface:
                typefaceIndex = appearance.getInt(attr, -1);
                break;

            case com.android.internal.R.styleable.TextAppearance_fontFamily:
                fontFamily = appearance.getString(attr);
                break;

            case com.android.internal.R.styleable.TextAppearance_textStyle:
                styleIndex = appearance.getInt(attr, -1);
                break;

            case com.android.internal.R.styleable.TextAppearance_textAllCaps:
                allCaps = appearance.getBoolean(attr, false);
                break;

            case com.android.internal.R.styleable.TextAppearance_shadowColor:
                shadowcolor = appearance.getInt(attr, 0);
                break;

            case com.android.internal.R.styleable.TextAppearance_shadowDx:
                dx = appearance.getFloat(attr, 0);
                break;

            case com.android.internal.R.styleable.TextAppearance_shadowDy:
                dy = appearance.getFloat(attr, 0);
                break;

            case com.android.internal.R.styleable.TextAppearance_shadowRadius:
                r = appearance.getFloat(attr, 0);
                break;

            case com.android.internal.R.styleable.TextAppearance_elegantTextHeight:
                elegant = appearance.getBoolean(attr, false);
                break;

            case com.android.internal.R.styleable.TextAppearance_letterSpacing:
                letterSpacing = appearance.getFloat(attr, 0);
                break;

            case com.android.internal.R.styleable.TextAppearance_fontFeatureSettings:
                fontFeatureSettings = appearance.getString(attr);
                break;
            }
        }

        appearance.recycle();
    }
/*
*查找外观而不首先检查它是否存在,因为
*几乎每个TextView都有一个,它大大简化了逻辑
*能够首先解析外观,然后让特定的标记
*对于此视图,请覆盖它。
*/
TypedArray a=主题。获取样式属性(属性,
com.android.internal.R.styleable.TextViewAppearance、defStyleAttr、defStyleRes);
TypedArray外观=空;
int ap=a.getResourceId(
com.android.internal.R.styleable.TextViewAppearance\u textAppearance,-1);
a、 回收();
如果(ap!=-1){
外观=主题。获取样式属性(
ap,com.android.internal.R.styleable.textpearance);
}
if(外观!=null){
int n=appearance.getIndexCount();
对于(int i=0;i