Android-Как использовать различные строки кода в зависимости от версии Android
У меня есть проект, который совместим с версиями Android от 10(GINGERBREAD_MR1) до 17(JELLY_BEAN_MR1).
Итак, я хотел бы использовать setBackgroundDrawable
для версий ниже 16 и setBackground
от версии 16 или выше.
Я пробовал это:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
subMessageFromToLinearLayout.setBackgroundDrawable(null);
} else {
subMessageFromToLinearLayout.setBackground(null);
}
Но затмение дает мне:
Предупреждение для subMessageFromToLinearLayout.setBackgroundDrawable(null);
:
"метод setBackgroundDrawable (Drawable) из представления типа является устаревшим"
И ошибка для subMessageFromToLinearLayout.setBackground(null);
:
" вызов требует уровня API 16 (текущая минута-10): андроид.штучка.LinearLayout#setBackground "
Как я могу исправить эти ошибки, чтобы я мог использовать обе строки в зависимости от запущенной версии Android?
Заранее благодарю.
2 ответа:
В общем случае наиболее надежный способ использует класс lazy loading :
static boolean isSDK17() { return android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1; } if (isSDK17()) xyMode_SDK17.setXyMode(context, mode); else xyMode_SDK8.setXyMode(context, mode); @TargetApi(17) public class xyMode_SDK17 { static void setXyMode(Context context, boolean mode) {...} } public class xyMode_SDK8 { @SuppressWarnings("deprecation") static void setXyMode(Context context, boolean mode) {...} }
Вы видели
ActionBarSherlock дает тонны ошибок "вызов требует API уровня 11 (текущий min равен 7)"
Android-установить фон макета программно
Вы можете отметить его с помощью @TargetApi (16) и @SuppressWarnings("устаревший").
Если ошибка все еще существует, попробуйте очистить проект или перезапустить eclipse.
" Ах, я знаю об этом .setBackgroundDrawable (Drawable) метод, но для меня IDE имел ту же ошибку с api 16 требование. Я использую Eclipse, и это, кажется, ошибка после повторного открытия ide и очистки кода немного он работал. Чем вы очень и извините за беспокойство".