Intereting Posts
Использование awt с Android JavaScript: отслеживание выбора изменений в Firefox для Android DataOutputSteam бросает мне «java.io.IOException: неожиданный конец потока»? ОШИБКА: В <объявлении-стиль> MenuView, неспособный найти атрибут android: preserveIconSpacing Как узнать вызываемого абонента отвечает на вызов (что такое состояние телефона, когда он поднимает вызов) Android: Как сделать флип-анимацию для андроидной активности, как будто iphone flip горизонтально слева направо? Публичной или частной, действительно ли это имеет значение с Android-переменными Пользовательский переключатель – размер дорожки и селектора не работает ниже 21 API Перехват Android SMS без значка уведомления или сообщений WAP-PUSH Отображение даты в двузначном формате Android usb host api и USB-накопитель ActionbarSherlock SearchView в menu.xml предоставляет ресурсы $ NotFoundException В чем смысл xmlns: инструментов в макете Android XML? Альтернативные способы покупки приложений для Android Есть ли способ скрыть систему / панель навигации в Android ICS

SetBackground vs setBackgroundDrawable (Android)

Я хочу установить фоновый рисунок в виде. Для этого есть два метода (насколько я вижу): setBackground и setBackgroundDrawable .

Когда я использую setBackground , он говорит, что он добавлен в уровень API 16, но версия SDK для моего проекта – 7. Я предполагаю, что он не будет работать ни на чем ниже 16, верно? Но когда я использую setBackgroundDrawable, он говорит, что он устарел.

Что я должен использовать?

Solutions Collecting From Web of "SetBackground vs setBackgroundDrawable (Android)"

Он устарел, но он все еще работает, поэтому вы можете просто использовать его. Но если вы хотите быть полностью правильными, просто для полноты этого … Вы бы сделали что-то вроде следующего:

 int sdk = android.os.Build.VERSION.SDK_INT; if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { setBackgroundDrawable(); } else { setBackground(); } 

Для этого вам нужно установить buildTarget api 16 и min build to 7 или что-то подобное.

setBackgroundResource() этого вы можете использовать setBackgroundResource() который находится в уровне API 1.

Кажется, что в настоящее время нет разницы между двумя функциями, как показано в исходном коде (кредит на этот пост ):

 public void setBackground(Drawable background) { //noinspection deprecation setBackgroundDrawable(background); } @Deprecated public void setBackgroundDrawable(Drawable background) { ... } 

Так что это просто решение об именах, аналогичное тому, которое имеет fill-parent vs match-parent.

Я знаю, что это старый вопрос, но у меня такая же ситуация, и мое решение было

 button.setBackgroundResource( R.drawable.ic_button ); Drawable d = button.getBackground(); 

А затем вы можете играть с помощью «Drawable», применяя цветовые фильтры и т. Д.

Вы можете использовать setBackgroundResource() вместо ie relativeLayout.setBackgroundResource(R.drawable.back);

Это работает для меня.

Используя Android studio 1.5.1, я получил следующие предупреждения:

 Call requires API level 16 (current min is 9): android.view.View#setBackground 

И жалобы на обесценивание

 'setBackgroundDrawable(android.graphics.drawable.Drawable)' is deprecated 

Используя этот формат, я избавился от обоих:

  if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { //noinspection deprecation layout.setBackgroundDrawable(drawable); } else { layout.setBackground(drawable); } 

Теперь вы можете использовать любой из этих параметров. И он будет работать в любом случае. Ваш цвет может быть HEX-кодом , например:

 myView.setBackgroundResource(ContextCompat.getColor(context, Color.parseColor("#FFFFFF"))); 

Цветовой ресурс , например:

 myView.setBackgroundResource(ContextCompat.getColor(context,R.color.blue_background)); 

Или пользовательский ресурс xml , например:

 myView.setBackgroundResource(R.drawable.my_custom_background); 

Надеюсь, поможет!

Используйте ViewCompat.setBackground(view, background);

Используйте setBackgroundResource (R.drawable.xml / png)

У меня также была эта проблема, но я сделал обходной путь с помощью ImageView .

Попробуйте использовать RelativeLayout и добавьте ImageView внутри него (ширина и высота: fill_parent, scaleType: center).

Также убедитесь, что изображение – это первый элемент внутри RelativeLayout, поэтому он будет действовать как фон.

Вы также можете сделать это:

 try { myView.getClass().getMethod(android.os.Build.VERSION.SDK_INT >= 16 ? "setBackground" : "setBackgroundDrawable", Drawable.class).invoke(myView, myBackgroundDrawable); } catch (Exception ex) { // do nothing } 

EDIT: Как указано в @BlazejCzapp, лучше избегать использования отражения, если вам удастся решить проблему без него. У меня был случай использования, когда я не мог решить без размышлений, но это не так. Для получения дополнительной информации см. http://docs.oracle.com/javase/tutorial/reflect/index.html.