繁体   English   中英

Android - 更改ListView特定项目的背景颜色

[英]Android - Change background color of specific item of ListView

我正在制作一款游戏,它将使用Listview将一些文字显示为聊天。

其中一些文本代表事件 ,因此我想根据特定事件更改其背景颜色:EX。 有人被杀, 特定Listview的项目将有红色背景颜色

我该如何实现这一目标?

这是我的JAVA代码:

            //STARTING SETUP
        ArrayList<String> arrayListMother;
        ArrayAdapter<String> arrayAdapterMother;
        ListView listViewMother;

        int counter;
        boolean introDone = false;

        String[] night = {"Welcome!","This is Lupus In Tabula!","You're gonna experience the Hasbro Game in a total new way, have fun!"};
        String[] day = {"Thank you!","Great","Let's do it!"};
        String[] dead = {"Thank you!","Great","Let's do it!"};
        String[] saved = {"Thank you!","Great","Let's do it!"};

        Button buttonGo;
        //ENDING SETUP


        //CREATE - CREATE//
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_game);
            setup();

        }
        //CREATE - CREATE//


    public void setup(){

    arrayListMother = new ArrayList<String>();
    arrayAdapterMother = new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, arrayListMother);
    listViewMother = (ListView) findViewById(R.id.list_mother);
    listViewMother.setAdapter(arrayAdapterMother);
    buttonGo = (Button)findViewById(R.id.buttonGo);
}   

这是我的XML代码:

<?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"
android:orientation="vertical">

<ListView
    android:id="@+id/list_mother"
    android:text="@string/go"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:textAppearance="?attr/textAppearanceListItem"
    android:divider="@null"
    android:layout_weight="7"/>

<Button
    android:id="@+id/buttonGo"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:text="@string/go"
    android:textColor="@color/white"
    android:background="@color/colorPrimary"
    android:enabled="true"
    android:onClick="play" />
</LinearLayout>

使用此代码:

listViewMother.getChildAt(position).setBackgroundColor(
            Color.parseColor("#00743D"));

覆盖getView for ArrayAdapter 根据条件变化颜色或做必要的事情。 您已经为ArrayAdapter构造函数提供了参数。 所以不需要再次膨胀视图。 得到相同的,并做所需的事情。 类似地, getItem(position)获取指定位置的数据。

http://developer.android.com/reference/android/widget/ArrayAdapter.html#getItem(int)

listViewMother.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayListMother) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = super.getView(position, convertView, parent);

    if(getItem(position).equals("Somebody gets killed"))
    {
       // do something change color
       row.setBackgroundColor (Color.RED); // some color  
    }
    else
    {
       // default state
       row.setBackgroundColor (Color.WHITE); // default coloe
    }
    return row;
  }
});

在绑定视图的适配器类中,可以检查特定条件并按以下方式设置颜色。这样,您可以动态设置文本或背景的颜色。 希望这可以帮助。 我在这里使用的是Recycler viewer,它超越了onBindViewHolder。 您的适配器应具有绑定视图的方法。

@Override
 public void onBindViewHolder(ViewHolder holder, int position) {
     Person person = personList.get(position);

     holder.username.setText(person.getName());
     holder.arriveTime.setText(DateFormat.format("hh:mm a",(person.getArriveTime() * 1000)));


     if(person.getName().equals("NoVisitor"))
     {
         holder.username.setTextColor(Color.GRAY);
         holder.arriveTime.setTextColor(Color.GRAY);
         holder.leaveTime.setTextColor(Color.GRAY);
     }
     else
     {
         holder.username.setTextColor(Color.BLACK);
         holder.arriveTime.setTextColor(Color.BLACK);
         holder.leaveTime.setTextColor(Color.BLACK);
     }
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM