Подтвердить что ты не робот

Цвет текста в ListView Android

Я пытаюсь установить ListView textColor в черный цвет, так как я использую белый фон.

Вот моя MailActivity

public class MailActivity extends ListActivity {

    String[] listItems = { "Compose", "Inbox", "Drafts", "Sent" };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.mails);

        setListAdapter(new ArrayAdapter(this,
                android.R.layout.simple_list_item_1, listItems));

    }
}

и мой XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:background="#FFFFFF">

    <ListView 
        android:id="@android:id/list" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

    <TextView 
        android:id="@android:id/empty" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:text="Empty set" 
        android:textColor="#000000" />

</LinearLayout>

Я получаю фон белым, но не знаю, где установить передний план на черный. Я пробовал в xml и, похоже, не помогает.

4b9b3361

Ответ 1

Хорошо, вот некоторые вещи, о которых вам следует знать:

  • Цвет фона, который вы устанавливаете в своем XML файле, относится к активности, а не к элементам ListItems, которые вы пытаетесь определить.
  • Каждый элемент списка имеет свой собственный файл макета, который должен быть передан или завышен, если вы используете сложный макет для элемента списка.

Я попытаюсь объяснить это с помощью примера кода:

**** Давайте начнем с макета ListItems ** : сохраните его в вашей папке res/layout вашего Android-проекта, скажем ** list_black_text.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- Definig a container for you List Item-->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:gravity="center_vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <!-- Defining where should text be placed. You set you text color here-->
    <TextView
        android:id="@+id/list_content"
        android:textColor="#000000"
        android:gravity="center"
        android:text="sample"
        android:layout_margin="4dip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />
</LinearLayout>

Ну, простое расположение с TextView, если быть точным. У вас должен быть идентификатор, назначенный TextView, чтобы использовать его.

Теперь придет к вам экран/активность/главный макет, так как я сказал, что вы определяете фон на экране с атрибутом android:background. Я вижу, что вы также определили TextView, и я подозреваю, что вы пытаетесь определить там элемент содержимого/списка, который совсем не нужен.

Здесь отредактированный макет:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:background="#FFFFFF">

    <ListView 
        android:id="@android:id/list" android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
        <!-- REMOVED TEXT VIEW, AND KEEPING BACKGROUND WHITE -->
</LinearLayout>

И, наконец, самое главное, установите адаптер.

setListAdapter(new ArrayAdapter<String>(
            this, R.layout.list_black_text, R.id.list_content, listItems));

Обратите внимание на ресурс компоновки, который мы передаем на адаптер R.layout.list_black_text, и R.id.list_content, который мы объявили ID TextView. Я также изменил ArrayAdapter на тип String, поскольку он является общим.

Надеюсь, это все объясняет. Отметьте мой ответ, если вы согласитесь.

Бесполезный, но быстрый способ быстрого исправления
Вы также можете сделать это с помощью быстрого исправления, если вы не хотите идти вперед с определением сложного макета и т.д.

Пока экземпляр адаптера объявляет внутренний класс для этого, вот пример кода:

    ArrayAdapter<String> adapter=new ArrayAdapter<String>(
            this, android.R.layout.simple_list_item_1, listItems){

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view =super.getView(position, convertView, parent);

            TextView textView=(TextView) view.findViewById(android.R.id.text1);

            /*YOUR CHOICE OF COLOR*/
            textView.setTextColor(Color.BLUE);

            return view;
        }
    };

    /*SET THE ADAPTER TO LISTVIEW*/
    setListAdapter(adapter);

Ответ 2

  • Создайте файл стилей, например: my_styles.xml и сохраните его в res/values.
  • Добавьте следующий код:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
    <style name="ListFont" parent="@android:style/Widget.ListView">
        <item name="android:textColor">#FF0000</item>
        <item name="android:typeface">sans</item>
    </style>
    
    </resources>
    
  • Добавьте свой стиль в определение Activity в свой AndroidManifest.xml как атрибут android:theme и назначьте в качестве значения имя стиля, который вы создали. Например:

    <activity android:name="your.activityClass" android:theme="@style/ListFont">
    

ПРИМЕЧАНИЕ: Widget.ListView происходит от здесь. Также проверьте этот.

Ответ 3

Я клонировал simple_list_item_1 (Alt + Click) и поместил копию в мою папку res/layout, переименовал ее в list_white_text.xml с этим содержимым:

<?xml version="1.0" encoding="utf-8"?>    
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:textColor="@color/abc_primary_text_material_dark"
    android:minHeight="?android:attr/listPreferredItemHeightSmall" />

android:textColor="@color/abc_primary_text_material_dark" преобразуется в белый цвет на моем устройстве.

то в коде java:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_white_text, myList);

Ответ 4

Вы должны определить цвет текста в макете * simple_list_item_1 *, который определяет макет каждого из ваших элементов.

Вы задаете цвет фона LinearLayout, а не ListView. Цвет фона дочерних элементов LinearLayout по умолчанию прозрачен (в большинстве случаев).

И вы задаете черный цвет текста для TextView, который не является частью вашего ListView. Это отдельный элемент (дочерний элемент LinearLayout) здесь.

Ответ 5

никогда не используйте getApplicationContext(). Просто используйте свою деятельность как контекст. Посмотрите, поможет ли это.

Пожалуйста, проверьте здесь: Ответы CommonsWare

Ответ 6

Если вы не задали свой стиль деятельности, он показывает черный фон. Если вы хотите сделать такие изменения, как белый фон, черный текст списка, тогда это сложный процесс.

ADD андроид: theme = "@style/AppTheme" в манифесте Android.

Ответ 7

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

final ListView lv = (ListView) convertView.findViewById(R.id.list_view);

for (int i = 0; i < lv.getChildCount(); i++) {
    ((TextView)lv.getChildAt(i)).setTextColor(getResources().getColor(R.color.black));
}