it-swarm.com.ru

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

Я пытаюсь установить 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 и похоже, что это не помогает.

48
Harsha M V

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

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

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

**** Давайте начнем с макета 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, который является идентификатором TextView ID, который мы объявили. Я также изменил 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);
142
Shardul
  1. Создайте файл стилей, например: my_styles.xml, и сохраните его в res/values.
  2. Добавьте следующий код:

    <?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>
    
  3. Добавьте свой стиль к определению Activity в своем AndroidManifest.xml в качестве атрибута Android:theme и присвойте в качестве значения имя стиля, который вы создали. Например: 

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

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

21
silver_mx

Я клонировал 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);
8
aldux

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

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

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

3
user432219

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

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

0
john vuong

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

ДОБАВИТЬ Android: theme = "@ style/AppTheme" в манифесте Android

0
Haseeb Pervaiz