2012-06-03 2 views
0

На картинке ниже находится строка Listview, которую я ищу. Его список инвентаря.Android Listview с некоторыми нестандартными столбцами

enter image description here

Вопрос:

Как нарисовать/создать этот вид представления списка строки где

1) Первый столбец не имеет гориз. или vert. разделительные линии.

2) Второй столбец один представляет собой коробку с обоими horz. и vert.

Пространство между вторым и третьим столбцами.

3) Третий столбец - стандартная строка списка с текстом и маленькими значками.

Как совместить все 3, чтобы сделать этот классный ряд? :)

Я знаю, как составить список с третьей колонкой; с текстом и изображениями. Но расстояние между столбцами и вертикальные линии - это те, которые я не знаю.

Спасибо за любые предложения

Jacob

+0

Взгляните на мое сообщение, я решил эту проблему http://stackoverflow.com/questions/10811192/how-to-add-header-in-listview-at-specific-location-and-create -custom-view-for-li/10811630 # 10811630 –

+0

Спасибо; Я посмотрю на это. – user702426

ответ

0

я сделал что-то подобное, используя TableLayout и TableRow. Это позволяет вам создавать «строки-шаблоны» в XML и затем реализовывать их так, как вы хотите в любом порядке.

Скажем у вас есть активность использовать макет main.xml:

setContentView(R.layout.main); 

Тогда вы надуть каждый шаблон строки, как вам нужно:

 LayoutInflater myInflate = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    row1 = (TableRow) myInflate.inflate(R.layout.matchesoverviewlistitem, null); 

    // Here you can do anything you want with the table row elements 
    tv = (TextView)row1.findViewById(R.id.matchesOverLabel); 
    tv.setText("MyText"); 

    row1.setTag(n); 
    row1.setOnClickListener(seriesListener); 

    // Finally add the table row to the tableLayout 
    myTable.addView(row1,new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 

Это работало отлично для меня при использовании различные макеты для ряда строк.

+0

благодарю вас за ответ; ценить это; Я отвечу оба ответа. – user702426

2

Это не слишком сложно создать макет, как показано на схеме строк для ListView. Я просто помогу тебе по пути. Имейте в виду, что вы, возможно, захотите сделать некоторые улучшения, например, не жестко задайте размер «квадратов», а предоставите их от dimens.xml в разных кодах плотности и плотности экрана.

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" 
    android:gravity="center_vertical"> 

    <View android:layout_width="30dp" android:layout_height="30dp" 
     android:layout_margin="5dp" android:background="@drawable/border_color_red" /> 

    <TextView android:layout_width="?android:attr/listPreferredItemHeight" 
     android:layout_height="?android:attr/listPreferredItemHeight" 
     android:background="@drawable/border" android:gravity="center" 
     android:text="QTY" android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <RelativeLayout android:layout_width="0dp" 
     android:layout_height="?android:attr/listPreferredItemHeight" 
     android:layout_marginLeft="5dp" android:layout_marginRight="5dp" 
     android:layout_weight="1" android:background="@drawable/border" 
     android:gravity="center_vertical" android:padding="5dp"> 

     <TextView android:id="@android:id/text1" 
      android:layout_width="fill_parent" android:layout_height="wrap_content" 
      android:layout_centerVertical="true" android:layout_toLeftOf="@+id/star" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <CheckBox android:id="@+id/star" style="?android:attr/starStyle" 
      android:layout_width="wrap_content" android:layout_height="wrap_content" 
      android:layout_centerVertical="true" android:layout_toLeftOf="@+id/box_right" 
      android:text=" " /> 

     <View android:id="@+id/box_right" android:layout_width="30dp" 
      android:layout_height="30dp" android:layout_alignParentRight="true" 
      android:layout_centerVertical="true" android:layout_margin="5dp" 
      android:background="@drawable/border_color_red" /> 
    </RelativeLayout> 

</LinearLayout> 

ListView необходимо, чтобы скрыть свой делитель:

<ListView android:id="@android:id/list" android:layout_width="fill_parent" 
     android:layout_height="fill_parent" android:divider="@null"> 
     <!-- Preview: [email protected]/list_item_layout --> 
    </ListView> 

Границы добавляются с помощью простой ShapeDrawable:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <stroke android:height="1dp" android:width="1dp" android:color="#000" /> 
    <solid android:color="@android:color/transparent" /> 
</shape> 

Измените solid цвет, чтобы создать цвет отличается заливки (например, для квадратов).

Результат будет выглядеть примерно так:

list item layout

Самым большим недостатком является то, что есть на самом деле не простой подход, чтобы избавиться от «двойных» делителей Inbetween различных строк. Если это вас действительно беспокоит, существует определенная пара способов, которыми вы могли бы обойти их (например, раздувать различные макеты для первого и последнего элементов в вашем адаптере или добавлять первый и последний элемент в виде верхнего и нижнего колонтитула или выставлять строки в отдельные виды, которые вы можете переключить и т. д.).

Я не добавлял в ImageView, так как это будет довольно понятно. Поместите его в том же положении, что и «item» TextView, и переключайтесь между ними в зависимости от того, хотите ли вы отображать текст или изображение.

Я предполагаю, что вы сможете подобрать подходящий Adapter (и «ViewHolder»/«RowWrapper») для макета.

Оставьте линию, если что-то еще не ясно. :)

+0

Благодарим за отзыв; Очень ценю это. Я знаю только класс SimpleAdapter. Можете ли вы предложить пример адаптера Android, на который я должен обратить внимание на вышеуказанную задачу. Кроме того, флажок вышеуказанной звезды можно щелкнуть. Может ли окно просмотра RED сделать кликабельным? еще раз спасибо. – user702426

+0

Примеры распространены, [вот пример, который выглядит довольно хорошо] (http://goo.gl/2qXTy). Подводя итог, вы захотите сохранить данные для представления в списке в простых объектах Java, которые затем переходят в «Адаптер». Что касается полей: в зависимости от поведения, которое вы выполняете, вы можете сделать их «CheckBox» или «ToggleButton» для двух состояний (вкл/выкл). Если вам нужно более сложное поведение, вы, вероятно, собираетесь создать/расширить что-то самостоятельно. Если вы не хотите, чтобы виджет был доступен для кликов, просто установите для этого атрибута флаг false. –

Смежные вопросы