Создать ColorView ListView в Android - PullRequest
       3

Создать ColorView ListView в Android

0 голосов
/ 02 августа 2011

Мое видение состоит в том, чтобы создать listView с цветовой кодировкой, где я хочу иметь тонкую цветную полосу в макете каждого элемента. Эта полоса должна быть определенного цвета, основанного на том, что я передаю в упражнение. Как мне создать такую ​​полосу (по сути, заполненный прямоугольник) и установить ее цвет. В настоящее время я использую собственный макет для своего списка и использую SimpleAdapter с ArrayList.

Я знаю, что мне придется использовать

if (integerForColor == someNumber)
    //set the color of the shape, bar

Я уверен, что это простая вещь, о которой я просто не могу думать в данный момент, или, должно быть, мне не хватает фундаментального. Заранее благодарим вас за ваши усилия.

РЕДАКТИРОВАТЬ 1 :

Пытаясь расшифровать некоторые ответы, которые были здесь, я понял, что вам, ребята, нужен мой код о том, как я строю свой список:

public class AddScreen extends Activity implements OnClickListener,
    OnItemClickListener, OnItemLongClickListener {
SimpleAdapter adapter;
List<HashMap<String, String>> painItems = new ArrayList<HashMap<String, String>>();
ListView listthings;

public void onCreate(Bundle savedInstanceState) {
from = new String[] { "row_1", "row_2" };
to = new int[] { R.id.row1, R.id.row2 };

adapter = new SimpleAdapter(this, painItems, R.layout.mylistlayout,
            from, to);

listthings.setAdapter(adapter);

}

Я добавил метод getView () :

public View getView (int position, View convertView, ViewGroup parent){
    convertView.setBackgroundColor(R.drawable.red);
    return convertView;
      //I have no inflater as of now...
}

enter image description here EDIT 2 : Согласно предложению @huntsfromshadow, я создал новое действие и переопределил там метод getView ().

//Imports
 public class Adapter extends SimpleAdapter{

public Adapter(Context context, List<? extends Map<String, ?>> data,
        int resource, String[] from, int[] to) {
    super(context, data, resource, from, to);
    // TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
    View row = convertView;
    row.setBackgroundColor(0xFF0000FF);
    return row;

}

}

К сожалению, он все еще не работает.

Ответы [ 4 ]

1 голос
/ 02 августа 2011

Предполагая, что у вас есть все остальное, вероятно, проще всего определить ваш цветной фон в xml следующим образом (red.xml):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#DD0000"
        android:endColor="#EE0000"
        android:angle="270" />
 </shape>

И затем использовать его следующим образом:

context.getResources().getColor(R.drawable.red).

Вам нужно будет передать и сохранить объект контекста из родительского Activity.

Посмотрите на ответ, который я дал о том, как создать ListView (да, это анализ данных из JSON - игнорируйте это) здесь

0 голосов
/ 02 августа 2011

Я взломал что-то очень похожее на цветной код текста каждого элемента по-разному. Вместо этого вы можете легко адаптировать его для изменения цвета полосы.

Поскольку каждый элемент в списке имеет свой цвет, вы должны помнить, какой цвет связан с каким местоположением в массиве. Я просто использовал простой целочисленный массив в качестве члена моего ColorItemsAdapter.

private class ColorItemsAdapter extends ArrayAdapter<String>
{
    /*
     * For each line to be added to the log, the text is stored in "items"
     * and the text color is stored in "colors"
     */
    ArrayList<String> items = new ArrayList<String>();
    ArrayList<Integer> colors = new ArrayList<Integer>();
    int length = 0;

    public ColorItemsAdapter(Context context, int textViewResourceId, List<String> stringObj)
    {
        super(context, textViewResourceId, stringObj);
        if(stringObj != null)
        {
            length = stringObj.size();
        }
    }

    /**
     * Adds an item to the adapter, and specifies what color the item should be
     * @param item
     * The text to be added
     * @param color
     * The color of the text to be added
     */
    public void add(String item, Integer color)
    {
        items.add(item);
        colors.add(color);
        length++;
        super.add(item);
    }

    /**
     * Adds an item to the adapter at position <i>index</i>
     * @param item
     * The text to be inserted
     * @param index
     * The index at which to insert the text
     * @param color
     * The color of the text to be inserted
     */
    public void insert(String item, int index, Integer color)
    {
        items.add(index, item);
        colors.add(index, color);
        length++;
        super.insert(item, index);
    }

    /*
     * Changes the color of the TextView appropriately before calling the super
     */
    public View getView(int position, View convertView, ViewGroup parent)
    {
        TextView v = (TextView) convertView;
        if (v == null)
        {
            LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = (TextView) vi.inflate(R.layout.log_list_item, null);
        }

        /*
         * Here I am setting the text color
         * but you could set some other attribute instead.
         */
        v.setTextColor(colors.get(position));

        return super.getView(position, v, parent);
    }
}

Затем, чтобы добавить элемент в свой список (в данном случае красный), вы можете просто использовать

myColorItemsAdapter.insert(message, 0, Color.RED);
0 голосов
/ 02 августа 2011

Как сказал @CaspNZ, используйте файлы форм .xml.

В вашем коде расширьте ListAdapter (возможно, BaseAdapter или ArrayAdapter).Переопределите функцию getView следующим образом:

public View getView (int position, View convertView, ViewGroup parent){
    if (convertView == null){
        //assuming you already have inflater initilized somewhere
        convertView = inflater.inflate(you_layout_file.xml, parent, false);
    }

    //some logic to determine what color the background should be
    convertView.setBackgroundDrawable(R.drawable.the_file_you_want_to_use.xml)
}
0 голосов
/ 02 августа 2011

Создайте пользовательский адаптер и переопределите getView.Это тот момент, когда вы можете принимать любые сложные макетные решения, основанные на значениях и логике.

Поиск в Google пользовательского адаптера даст вам много ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...