【问题标题】:How to change textcolor of textview in listview depending on it's value?如何根据值更改列表视图中文本视图的文本颜色?
【发布时间】:2014-05-02 11:05:59
【问题描述】:

在我的列表视图中更改 textview 的 textcolor 时遇到困难。

我有一行包含多个文本视图,但只有一个文本视图可见。

我希望该 textview 的文本根据该行中其他 textview 的值更改 textview 的颜色。我很确定当你看到代码时你会明白我的意思。

runOnUiThread(new Runnable() {
            public void run() {
                /**
                 * Updating parsed JSON data into ListView
                 * */
                ListAdapter adapter = new SimpleAdapter(
                        MainActivity.this, strojeviList,
                        R.layout.list_item, new String[] { TAG_SIFSTROJA,
                                TAG_NAZIVSTROJA, TAG_AKTIVAN, TAG_AUTH,
                                TAG_IP, TAG_POCETAK},
                        new int[] { R.id.sifstroja, R.id.nazivstroja, R.id.aktivan,
                                R.id.auth, R.id.ip,R.id.pocetak});
                // updating listview
                setListAdapter(adapter);
             View v;
            TextView blab= (TextView)findViewById(R.id.tekst);
           blab.setTextColor(getResources().getColor(R.color.zelena));

             ListView lv=getListView();

                TextView akt;
                TextView naziv;
                int bla=lv.getCount();
                Log.d(TAG_AUTH,String.valueOf(bla));
                for (int i = 0; i < lv.getCount(); i++) {
                    v=(View) lv.getAdapter().getView(i,null,null);
                    akt = (TextView) v.findViewById(R.id.aktivan);
                    naziv=(TextView)v.findViewById(R.id.nazivstroja);
                    String aktiv=akt.getText().toString();
                    String aktivtekst=naziv.getText().toString();

                    Log.d(aktiv, aktiv);
                    if(aktiv.equals("1"))
                    {
                        Log.d("uso","uso sam");
                        Log.d("uso",aktivtekst);

                        naziv.setTextColor(getResources().getColor(R.color.zelena));

                    }
                    else {
                        Log.d("nisam aktivan","nisam aktivan");
                        Log.d("nisam aktivan",aktivtekst);
                        naziv.setTextColor(getResources().getColor(R.color.crvena));
                    }
                }


            }

我可以获得 textview 值,如果部分工作正常但颜色没有改变,那么我该怎么做才能改变颜色?

【问题讨论】:

  • 此代码是否在自定义适配器中?
  • 不,它在外面,我将编辑有问题的代码,以便您可以看到所有内容

标签: android android-listview textview textcolor


【解决方案1】:

你需要把这段代码移到适配器的getView方法里面,例如:

....
ListAdapter adapter = new SimpleAdapter(
                    MainActivity.this, strojeviList,
                    R.layout.list_item, new String[] { TAG_SIFSTROJA,
                            TAG_NAZIVSTROJA, TAG_AKTIVAN, TAG_AUTH,
                            TAG_IP, TAG_POCETAK},
                    new int[] { R.id.sifstroja, R.id.nazivstroja, R.id.aktivan,
                            R.id.auth, R.id.ip,R.id.pocetak}){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = super.getView(position, convertView, parent);
    TextView akt = (TextView) v.findViewById(R.id.aktivan);
    TextView naziv=(TextView)v.findViewById(R.id.nazivstroja);
    String aktiv=akt.getText().toString();
    String aktivtekst=naziv.getText().toString();

    Log.d(aktiv, aktiv);
    if(aktiv.equals("1"))
    {
           Log.d("uso","uso sam");
           Log.d("uso",aktivtekst);
           naziv.setTextColor(getResources().getColor(R.color.zelena));

     }
     else {
           Log.d("nisam aktivan","nisam aktivan");
           Log.d("nisam aktivan",aktivtekst);
            naziv.setTextColor(getResources().getColor(R.color.crvena));
     }  
    return v;
  }
};
setListAdapter(adapter);

TextView blab= (TextView)findViewById(R.id.tekst);
blab.setTextColor(getResources().getColor(R.color.zelena));

【讨论】:

  • 我不知道该怎么做,请检查我编辑的代码并解释一下,我对此有点陌生。
【解决方案2】:

试试这个....

naziv.setTextColor(Color.parseColor(getResources().getColor(R.color.crvena)));

【讨论】:

  • 资源中有十六进制的颜色代码吗?
  • 是的,我已经以这种方式在另一个活动中更改了 textview 颜色,这样就可以了
【解决方案3】:

有很多方法可以在运行时更改TextViewtextColor

  • textView.setTextColor(Color.rgb(0,0,0));

  • textView.setTextColor(Color.RED);

  • textView.setTextColor(getResources().getColor(R.color.red));

这里要注意的是:

int android.graphics.Color.GREEN = -16711936 [0xff00ff00]
int com.example.R.color.green = 2130968577 [0x7f040001]

您可以看到两者并不相同,但 /res/values/color.xml 是这样的:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#ff0000</color>
    <color name="green">#00ff00</color>
</resources>

所以我认为由于 android.graphics.Color.GREENcom.example.R.color.green 的差异,我们没有得到预期的结果使用textView.setTextColor(R.color.green);时的结果

【讨论】:

  • 这不是问题,颜色完全没有变化
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
相关资源
最近更新 更多