2013-04-23 2 views
5

Я использую Android Listview, и я хочу, чтобы разделитель 1px на обеих сторонах элемента списка отображался в верхней и нижней частях двух разных цветов. Но проблема в том, что я не получаю логин для отображения разделителя внизу. Я пробовал android:layout_below, но он отображается как недействительный.Разделители ListView сверху и снизу ListView Item

Это код ListView

<ListView 
     android:id="@+id/myphnview" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@drawable/dividerheight" 
     android:background="#E9EAEC" 
     android:clickable="true" 
     android:divider="@drawable/dividerheight" > 
    </ListView> 

Это файл XML Я использую для верхней границы. dividerheight.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item> 
     <shape android:shape="line" > 
      <stroke android:color="#c6c7c9" /> 

      <size android:height="1px" /> 
     </shape> 
    </item> 


</layer-list> 

Это расположение моей строки

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rowlayout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#E9EAEC" 
    android:orientation="horizontal" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="2" > 

     <ImageView 
      android:id="@+id/icon" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="5dp" 
      android:background="@drawable/ic_launcher"/> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dp" 
     android:layout_weight="1" > 

     <TextView 
      android:id="@+id/file_name" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="left" 
      android:layout_margin="5dp" 
      android:text="Hello Android " 
      android:textColor="@android:color/black" 
      android:textSize="20dp" > 
     </TextView> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" > 

     <ImageView 
      android:id="@+id/share_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="left" 
      android:background="@drawable/ic_launcher"/> 
    </LinearLayout> 



</LinearLayout> 
+0

Вы используете пользовательский адаптер для списка? –

+0

@Devu Soman да это пользовательский адаптер –

+1

Я думаю, вы хотите установить два разных цвета сверху и снизу элемента списка. Затем попытался установить devider из getView() адаптера списка, например if (position% 2 == 0) { ((ListView)).setDivider (. getResource() getDrawable (R.drawable.deviderheight)); } else {} –

ответ

14

Существует несколько способов достижения этого. Одним простым способом было бы полностью скрыть разделители (установить ширину разделителя на 0 или делиться на нуль) в списке и просто иметь в каждом элементе списка строку сверху и строку внизу. Рассмотрим этот XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="60dp"> 

    <View 
     android:layout_width="match_parent" 
     android:layout_height="1dp" 
     android:layout_alignParentTop="true" 
     android:background="@android:color/white" /> 

    <LinearLayout ...> 
     <!-- this is your current list item LinearLayout --> 
    </LinearLayout> 

    <View 
     android:layout_width="match_parent" 
     android:layout_height="1dp" 
     android:layout_alignParentBottom="true" 
     android:background="@android:color/black" /> 

</RelativeLayout> 

Как вы уже используете пользовательский адаптер, это просто вопрос, используя XML, как выше для вашего макета элемента списка в getView метод адаптера. Это приведет к появлению элементов списка 60dp high с белой линией вверху и черной линией внизу.

+0

thats также очень хорошее решение, но мой layou не является относительным, но линейным –

+0

@Nikhil Добавьте свою линейную компоновку, где я говорю «остальная часть вашего макета списка элементов идет здесь». Кроме того, разместите макет элемента списка, и я соответственно обновлю ответ. –

+0

@Aleka G Я обновляю сообщение с моим дизайном строк –

4

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

Подготовить строку в res/values ​​/ styles.xml следующим образом.

<style name="Line"> 
    <item name="android:layout_width">fill_parent</item> 
    <item name="android:layout_height">2px</item> 
    <item name="android:layout_marginLeft">10dp</item> 
    <item name="android:layout_marginRight">10dp</item> 
    <item name="android:background">@drawable/line_gradient</item> 
</style> 

Рез/рисуем/line_gradient.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
<gradient 
    android:startColor="@color/white" 
    android:endColor="@color/white" 
    android:centerColor="@color/blue" 
    android:useLevel="false" 
    android:type="linear" 
    android:angle="0"/> 
</shape> 

Наконец использовать линию, где когда-либо вам нужно в поле ниже образом.

<View 
     style="@style/Line"/> 
<ListView 
................ 
................ 
/> 
<View 
     style="@style/Line"/> 

Это код, который я использовал в своем приложении, но вы можете настроить или раскрасить все, что вам нужно. Даже вы можете создать представление непосредственно выше и ниже listview. Но создание отдельно в styles.xml позволит использовать его в нескольких местах без избыточности кода.

+0

Но я хочу дать его для каждого элемента в виде списка –

+0

Тогда вам может понадобиться использовать этот вид до и после вашей пользовательской строки (списка элементов) в вашем пользовательском XML-файле строки и сделайте высоту разделителя 0dp. – Kanth

2

Я не думаю, что есть способ сделать это. Но вы можете добавить footerview и headerview для вашего ListView. Я думаю, что это принесет то, что вы хотите.

Например:

TextView tv1 = new Textview(this); 
tv1.setBackgroundResource(R.drawable.dividerheight); 

и

listview.addHeaderView(totalExpense); 
listview.addFooterView(totalExpense); 

Я надеюсь, что это поможет.

+0

Но я хочу дать его для каждого элемента в виде списка. –

+0

каждый список означает что? Вы имеете в виду каждый элемент списка? – Gunaseelan

+0

Средство для каждой строки. –