更改应用程序的背景颜色,具体取决于单击的列表项

时间:2015-02-19 16:35:20

标签: android colors onclick

我有一个带有颜色名称的ListView(字符串数组存储在单独的xml中)。如何根据我单击的列表中的颜色更改应用程序的背景?我有一个功能,根据点击的项目显示一个Toast消息,但我不知道如何将其转换为背景颜色更改功能。

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView parent, View view, int position, long id) {

            Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show();

        }
    });

3 个答案:

答案 0 :(得分:0)

您的活动有布局。

给它起一个名字(这里有一个名为外容器。)

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/outer_container"
            android:focusable="true"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

在其上执行findViewById,然后在视图上设置颜色。

     View view = findViewById( R.id.outer_container );
     view.setBackground or view.setBackgroundColor

答案 1 :(得分:0)

在OnItemClickListener中,您可以根据ListView项的文本更改颜色。

要解决此问题,您只需使用if-else检查TextView的值,然后更改颜色。我假设你没有颜色资源,所以我使用ARGB值。

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView parent, View view, int position, long id) {
        //Save the color name into a variable
        String colorName=((TextView) view).getText().toString();

        //Default is color White
        int color=Color.argb(255, 255, 255, 255);

        //Check the color name
        if(colorName.equals("black"))
        {
           color=Color.argb(255, 0, 0, 0);
        }
        else if (colorName.equals("red"))
        {
            color=Color.argb(255, 255, 0, 0);
        }
        //...and so on with other colors

        //Find the background view using the layout id. Then you will be able to change the background with the color
        findViewById(R.id.id_of_the_layout).setBackgroundColor(color);

    }
});

答案 2 :(得分:0)

ListViews有一个适配器,一个自定义的适配器或像ArrayAdapter这样的标准。类似的东西:

ArrayAdapter<String> itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);

您还可以创建自定义适配器来存储扩展BaseAdapter的复杂对象。在你的情况下,使用String可能就足够了。您可以为列表中的每个不同项目存储十六进制代码。

要使用getItem(int position)方法从适配器获取项目。

String colorCode = itemsAdapter.getItem(position);

所以,在你的itemClickListener中:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView parent, View view, int position, long id) {
        String colorCode = itemsAdapter.getItem(position);
        setBackgroundColor(colorCode);
    }
});

您的set backgroundColor方法将使用对启动时必须存储的父容器的引用。

View parentContainer;

...
// at onCreate
parentContainer = findViewById(R.id.container_id);
...

void setBackgroundColor(String colorCode) {
    int color = Color.parseColor(colorCode);
    parentContainer.setBackgroundColor(color);
}