Подтвердить что ты не робот

Настройка TextView TextAppeareance Programmatically в android

Я собираюсь реализовать LinearLayout, в котором вводные поля программно сгенерированы в соответствии с количеством полей таблицы базы данных.

К сожалению, когда я пытаюсь установить атрибут textApperance как textApperanceLarge в TextView, он не работает. Ниже мой код...

for (int i = 0; i < selectedProducts; i++) {

            premLayout[i] = new LinearLayout(this);
            premLayout[i].setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
            premLayout[i].setOrientation(LinearLayout.HORIZONTAL);
            premLayout[i].setGravity(Gravity.TOP);

            premTextView[i] = new TextView(this);
            premTextView[i].setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
                    2.0f));
            premTextView[i].setTextAppearance(this, android.R.attr.textAppearanceLarge);

            premTextView[i].setText(premiumChannels.get(i));
            premTextView[i].setId(i + 600);

            int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, getResources().getDisplayMetrics());
            premTextView[i].setWidth(px);

            premLayout[i].addView(premTextView[i]);
4b9b3361

Ответ 1

Используйте это. Он будет работать.

textView.setTextAppearance(this, android.R.style.TextAppearance_Large);

Или, поскольку API 23, вам не нужно передавать контекст. Следовательно, вы можете просто вызвать:

textView.setTextAppearance(android.R.style.TextAppearance_Large);

Если вы хотите поддерживать API 23 или выше, а также более низкий, вы можете использовать метод ниже, чтобы упростить свою задачу. Используйте метод ниже, только если вы уже настроили API 23 или выше. Если вы нацеливаете API на менее чем 23, приведенный ниже код даст ошибку, поскольку новый метод не был доступен в нем.

public void setTextAppearance(Context context, int resId) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        super.setTextAppearance(context, resId);
    } else {
        super.setTextAppearance(resId);
    }
}

Ответ 2

Я разрабатываю Visual Studio 2015 и Xamarin. Я столкнулся с проблемой TextView.SetTextAppearance, описанной выше (я создаю приложение для работы на платформах API 22 и 23). Я попытался расширить класс TextView и переопределить SetTextAppearance, но в итоге отказался от этого подхода и вместо этого решил использовать устаревший TextView.SetTextAppearance(Context, int), завернутый в #pragma warning disable 618 / #pragma warning restore 618, чтобы подавить предупреждение компиляции. Успешно работает, и тот же apk отлично работает на устройствах Android 5.1/API 22 и Android 6.0/API 23.