Флажок Android плохо виден на черном фоне проблема

Я хочу составить список флажков с белым текстом на черном фоне. Мы используем следующий код:

CheckBox chkAdditionalPack = new CheckBox(MainActivity.this);
chkAdditionalPack.setTag(j);
chkAdditionalPack.setText(offerPackageListForAddl.get(j).getOfferPackageName().toString());
chkAdditionalPack.setTextColor(Color.WHITE);

Это дает вид, как показано ниже: флажок на черном фоне

Проблема в том, что теперь флажки не видны четко. Как сделать его четко видимым, не трогая другие части?


person dev_android    schedule 04.08.2014    source источник


Ответы (4)


попробуйте приведенный ниже xml-код ref из решения

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:state_checked="true" 
        android:drawable="@drawable/cbchk_blue"
        android:state_focused="false" >
    </item>

    <item
        android:state_checked="true" 
        android:drawable="@drawable/cbchk_blue"
        android:state_focused="true" >
    </item>

    <item
        android:state_checked="false" 
        android:drawable="@drawable/cbunchk_blue"
        android:state_focused="false" >
    </item>

    <item
        android:state_checked="false" 
        android:drawable="@drawable/cbunchk_blue"
        android:state_focused="true" >
    </item>
</selector>
person Yograj Shinde    schedule 04.08.2014

Если вы используете android-studio, установите флажок и в свойствах установите значение свойства buttonTint на любой цвет, который вы хотите, используя редактор. Или, если вы предпочитаете решение XML, используйте

android:buttonTint="@color/white"

Примечание. Предполагается, что белый цвет определен.

person Joshua Michael Waggoner    schedule 26.05.2015
comment
требуется выше 21, зачем ниже 21 - person Tarun Sharma; 04.06.2016
comment
Ниже 21 используйте: tools: buttonTint = @ color / white - person M. Marmor; 17.07.2018

Один действительно простой способ сделать это: в xml для флажка просто установить для переменной android:background нужный цвет.

Вместо того, чтобы создавать вместе текст и флажок, просто создайте XML-файл с настраиваемым макетом элемента списка.

например custom_list_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal">

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#000000"

        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#FFFFFF"
        />


</LinearLayout>
person gavlaaaaaaaa    schedule 04.08.2014
comment
Не понимаю. Флажок и смежный текст полностью находятся под одним и тем же видом CheckBox. Если вы установите черный фон, он будет выглядеть так же, как на изображении. - person dev_android; 04.08.2014
comment
@dev_android см. мое редактирование, трюк состоит в том, чтобы создать собственный макет элемента списка в XML-файле, а не создавать его программно, тогда у вас есть свобода выбора цвета для отдельных компонентов - person gavlaaaaaaaa; 04.08.2014
comment
Для CheckBox U вообще не нужен TextView. Если вы его используете, он не изменит проверенный статус при нажатии на текст. Очень плохая идея. - person dev_android; 05.08.2014
comment
@dev_android, если вы хотите гибкости и настройки элементов списка, это хорошая идея. Конечно, вы можете сделать все это с помощью только флажка, но это не поможет вам с вашей проблемой цвета, поскольку ваш флажок и текст по-прежнему являются одним элементом, поэтому вы разделите их на два компонента. Вы должны реализовать это правильно, чтобы при щелчке по элементу списка флажок был отмечен и т. Д. Я понимаю, что это дополнительная работа, но в противном случае вы будете изо всех сил пытаться изменить цвет только флажка - person gavlaaaaaaaa; 05.08.2014
comment
Никакой борьбы ... просто напишите селектор с возможностью рисования и установите его на кнопку флажка. Не только действие OnClick, подумайте о загрузке макета: если у вас 200 строк, макет должен содержать 400 просмотров вместо 200 с более высоким потреблением памяти. Написать программу - это не просто соответствовать требованиям, а соответствовать тем же требованиям по качеству. - person dev_android; 05.08.2014
comment
Я понимаю, о чем вы говорите, но это не обязательно так, поскольку представления повторно используются при прокрутке для решения этой проблемы, поэтому отображаются только представления на странице и несколько дополнительных элементов. Кроме того, это позволяет вам изменить положение текстового поля, его размер отдельно от размера текста и т. Д. Я думаю, нам придется согласиться, чтобы не согласиться, оба этих решения здесь одинаково эффективны - выбранное вами решение является более простым, однако в отношении вашей проблемы качества, для адаптируемого кода, который разбит на модули и легко редактируется в будущем, это решение такого же, если не лучшего качества. - person gavlaaaaaaaa; 05.08.2014

Просто используйте это:

android:buttonTint="#FFFFFF"

** replace #FFFFFF любым цветом

person Han    schedule 07.12.2015