Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Nika_DE
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 3
#1

Разноцветный список цветов без текста - Android

12.07.2013, 10:52. Просмотров 832. Ответов 3
Метки нет (Все метки)

Добрый день!

Необходимо создать список цветов с помощью массива нужных расцветок.
Т.е. что-то вроде цветовой палитры. (Можно конечно вставить просто большую картику в Activity.)

Но хотелось бы сделать именно программным путём список (ListView)
у которого каждый элемент будет иметь свой цвет фона.

1. Возможно ли такое? Если да, то как?
2. Какой тип массива нужен и где создать сам массив: в colors.xml, strings.xml или же в arrays.xml?
3. Нужно ли создавать свой адаптор или лучше использовать из тех, что уже существуют?

(Примеров списков строковых ресурсов очень много, но мне нужно только фоны менять каждого элемента в списке.)

Надеюсь, что постановка вопроса ясна. Буду очень благодарна, если хоть кто-нибудь направит в нужное русло.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2013, 10:52     Разноцветный список цветов без текста
Посмотрите здесь:

Список файлов Android
Android Разноцветный ListView
Динамический список Android
Android Круговой список
Android Прокрутка текста в TextView без ScrollView
Не выводит список Android
Список с обновлением Android
Список и кнопки Android
Android Кастомный список
Кастомизировать список Android
Android Выравнивание текста по ширине верхнего текста
Android Кастомизированный список

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DedBoroda
ComfyMobile
87 / 87 / 6
Регистрация: 04.11.2010
Сообщений: 376
12.07.2013, 11:30     Разноцветный список цветов без текста #2
Цитата Сообщение от Nika_DE Посмотреть сообщение
1. Возможно ли такое? Если да, то как?
Возможно, очень даже не сложно. Начните, я Вам помогу. Что у Вас уже есть?
Цитата Сообщение от Nika_DE Посмотреть сообщение
2. Какой тип массива нужен и где создать сам массив: в colors.xml, strings.xml или же в arrays.xml?
Нужно будет использовать List<Color>, например.
Цитата Сообщение от Nika_DE Посмотреть сообщение
3. Нужно ли создавать свой адаптор или лучше использовать из тех, что уже существуют?
У Вас нетривиальная задача, придется делать свой адаптер, где будет меняться цвет фона соответствующего элемента меню.
Nika_DE
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 3
13.07.2013, 11:13  [ТС]     Разноцветный список цветов без текста #3
Показалось, что уже никто не ответит и поэтому было решено сделать массив с картинками определённых цветов.
Есть хороший пример для такого случая, здесь:

http://www.mobilab.ru/androiddev/androidlistview.html

Вот что было начато:

1. Создан xml файл "farbpalette_layout.xml":

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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:background="@android:color/black"
    android:orientation="vertical" >
 
    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
 
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@string/listtext"
        android:src="@drawable/f_gray" />
 
</LinearLayout>

Затем класс для хранения информации "ListItem.java". Он довольно маленький. Может, нужно было его вставить в класс адаптора, как внутренний класс?

Java
1
2
3
4
5
6
7
8
public class ListItem {
 
    int image;
 
    public ListItem(int _image) {
        image = _image;
    }
}
Теперь сам класс адаптора "FarbenAdapter.java":

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class FarbenAdapter extends BaseAdapter {
 
    private final Context context;
    LayoutInflater l_inflater;
    ArrayList<ListItem> items;
 
    public FarbenAdapter(Context context, ArrayList<ListItem> items) {
 
        this.context = context;
        this.items = items;
        l_inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
 
    @Override
    public int getCount() {
        return items.size();
    }
 
    @Override
    public ListItem getItem(int position) {
        return items.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            view = LayoutInflater.from(context).inflate(
                    R.layout.farbpalette_layout, null);
        }
        ListItem item = (getItem(position));
        ((ImageView) view.findViewById(R.id.imageView1))
                .setImageResource(item.image);
 
        return view;
    }
}
И последнее - использование всех этих заготовок в классе Activity "FarbenActivity.java":


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class FarbenActivity extends ListActivity {
 
    private ArrayList<ListItem> farben;
 
    // Массив с картинками разного цвета
    int[] img = { R.drawable.f_darkgray, R.drawable.f_black,
            R.drawable.f_deep_pink, R.drawable.f_red, R.drawable.f_red2 };
 
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        farben = new ArrayList<ListItem>();
        for (int i = 1; i <= 5; i++) {
            farben.add(new ListItem(img[i - 1]));
        }
        FarbenAdapter fabAdapter;
        fabAdapter = new FarbenAdapter(this, farben);
        setListAdapter(fabAdapter);
    }
 
    public void onListItemClick(ListView parent, int position) {
        Toast.makeText(this, "Farbenname", Toast.LENGTH_SHORT).show();
        // При щелчке на элемент списка будет всплывать название данного цвета
    }
 
    public boolean onOprionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        startActivity(item.getIntent());
        return true;
    }
}
Добавлено через 10 минут
Использование большого количества картинок, каждая из которых изображает один цвет - довольно неуклюжее решение.
Во-первых, будет занято слишком много памяти и, во-вторых, программным путём куда интереснее добиться решения, чем сидеть и делать такие скучные изображения.

Так здорово будет, если вы мне поможете, я хоть продвинусь в своих знаниях ещё чуть-чуть.

Добавлено через 17 часов 29 минут
DedBoroda, вы можете мне объяснить, что может быть в описании класса Color? Какой тип взять для обозначения цвета?
Значит, мне лучше всё заново написать или можно немного изменить адаптор? Можете помочь? Я не очень понимаю как написать адаптор для такого случая.
Nika_DE
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 3
13.07.2013, 23:09  [ТС]     Разноцветный список цветов без текста #4
DedBoroda, благодарю Вас, за помощь.

Делусь с решением задачи. Возможно, что у кого-нибудь могут тоже появиться похожие вопросы.

Итак:

1. Создаётся два xml-файла, один для элемента в списке, а другой - для всего списка.

"item.xml" - тут главным можно считать id y TextView:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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="wrap_content"
    android:orientation="vertical" >
 
    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="left|center_vertical"
        android:layout_margin="5dp"
        android:gravity="center_horizontal"
        android:text="@string/leer_text" />
 
</LinearLayout>
"farbpalette_layout.xml" в котором стоят ListView и TextView

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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:background="@android:color/black"
    android:orientation="vertical" >
 
    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="332dp" >
    </ListView>
 
    <TextView      
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/leer_text" />
 
</LinearLayout>
2. Создаётся класс для Activity, например, "FarbenActivity.java"

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class FarbenActivity extends Activity {
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        // Находим Layout, в котором будет стоять сесь список
        setContentView(R.layout.farbpalette_layout);
 
        // Создаём список цветов
        ArrayList<Integer> colors1 = new ArrayList<Integer>();
        colors1.add(getResources().getColor(R.color.butter_yellow));
        colors1.add(getResources().getColor(R.color.gray));
        colors1.add(getResources().getColor(R.color.royal_blue));
        // и другие цвета..
 
        // Создаём адаптор, который принимает наш ArrayList
        FarbenAdapter adapter = new FarbenAdapter(this, colors1);
 
        // ListView в который вписываем с помощью адаптора наш ArrayList
        ListView listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(adapter);
    }}
3. Создаётся адаптор, например, "FarbenAdapter.java":

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class FarbenAdapter extends BaseAdapter {
 
    private final Context context;  
    ArrayList<Integer> colorsarray = new ArrayList<Integer>();
 
    public FarbenAdapter(Context context, ArrayList<Integer> colors) {
        this.context = context;
        colorsarray = colors;
    }
    
    @Override
    public int getCount() {
        
        return colorsarray.size();
    }
 
    @Override
    public Object getItem(int position) {
        return colorsarray.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // получим layout item, чтобы с ним дальше работать
        View view = View.inflate(context, R.layout.item, null);
        
        // дальше с него получим TextView
        TextView colorText = (TextView) view.findViewById(R.id.text);
        
        //дальше зададим этому TextView текст - это код цвета
        //position у нас аргумент, показывающий позицию в листе..
        colorText.setText(String.valueOf(getItem(position)));
        
        // .. и задаем фон
        colorText.setBackgroundColor((Integer)getItem(position));
        
        return view;
    }
}
Таким образом, получаем разноцветный список.
Успехов всем!
Yandex
Объявления
13.07.2013, 23:09     Разноцветный список цветов без текста
Ответ Создать тему
Опции темы

Текущее время: 14:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru