如何设置AndroidListViewentries/items的背景颜色?

How to set background color of Android ListView entries/items?

我有一个 ListView,其条目的背景颜色比应用程序的布局更浅,我不知道 why.This 是一个快照,红色箭头指示颜色差异:Main_Activity

我不知道从哪里开始。

这是占用主题的manifest.xml文件,AppTheme:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gtfp.workingmemory"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="19" />

    <!-- Start an Alarm When the Device Boots if past due -->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity
            android:name=".appController"
            android:launchMode="singleTop"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
                android:name=".editToDoItem"
                android:theme="@android:style/Theme.Holo.Dialog" >
        </activity>
        <receiver android:name=".ToDoAlarm">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        <activity
                android:name=".AlarmActivity"
                android:theme="@android:style/Theme.Holo" >
        </activity>
        <activity
                android:name=".SettingsActivity"
                android:theme="@android:style/Theme.Holo" >
        </activity>
    </application>

</manifest>

该主题实际上是 Theme.Holo 在资源文件中:

<resources>

    <!--
        Base application theme for API 11+. This theme completely replaces
        AppBaseTheme from res/values/styles.xml on API 11+ devices.
    -->
<!--    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">  -->

    <style name="AppBaseTheme" parent="android:Theme.Holo">

        <!-- API 11 theme customizations can go here. -->
    </style>
</resources>

这是您将在此处看到 ListView 的应用程序的主要布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:paddingBottom="@dimen/activity_vertical_margin"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                tools:context="${relativePackage}.${activityClass}">

    <ListView
            android:id="@+id/lvToDos"
            android:layout_width="206dp"
            android:layout_height="380dp"
            android:layout_alignParentEnd="true"
            android:layout_alignParentStart="true"
            android:smoothScrollbar="false"
            android:layout_above="@+id/itemEntryView"
            android:layout_alignParentTop="true"
            >
    </ListView>

    <LinearLayout
            android:id="@+id/itemEntryView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_alignParentBottom="true"
            android:layout_alignParentStart="true">

        <Button
                android:id="@+id/btnNewToDo"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:onClick="editToDoItem"
                android:text="@string/new_item"
                android:textSize="@dimen/smallTextSize"/>
    </LinearLayout>
</RelativeLayout>

ListView中的每一行如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="horizontal"
 android:layout_width="fill_parent"
 android:gravity="center"
 android:id="@+id/container"
 android:layout_height="?android:attr/listPreferredItemHeight"
        >

    <ImageView
        android:id="@+id/priorityImage"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:scaleType="center"
        android:focusable="false"
        android:clickable="true"
        android:layout_marginLeft="5sp"
        android:layout_marginRight="5sp"
        android:src="@drawable/low"
            />

  <TextView
      android:id="@+id/itemText"
      android:layout_width="0dp"
      android:layout_height="fill_parent"
      android:layout_weight="1"
      android:gravity="center_vertical"
      android:focusable="false"
      android:textAppearance="?android:attr/textAppearanceMedium"
      android:textAlignment="center"
      android:textStyle="bold"
     />

   <TextView
       android:id="@+id/itemDueDate"
       android:layout_height="fill_parent"
       android:layout_width="wrap_content"
       android:layout_marginRight="5sp"
       android:scaleType="center"
       android:textSize="12sp"
       android:focusable="false"
       android:textStyle="bold"
       android:gravity="center"
       />
</LinearLayout>

您似乎想要更改列表视图的背景颜色,如果是这种情况,那么您可以在自定义列表视图基本适配器中轻松地执行此操作,您可以在基本适配器的 getview 方法中执行此操作。 这是示例代码

   public View getView(int position, View convertView, ViewGroup parent)
{
    if (convertView == null)
    {
        convertView = new TextView(ListHighlightTestActivity.this);
        convertView.setPadding(10, 10, 10, 10);
        //here I am changing the color of text in textview 
        ((TextView)convertView).setTextColor(Color.WHITE);
    }

    convertView.setBackgroundColor((position == curSelected) ? 
        Color.argb(0x80, 0x20, 0xa0, 0x40) : Color.argb(0, 0, 0, 0));
    ((TextView)convertView).setText((String)getItem(position));

    return convertView;
}

或者如果您知道使用选择器的想法,那么您可以通过选择器轻松实现它。

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false" android:drawable="@color/BackgroundColor" />
    <item android:drawable="@color/transparent" />
</selector>

我相信您的问题会在上述两个解决方案中得到解决。使用它们中的任何一个,这对您来说很容易。

在列表视图中设置应用颜色

  <ListView
        android:id="@+id/lvToDos"
        android:layout_width="206dp"
        android:layout_height="380dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentStart="true"
        android:smoothScrollbar="false"
        android:background="@color/app_color"
        android:layout_above="@+id/itemEntryView"
        android:layout_alignParentTop="true"
        >
</ListView>

我发现了问题。 在 getView 中,我通过将资源背景设置为自定义的可绘制对象,为 ListView 中的每个项目生成 'rounded corners':

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
:
:
:
:
            convertView.setBackgroundResource(R.drawable.rounded_corner);
   }

好吧,在可绘制对象中,我发现那里正在绘制纯色。我把它注释掉了,现在我得到了我想要的:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

<!--    <solid android:color="#433E41"/>  -->

    <corners android:radius="5dp" />

    <padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp" />

    <stroke android:width="3dp" android:color="#E6E6E6"/>
</shape>`enter code here`

我刚刚在调查另一件事时偶然发现了这一点(我讨厌编程)。无论如何都要感谢你的努力。