Установить собственный стиль для текстовых представлений внутри пользовательского представления в Android - PullRequest
0 голосов
/ 29 июня 2018

У меня есть пользовательский класс представления DoubleTextView.java, который выглядит следующим образом:

public class DoubleTextView extends LinearLayout {
    LinearLayout layout;
    TextView upTextView;
    TextView downTextView;
    Context mContext;

    public DoubleTextView(Context context) {

        super(context);
        mContext = context;
    }

    public DoubleTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;


        String service = Context.LAYOUT_INFLATER_SERVICE;
        LayoutInflater li = (LayoutInflater) getContext().getSystemService(service);

        layout = (LinearLayout) li.inflate(R.layout.custom_double_text, this, true);

        upTextView = layout.findViewById(R.id.text_up);
        downTextView = layout.findViewById(R.id.text_down);

        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DoubleTextView);

        String upText = a.getString(R.styleable.DoubleTextView_upText);
        String downText = a.getString(R.styleable.DoubleTextView_downText);
        int upTextStyle = a.getInteger(R.styleable.DoubleTextView_styleUpText,R.style.ListOtherLightInfo);
        int downTextStyle = a.getInteger(R.styleable.DoubleTextView_styleDownText,R.style.ListOtherLightInfo);

        upText = upText == null ? "" : upText;
        downText = downText == null ? "" : downText;

        upTextView.setText(upText);
        downTextView.setText(downText);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            upTextView.setTextAppearance(R.style.ListOtherLightInfo);
            downTextView.setTextAppearance(downTextStyle);
        }
        a.recycle();
    }

    public DoubleTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        mContext = context;
    }
}

Атрибуты, которые должны быть установлены в DoubleTextView.class ниже,

<declare-styleable name="DoubleTextView">
        <attr name="upText" format="string"/>
        <attr name="downText" format="string"/>
        <attr name="styleUpText" format="reference"/>
        <attr name="styleDownText" format="integer"/>

    </declare-styleable>

Я не могу добавить пользовательские стили к двум текстовым представлениям, присутствующим в моем классе DoubleTextView.java. Пользовательские стили присутствуют в моем файле styles.xml

Вот как я пытаюсь это использовать,

<com.loconav.common.widget.DoubleTextView
                                app:upText="heklow"
                                app:downText="askjdnakjsndjasndjkasndasndj"
                                app:styleUpText="@style/BoldTextBlue"
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"/>

Но выдает ошибку, когда app: styleUpText используется в xml,

Метод вызвал исключение java.lang.UnsupportedOperationException.

Заранее спасибо

1 Ответ

0 голосов
/ 29 июня 2018

Используйте getResourceId вместо getInteger для атрибута стиля.

...