Android, как установить цвет фона на кнопке - PullRequest
2 голосов
/ 25 сентября 2019

Я пытаюсь изменить цвет фона кнопки.Я нахожусь в Kotlin на SDK 21 на эмуляторе.

Вид и кнопка объявлены в XML-файле макета

<View
    android:id="@+id/myview"
    android:layout_width="64dp"
    android:layout_height="32dp"
    />
<Button
    android:id="@+id/showButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="12dp"
    android:text="test"
    />

API для установки цвета не работает:

    showButton.setBackgroundColor(0xff60a0e0.toInt()) <-- doesnt work

Что работает:

    myview.setBackgroundColor(0xff60a0e0.toInt()) <-- works, exact background color
    showButton.setTextColor(0xff000050.toInt()) <-- works, exact text color

После дальнейших попыток кажется, что я могу установить только альфа-канал кнопки, а не цвет:

    setBackgroundColor( 0xff000000.toInt())  <-- works, opaque
    setBackgroundColor( 0x00000000.toInt())  <-- works, transparent

Также то же самое с:

        showButton.setBackgroundColor(Color.GREEN) <-- doesnt work, button is opaque but not green
        showButton.setBackgroundColor(Color.TRANSPARENT) <-- works, button is transparent

Есть идеи?Я что-то упустил в других ответах или документации?

Вот полный макет, он используется для раздувания фрагмента, если это имеет значение:



    <?xml version="1.0" encoding="utf-8"?>
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:orientation="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
           <View
               android:id="@+id/myview"
               android:layout_width="64dp"
               android:layout_height="32dp"
              />
           <Button
               android:id="@+id/showButton"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="12dp"
               android:text="test"
               />
        </LinearLayout>
        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/dictionaryEntryRecyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="vertical"
            app:layoutManager="LinearLayoutManager"
            />
       </LinearLayout>

Ответы [ 4 ]

1 голос
/ 25 сентября 2019

Вы можете изменить цвет двумя способами;через XML или через кодирование.Я бы порекомендовал XML, так как для начинающих легче следовать.

xml добавьте этот атрибут для установки цвета фона android:background="#000"

 <Button
            android:id="@+id/showButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="fgkdjgdjsf"
            android:background="#000"
            />

Кодировка:

showButton.setBackgroundColor(resources.getColor(R.color.colorPrimary))
        showButton.setBackgroundColor(Color.BLACK)
1 голос
/ 25 сентября 2019

В вашем макете вы используете

 <Button
           android:id="@+id/showButton"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="12dp"
           android:text="test"
           />

, если вы хотите установить textSize в кнопке, вы должны использовать

android:textSize="12dp" 

, а для фона, установленного в кнопке, ваш макет должен бытьнапример: -

 <Button
    android:id="@+id/showButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="12dp"
    android:text="test"
    android:background="#ff60a0e0"/>

ИЛИ Вы также можете установить цвет в colors.xml как: -

<color name="button_background">#ff60a0e0</color>

, и тогда ваш тег кнопки в вашем макете будет иметь вид

 <Button
           android:id="@+id/showButton"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:textSize="12dp"
           android:text="test"
           android:background="@color/button_background"/>

Динамический вы можете установить цвет как

showButton.setBackgroundColor(ContextCompat.getColor(context!!, R.color.button_background))
1 голос
/ 25 сентября 2019

mButton.setBackgroundColor(ContextCompat.getColor(mContext, R.color.xxx));

0 голосов
/ 26 сентября 2019

Поскольку вы используете тему Theme.MaterialComponents.Light.DarkActionBar, отметьте doc и просто используйте MaterialButton с атрибутом app:backgroundTint:

<com.google.android.material.button.MaterialButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:backgroundTint="@color/color_selector"
    android:textColor="#FFF"
    android:text="BUTTON"
    />

где color_selector может быть цветом или селектором.Что-то вроде:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="@color/..." android:state_enabled="true"/>
  <item android:alpha="0.12" android:color="@color/..."/>
</selector>

enter image description here

...