2017-02-20 60 views
0

我必须以编程方式在我的列表视图中获取选定行的背景颜色。 我写这个着色行:在列表视图中获取选定行的背景颜色

View v;  
v.setBackgroundColor(context.getResources().getColor(R.color.childArticle)); 

但我无法弄清楚如何获得该行的颜色,因为我必须做这样的事情:

colorOfSelectedRow = v.getBackgroundColor(); 
if(colorOfSelectedRow == MY_COLOR) { 
    // Do something 
} 

谢谢!

编辑: 我想知道按下行的颜色,但不是所有的行都用相同的颜色着色!

+0

如果设置每个项目用相同的颜色,那么你不知道它的颜色,不要你呢? –

+3

我想你的答案已经回答了[HERE](http://stackoverflow.com/questions/14779259/get-background-color-of-a-layout) –

+0

不!并非所有的行都是彩色的! –

回答

1

可以标签内设置背景颜色标识如下图所示,也得到了在color.xml提到

第1颜色代码编号到标签颜色的标识。

view.setTag(R.color.childArticle); 

然后,当你想获得背景颜色从视图中获取标签并解析其值,并从color.xml文件中获取颜色代码。

int ColorId = Integer.parseInt(view.getTag().toString()); 
+0

和我如何获得颜色?我需要在列表视图中检索选定行的颜色。我试过这个:'ColorDrawable viewBackground =(ColorDrawable)listViewOrder.getBackground(); int colorId = viewBackground.getColor();'但它给了我** - 1 ** .. –

+0

您还需要在标记中设置颜色。所以标签可以保存颜色代码ID,您可以通过颜色代码访问颜色。 –

+0

你的代码给我总是相同的颜色,但我有一些没有背景颜色的行和红色背景颜色的行。当我按下一行时,我想知道所选的行是否为红色。与您的代码我总是有相同的结果 –

0

如果没有颜色背景设置,此代码将输出单击行的颜色字符串或不显示任何内容。但是你没有指定你如何设置背景颜色。

ListView listView = (ListView) findViewById(R.id.listView); 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
adapter.add("Blue"); 
adapter.add("None"); 
adapter.add("Red"); 
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    int color; 

    Drawable background = view.getBackground(); 
    if (background instanceof ColorDrawable) { 
     color = ((ColorDrawable) background).getColor(); 
     Log.d("MainActivity", Integer.toHexString(color)); 
    } 
    } 
}); 
listView.setAdapter(adapter); 
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    listView.getChildAt(0).setBackgroundColor(ContextCompat.getColor(MainActivity.this, android.R.color.holo_blue_dark)); 
    listView.getChildAt(2).setBackgroundColor(ContextCompat.getColor(MainActivity.this, android.R.color.holo_red_dark)); 
    } 
}); 
+0

编辑:它总是返回“ffffffff”。你确定是选定的行吗? –

+0

你能检查我更新的答案吗?它用于点击行,但可以将其更改为选定的行。你想什么时候获得颜色?在几个行被选中的某个阶段点击? – Agraphie

+0

我真的是listView监听器的outsite。尝试想象点击一个按钮,它会给你所选列在列表视图中的颜色。我不知道如何从setOnItemClickListener的外部获取当前选定的列表视图的行颜色! –

0
final int MY_COLOR = R.color.childArticle; 
View v;  
v.setBackgroundColor(context.getResources() 
.getColor(R.color.childArticle)); 
view.setTag(R.color.childArticle); 
Integer colorOfSelectedRow = (Integer) v.getTag(); 
if(colorOfSelectedRow == MY_COLOR) { 
// Do something 
} 

使用这个..

相关问题