2015-11-07 2 views
32

общественного недействительными setTextAppearance (контекст Контекст, внутр RESID) Добавлено в уровне API 1
Этот метод не рекомендуется в уровне API 23. Использование setTextAppearance (INT) вместо этого.setTextAppearance осуждается в уровне API 23

Мой вопрос: Почему это устарело? Почему он не нужен Context? И самое главное, как использовать setTextAppearance(int resId) для более старых версий?

+0

You может сделать это для более старой версии, просто проверьте 'Build.VERSION.SDK_INT', который будет Pankaj

ответ

62

Вы можете использовать TextViewCompat из библиотеки поддержки:

import android.support.v4.widget.TextViewCompat 

    // ... 

    TextViewCompat.setTextAppearance(view, resId) 

Внутренне он получает контекст с точки зрения (view.getContext()) по API < 23.

Source for TextViewCompat

Source for TextView (API23)

48
  1. Как использовать setTextAppearance(int resId) для более старых версий?

    Используйте это так:

    if (Build.VERSION.SDK_INT < 23) { 
        super.setTextAppearance(context, resId); 
    } else { 
        super.setTextAppearance(resId); 
    } 
    

    Для получения дополнительной информации: https://stackoverflow.com/a/33393762/4747587

  2. Почему это было устаревшим? Почему он больше не нужен Контекст?

    Причина, по которой она устарела, не требуется передавать context. Он использует контекст по умолчанию, предоставляемый View. Посмотрите на исходный код ниже. Это должно объяснить это.

    public void setTextAppearance(@StyleRes int resId) { 
        setTextAppearance(mContext, resId); 
    } 
    

    mContext здесь определяется в View классе. Поэтому вам больше не нужно передавать Context. TextView будет использовать контекст, предоставленный ему во время его создания. Это имеет больше смысла.

UPDATE

Эта функция добавлена ​​в рамках библиотеки поддержки. Поэтому вместо TextView используйте TextViewCompat [documentation]. Есть и другие классы, представленные вместе с этим, например, ImageViewCompat.

+17

Это ужасно, почему они не добавили setTextAppearance как часть класса ContextCompat? Теперь мы должны обернуть все наши методы setTextAppearance или риск потери устаревшего кода в нашем клиентском коде. – worked

+9

@worked см. Мой ответ: http://stackoverflow.com/a/37028325/2613692 Они добавили метод в класс TextViewCompat до того, как этот вопрос был отправлен. – RustamG

+0

Ницца! Спасибо @RustamG – worked