2017-03-14 11 views
2

내 앱의 두 NavigationView 사이에 구분선을 추가해야합니다. (navigation_drawer_topnavigation_drawer_bottom).NavigationViews 사이에 구분선 추가

나는 이것을 시도했다. 그러나 이것은 분할기를보기의 맨 위에 추가했습니다. 첫 번째 NavigationView (navigation_drawer_top)의 끝 부분이 아닙니다.

<View android:layout_width="match_parent" 
      android:layout_height="1dp" 
      android:background="?android:attr/listDivider"/> 

여기 그것은 할 매우 간단 내 코드

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

    <include 
     layout="@layout/app_bar_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation_drawer_container" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start"> 

     <android.support.design.widget.NavigationView 
      android:id="@+id/navigation_drawer_top" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_gravity="top" 
      android:background="@color/menuColor" 
      android:paddingLeft="50dp" 
      app:headerLayout="@layout/nav_header_main" 
      app:itemTextAppearance="@style/NavigationDrawerStyle" 
      app:itemTextColor="@color/menuTextColour" 
      app:menu="@menu/menu_navigation_drawer_top" 
      /> 

     <android.support.design.widget.NavigationView 
      android:id="@+id/navigation_drawer_bottom" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@color/menuColor" 
      android:layout_gravity="bottom" 
      android:paddingLeft="50dp" 
      app:itemTextAppearance="@style/NavigationDrawerStyle" 
      app:itemTextColor="@color/menuTextColour" 
      app:menu="@menu/menu_navigation_drawer_bottom" /> 

    </android.support.design.widget.NavigationView> 

</android.support.v4.widget.DrawerLayout> 
+0

당신은 navigation_drawer_bottom의 레이아웃과 레이아웃의 상단에 디바이더를 작성해야 시도, 당신을위한 DividerItemDecoration 클래스입니다 .. 시도해보고 우려가있는 경우 알려주십시오 –

+0

http://stackoverflow.com/questions/30605286/navigationview-how-to-insert-divider-without-subgroup – user2025187

답변

1

입니다. 당신이해야 할 일은 그룹을 만들고 고유 한 ID를 그룹에 넣는 것입니다. 고유 ID는 메뉴에 구분선을 추가 할 때 실제 트릭을 사용하는 것입니다. 여기

<group android:id="@+id/group1" android:checkableBehavior="single" > 
    <item 
     android:id="@+id/item_1" 
     android:checked="true" 
     android:icon="@drawable/ic_1" 
     android:title="@string/title_1" /> 
</group> 

<group android:id="@+id/group2" android:checkableBehavior="single" > 
    <item 
     android:id="@+id/item_2" 
     android:icon="@drawable/ic_2" 
     android:title="@string/title_2" /> 
</group> 

이 반드시 당신의 메뉴에 칸막이를를 추가합니다, 당신을 위해 간단한 예입니다. 프로그래밍 메뉴를 추가로

편집 , 각 NavigationMenuView에 접근하고 그들에 장식을 추가하려고합니다. 여기

NavigationView navigationView = (NavigationView) findViewById(R.id.navigation); 
NavigationMenuView navMenuView = (NavigationMenuView) navigationView.getChildAt(0); 
navMenuView.addItemDecoration(new DividerItemDecoration(appContext,DividerItemDecoration.VERTICAL_LIST)) 

그리고

public class DividerItemDecoration extends RecyclerView.ItemDecoration { 

    private static final int[] ATTRS = new int[]{ 
      android.R.attr.listDivider 
    }; 

    public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; 

    public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; 

    private Drawable mDivider; 

    private int mOrientation; 

    public DividerItemDecoration(Context context, int orientation) { 
     final TypedArray a = context.obtainStyledAttributes(ATTRS); 
     mDivider = a.getDrawable(0); 
     a.recycle(); 
     setOrientation(orientation); 
    } 

    public void setOrientation(int orientation) { 
     if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { 
      throw new IllegalArgumentException("invalid orientation"); 
     } 
     mOrientation = orientation; 
    } 

    @Override 
    public void onDraw(Canvas c, RecyclerView parent) { 
     if (mOrientation == VERTICAL_LIST) { 
      drawVertical(c, parent); 
     } else { 
      drawHorizontal(c, parent); 
     } 
    } 

    public void drawVertical(Canvas c, RecyclerView parent) { 
     final int left = parent.getPaddingLeft(); 
     final int right = parent.getWidth() - parent.getPaddingRight(); 

     final int childCount = parent.getChildCount(); 
     for (int i = 0; i < childCount; i++) { 
      final View child = parent.getChildAt(i); 
      final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child 
        .getLayoutParams(); 
      final int top = child.getBottom() + params.bottomMargin; 
      final int bottom = top + mDivider.getIntrinsicHeight(); 
      mDivider.setBounds(left, top, right, bottom); 
      mDivider.draw(c); 
     } 
    } 

    public void drawHorizontal(Canvas c, RecyclerView parent) { 
     final int top = parent.getPaddingTop(); 
     final int bottom = parent.getHeight() - parent.getPaddingBottom(); 

     final int childCount = parent.getChildCount(); 
     for (int i = 0; i < childCount; i++) { 
      final View child = parent.getChildAt(i); 
      final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child 
        .getLayoutParams(); 
      final int left = child.getRight() + params.rightMargin; 
      final int right = left + mDivider.getIntrinsicHeight(); 
      mDivider.setBounds(left, top, right, bottom); 
      mDivider.draw(c); 
     } 
    } 

    @Override 
    public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { 
     if (mOrientation == VERTICAL_LIST) { 
      outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); 
     } else { 
      outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); 
     } 
    } 
} 
+0

시도해보십시오. 그러나 일하지 않았다. 내 메뉴에는 '그룹'만 있습니다. 항목을 동적으로 추가하고 있습니다. – Bishan

+0

그런 다음 고유 한 ID로 그룹을 동적으로 만들어야합니다. 내 응용 프로그램에서 이것을 사용하고 있으며 아주 잘 작동하고 있습니다. –

+0

문제가 해결 되었습니까? 더 이상 도움이 필요합니까? –

1

<View 
android:layout_below="@+id/id_of_item_below_which_you_want_it" 
android:layout_width="match_parent" 
android:layout_height="1dp" 
android:background="?android:attr/listDivider"/>