Android - ListView с изображениями - PullRequest
0 голосов
/ 21 марта 2012

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

MECRM Image

Это мобильное приложение CRM (MECRM), и мне кажется, что это ListView с заголовками и изображениями.Но мне интересно, являются ли они изображениями или кнопками с изображениями в качестве фона из-за 2 вещей:

1.) Первое изображение «Объявления» обрезается, поэтому, если это был ImageView, я не слишкомуверен, если это будет делать то же самое.2.) Изображение Opportunity имеет другое изображение при нажатии (как и все другие изображения).

Я предполагаю, что мой вопрос заключается в том, какие элементы управления мне нужно использовать, чтобы воспроизвести это?

Ответы [ 4 ]

0 голосов
/ 21 марта 2012

Такое представление абсолютно возможно при использовании ListView

. Вам потребуется реализовать собственный ListAdapter с пользовательским поведением getView.В зависимости от положения представления вы можете либо сделать неактивное представление делителя (которое не будет активным), либо вы можете затем отобразить сетку для соответствующей категории. Этот учебник поможет вам начать реализацию пользовательских адаптеров с помощью getView.

Ниже приведен пример кода того, как может выглядеть getView

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    boolean isDivider = false //TODO logic here
    if (isDivider){
        if (v == null) {
         LayoutInflater li = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = li.inflate(R.layout.custom_adapter_item, null);
        }
        Map<String, String> item = items.get(position);
        initView(v, item);
        return v;
    } else{
        View v = null //TODO init divider view here
        return v;
    }
}

private void initView(View v, Map<String, String> item) {
    String[] keys = DummyData.columns;
    ((TextView) v.findViewById(R.id.value_left)).setText(item.get(keys[0]));
    ((TextView) v.findViewById(R.id.value_right)).setText(item.get(keys[1]));
}

.раздувать ваш макет gridview, где я раздуваю свой custom_adapter_item, но это основа для настраиваемого просмотра списка со сложными элементами списка

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

  • ListView
    • Category1Header (LinearLayout))
      • Заголовок (текстовое поле)
    • Category1Contents (Gridview)
      • Cat1Cont1 (LinearLayout)
        • значок (изображение)
        • описание (текстовое поле)
    • Category2Header

Вы поняли

0 голосов
/ 21 марта 2012

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

В качестве основы я бы использовал линейное расположение или относительное расположение (в зависимости от того, как вы хотите реагировать на экран разных размеров).

Я бы создал стиль TextViews с соответствующим фоном из 9 патчей, чтобы он выглядел как заголовки.

Для кнопок я бы использовал виджет Button с селектором в качестве android: background.

Поэтому создайте файл XML с указанным ниже кодом в вашей папке для рисования и обменяйте чертеж на названия ваших чертежей.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/btn_add_sel0" /> 
    <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/btn_add_presssel0" /> 
    <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/btn_add_press0" /> 
    <item android:drawable="@drawable/btn_add_norm0" /> 
</selector>
0 голосов
/ 21 марта 2012

Я думаю, что для получения этого вида макета списка недостаточно.

Вы должны использовать ScrollView в качестве родителя, TextView и GridView в качестве одного макета, и каждый этот тип макета в качестве дочерних элементов в ScrollView, как показано ниже.

child_view

<LinearLayout vertical >
<TextView />
<GridView />
</LinearLayout>

main_view

<ScrollView>
<child_view />
<child_view />
<child_view />
.......
</ScrollView>

Надеюсь, это поможет вам.

0 голосов
/ 21 марта 2012

Кажется, коллекция GridViews с 5 столбцами.Элементами столбцов являются TextView и ImageView.

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