2016-05-05 73 views
4

我正在尝试构建一个遵循Google指南的列表视图。Android材质ListView分隔线

这里是我的要求:

  1. 允许组头
  2. 允许组之间全宽分隔
  3. 允许项之间局部分隔

这里是一个图像示出了报头和项目之间的分隔线。 不幸的是,无法查看组之间的全宽分隔线,但这就像普通的分隔线一样。

Material listview

我可以建立接收的Item子类,像HeaderItemContactItem自定义适配器。

header.xml将仅仅是

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    android:minHeight="48dp" 
    android:padding="16dp" 
    android:text="Today" 
    android:textColor="#8A000000" 
    android:textSize="14sp" /> 

对于contact.xml

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

     <ImageView 
      android:id="@+id/friend_profile_picture" 
      android:layout_width="40dp" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:layout_margin="16dp" 
      android:scaleType="fitStart" 
      android:src="@drawable/ic_home" /> 

      <TextView 
       android:id="@+id/friend_name" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignWithParentIfMissing="true" 
       android:layout_toRightOf="@+id/friend_profile_picture" 
       android:paddingTop="16dp" 
       android:text="random_text" 
       android:textAppearance="@style/TextAppearance.AppCompat.Body2" /> 

      <TextView 
       android:id="@+id/friend_state" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_below="@+id/friend_name" 
       android:layout_toRightOf="@+id/friend_profile_picture" 
       android:paddingBottom="16dp" 
       android:text="random_text" 
       android:textAppearance="@style/TextAppearance.AppCompat.Body1" 
       android:textSize="14sp" /> 

</RelativeLayout> 

现在,我的问题是,该项目分频。全宽分隔符将是一个正常的列表视图分隔符。我只是不知道如何做一个部分dividir,并使其与正常的分频器一起工作。任何提示?

如果更容易/更好,也可以用RecyclerViewItemDecorator来完成。

+0

添加视图/ LinearLayout/RelativeLayou t在“friend_state”Tetview之下,黑色背景和左边填充/边距72dp。 – Sabari

+0

好的,但是这样做会显示行,然后显示列表视图的分隔符。 现在只是缺少如何使listview分隔符仅在部分之间可见。 – HelderMPinhal

+0

请参考此链接,这可能会帮助你[链接](http://codingdiscovery.blogspot.in/2015/02/android-listviews-with-headers.html) – Sabari

回答

0

添加视图到您的RelativeLayout 我张贴的代码将让您查看布局文件

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

    <ImageView 
     android:id="@+id/friend_profile_picture" 
     android:layout_width="40dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:layout_margin="16dp" 
     android:scaleType="fitStart" 
     android:src="@drawable/ic_home" /> 

     <TextView 
      android:id="@+id/friend_name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignWithParentIfMissing="true" 
      android:layout_toRightOf="@+id/friend_profile_picture" 
      android:paddingTop="16dp" 
      android:text="random_text" 
      android:textAppearance="@style/TextAppearance.AppCompat.Body2" /> 

     <TextView 
      android:id="@+id/friend_state" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/friend_name" 
      android:layout_toRightOf="@+id/friend_profile_picture" 
      android:paddingBottom="16dp" 
      android:text="random_text" 
      android:textAppearance="@style/TextAppearance.AppCompat.Body1" 
      android:textSize="14sp" /> 
    <View 
    android:id="@+id/divider_line" 
    android:layout_width="match_parent" 
    android:layout_below="@+id/friend_state" 
    android:layout_marginBottom="1dp" 
    android:layout_height="1dp" 
    android:background="@color/divider_line_color" 
    xmlns:android="http://schemas.android.com/apk/res/android" /> 
    </RelativeLayout> 

定义divider_line_color到colors.xml到值目录后。

即使您的列表视图设置的android:分频器=“@空”

+0

好的,但这样做,会显示在那里的行和然后是列表视图的分隔符。 我已经改变了你的观点,以符合我想要的文字,现在它只是缺少如何使列表视图分隔符仅在部分之间可见。 – HelderMPinhal

+0

你可以再次发布你的更新代码和问题吗? –

1

对于分频器,你可以看看官方Android 设置应用程序来查看它是如何工作。这里有一个“仪表板瓦片”的source code

<?xml version="1.0" encoding="utf-8"?> 
<!-- Copyright (C) 2014 The Android Open Source Project 
    Licensed under the Apache License, Version 2.0 (the "License"); 
    you may not use this file except in compliance with the License. 
    You may obtain a copy of the License at 
      http://www.apache.org/licenses/LICENSE-2.0 
    Unless required by applicable law or agreed to in writing, software 
    distributed under the License is distributed on an "AS IS" BASIS, 
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    See the License for the specific language governing permissions and 
    limitations under the License. 
--> 
<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_vertical" 
     android:minHeight="@dimen/dashboard_tile_minimum_height"> 
    <ImageView 
      android:id="@+id/icon" 
      android:layout_width="@dimen/dashboard_tile_image_size" 
      android:layout_height="@dimen/dashboard_tile_image_size" 
      android:scaleType="centerInside" 
      android:layout_marginStart="@dimen/dashboard_tile_image_margin_start" 
      android:layout_marginEnd="@dimen/dashboard_tile_image_margin_end" /> 
    <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="0dip" 
      android:orientation="vertical" 
      android:gravity="center_vertical" 
      android:layout_weight="1"> 
      <RelativeLayout 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"> 
       <TextView android:id="@+id/title" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:singleLine="true" 
          android:textAppearance="@style/TextAppearance.TileTitle" 
          android:ellipsize="marquee" 
          android:fadingEdge="horizontal" /> 
       <TextView android:id="@+id/status" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_below="@id/title" 
          android:layout_alignStart="@android:id/title" 
          android:textAppearance="@style/TextAppearance.Small" 
          android:textColor="?android:attr/textColorSecondary" /> 
      </RelativeLayout> 
     </LinearLayout> 
     <View android:id="@+id/tile_divider" 
       android:layout_width="match_parent" 
       android:layout_height="1dp" 
       android:background="?android:attr/dividerVertical" /> 
    </LinearLayout> 
</LinearLayout> 

基本上,它归结为以下几点:

  • 一个LinearLayouthorizontal取向包含图片和文本在
  • 一个LinearLayoutvertical方向来保存标签和分隔线