Как заставить атрибут переднего плана для кнопки работать ниже API 23?

У меня есть два Buttons, вложенных в LinearLayout. Между этими Buttons находятся два TextViews. В Xml я установил изображение переднего плана для каждого из этих Buttons.

Он отлично работает на моем устройстве для Api 23. Но на других устройствах ниже Api 23 изображение переднего плана не отображается и вместо этого по умолчанию используется сплошной белый цвет. Есть ли способ сделать так, чтобы эти изображения отображались на переднем плане под Api 23?

Мы попробовали FrameLayout, но он не делает то, что нам нужно. Будет ли ImageButtons лучшим способом решить эту проблему?

Одна из основных функций нашего приложения заключается в том, что каждый раз, когда пользователь нажимает Button, размер увеличивается, а изображение соответственно растягивается. Это делается динамически в коде. Если бы я использовал ImageButtons, мне нужно было бы каждый раз устанавливать параметры макета для высоты и ширины, а не одну строку кода, которая устанавливает высоту.

Любые советы будут оценены!

РЕДАКТИРОВАТЬ: код, с которым я работаю -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="11"
    android:background="@android:color/black">

    <Button
        android:layout_weight="5"
        android:id="@+id/firstP"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:foreground="@drawable/icebutton"
        android:scaleX="1"
        android:scaleY="1"/>

    <TextView
        android:layout_weight="0.5"
        android:id="@+id/firstPlayer"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:rotation="180"
        android:textColor="@android:color/white"
        android:background="@android:color/transparent"/>

    <TextView
        android:layout_weight="0.5"
        android:id="@+id/secondPlayer"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"
        android:background="@android:color/transparent"/>

    <Button
        android:layout_weight="5"
        android:id="@+id/secondP"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:foreground="@drawable/firebutton"
        android:scaleX="1"
        android:scaleY="1"/>

</LinearLayout>

person Kumar    schedule 22.06.2016    source источник
comment
Можете ли вы показать нам свой код, пожалуйста!   -  person Yasin Kaçmaz    schedule 23.06.2016
comment
Я добавил код, с которым я работаю. В настоящее время я пытаюсь реализовать ImageButtons @Micho Спасибо за редактирование. Я позабочусь о правильном формате в будущем.   -  person Kumar    schedule 23.06.2016


Ответы (1)


Мы обнаружили две проблемы, из-за которых изображения не отображались.
1. Размер файла изображения был слишком большим, что приводило к ошибке outOfMemory, которая, в свою очередь, приводила к тому, что кнопки не отображали изображения.
2. Атрибут переднего плана не работает для API 22 и ниже.

Шаги по решению этих проблем:
1. Мы уменьшили размер файлов изображений.
2. Мы заменили Button на ImageButton
3. В файле XML мы удалили атрибут переднего плана, добавили черный фон и добавили изображение через атрибут src. Ниже приведен фрагмент.

<ImageButton
    android:layout_weight="5"
    android:id="@+id/firstP"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="top"
    android:src="@drawable/icebutton"
    android:scaleType="fitXY"
    android:background="@android:color/black"/>
  1. Затем нам пришлось изменить наш код, чтобы динамически регулировать высоту кнопок в соответствии с новыми кнопками изображения с помощью этой ссылки, установив LayoutParams:
    как изменить размер динамической кнопки в android

Теперь все работает идеально!

person Kumar    schedule 29.06.2016
comment
API 22! Это была моя проблема. Пробежал 21 для тестирования. Спасибо. - person LimaNightHawk; 02.04.2017