바닥 글 설정 및 프로필 항목을 어떻게 설정할 수 NavitationView
있습니까? 이메일 탐색 창으로받은 편지함처럼 보입니다. NavitationView
항목은 메뉴 리소스에 의해 팽창되는,하지만 난 메뉴 리소스에 아래 항목을 설정하는 방법 또는 내가에 사용자 정의보기를 설정할 수있는 방법을 모르는 NavigationView
또는 하단 오프셋을? 나는 이것을 <LinearLayout...>
바닥 글보기로 두려고 시도 했지만 작은 화면에서 바닥 글이 항목 위에 놓이고 메뉴를 스크롤 할 수 없으며 바닥 글 패딩을로 설정하려고 시도했지만 바닥 글도 패딩을 사용 NavigationView
합니다.
이것은 작은 화면에서 스크롤되지 않습니다.
<android.support.design.widget.NavigationView
android:id="@+id/drawer"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/kuona_drawer_header"
app:menu="@menu/drawer">
<LinearLayout...>
</android.support.design.widget.NavigationView>
이것은 스크롤되지만 바닥 글은 메뉴 항목 위에 있습니다.
<android.support.design.widget.NavigationView
android:id="@+id/drawer"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:paddingBottom="96dp"
app:headerLayout="@layout/kuona_drawer_header"
app:menu="@menu/drawer">
<LinearLayout...>
</android.support.design.widget.NavigationView>
서랍 메뉴 res/menu/drawer.xml
파일 :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/action_current_list"
android:checked="true"
android:icon="@drawable/ic_current_list"
android:title="@string/current_list" />
<item
android:id="@+id/action_manage_lists"
android:icon="@drawable/ic_my_lists"
android:title="@string/my_lists" />
<item
android:id="@+id/action_search_products"
android:icon="@drawable/ic_search_black_24dp"
android:title="@string/search_products" />
<item
android:id="@+id/action_deals"
android:icon="@drawable/ic_product_promo"
android:title="@string/deals" />
</group>
</menu>
답변
내비게이션 메뉴에 고정 된 (비 스크롤링) 바닥 글을 원하는 경우 게시 한 것처럼 다른 레이아웃 주위에 NavigationView를 래핑해야합니다. NavigationView는 FrameLayout처럼 작동하므로 결국 NavigationView 메뉴 항목 위에 내부 레이아웃이 “스택”됩니다. 바닥 글 항목에 LinearLayout을 사용하여 정렬하는 한 가지 방법은 다음과 같습니다.
고정 바닥 글
<android.support.design.widget.NavigationView
android:id="@+id/drawer"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/drawer_header"
app:menu="@menu/drawer">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:clickable="true"
android:orientation="vertical">
<TextView
android:id="@+id/footer_item_1"
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="center"
android:text="Footer Item 1" />
<TextView
android:id="@+id/footer_item_2"
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="center"
android:text="Footer Item 2" />
</LinearLayout>
</android.support.design.widget.NavigationView>
이 예제에서는 TextViews를 사용했지만 바닥 글보기에 원하는대로 사용할 수 있습니다. 바닥 글 항목이 메뉴 하단과 겹치지 않도록하려면 메뉴 리소스 파일 끝에 더미 항목을 추가합니다 ( “spacers”처럼 작동 함).
res / menu / drawer.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group>
<item
android:id="@+id/nav_item_1"
android:icon="@drawable/ic_nav_item_1"
android:title="Nav Item 1" />
<item
android:id="@+id/nav_item_2"
android:icon="@drawable/ic_nav_item_2"
android:title="Nav Item 2" />
<item
android:id="@+id/nav_item_3"
android:icon="@drawable/ic_nav_item_3"
android:title="Nav Item 3" />
<item
android:id="@+id/nav_item_4"
android:icon="@drawable/ic_nav_item_4"
android:title="Nav Item 4" />
<item
android:id="@+id/footer_spacer_1"
android:checkable="false"
android:enabled="false"
android:orderInCategory="200"
android:title="" />
<item
android:id="@+id/footer_spacer_2"
android:checkable="false"
android:enabled="false"
android:orderInCategory="200"
android:title="" />
</group>
</menu>
마지막으로 실제 바닥 글보기를 위해 활동에 클릭 리스너를 추가하는 것을 잊지 마십시오.
...
// Click listener for nav footer.
View navFooter1 = findViewById(R.id.footer_item_1);
navFooter1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do footer action
}
});
View navFooter2 = findViewById(R.id.footer_item_2);
navFooter2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do footer action
}
});
...
바닥 글 스크롤
바닥 글이 NavigationView의 나머지 부분과 함께 스크롤되도록 허용하면 작업이 더 간단 해집니다 (추가 레이아웃 또는 클릭 리스너 없음). 메뉴 리소스 파일에 고유 항목으로 바닥 글 항목을 추가하기 만하면 <group>
(이렇게하면 구분선이 생성됨 ) 모든 항목이 자동으로 처리되고 함께 스크롤됩니다.
res / menu / drawer.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:id="@+id/nav_menu">
<item
android:id="@+id/nav_item_1"
android:icon="@drawable/ic_nav_item_1"
android:title="Nav Item 1" />
<item
android:id="@+id/nav_item_2"
android:icon="@drawable/ic_nav_item_2"
android:title="Nav Item 2" />
<item
android:id="@+id/nav_item_3"
android:icon="@drawable/ic_nav_item_3"
android:title="Nav Item 3" />
<item
android:id="@+id/nav_item_4"
android:icon="@drawable/ic_nav_item_4"
android:title="Nav Item 4" />
</group>
<group android:id="@+id/nav_footer">
<item
android:id="@+id/nav_footer_1"
android:icon="@drawable/ic_footer_item_1"
android:title="Footer Item 1" />
<item
android:id="@+id/nav_footer_2"
android:icon="@drawable/ic_footer_item_2"
android:title="Footer Item 2" />
</group>
</menu>
답변
해결 방법에 대한 힌트를 제공하지만 NavigationView에서 테스트 할 기회가 없으며 제대로 작동 할 것이라고 확신합니다.
여기 샘플 레이아웃 xml;
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingBottom="96dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#6F00" />
<TextView
android:layout_width="match_parent"
android:layout_height="96dp"
android:layout_gravity="bottom"
android:layout_marginBottom="-96dp"
android:background="#600F" />
</FrameLayout>
결과는 다음과 같습니다.
트릭은 부모에 패딩을 적용하고 자식에 여백을 빼는 것입니다.
빠른 시도 :
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.NavigationView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:clipToPadding="false"
android:paddingBottom="96dp"
app:headerLayout="@layout/sample_header"
app:menu="@menu/sample_menu">
<TextView
android:layout_width="match_parent"
android:layout_height="96dp"
android:layout_gravity="bottom"
android:layout_marginBottom="-96dp"
android:background="#600F"
android:gravity="center"
android:text="I STAND BY MY SELF" />
</android.support.design.widget.NavigationView>
답변
내비게이션 뷰 중첩의 다른 답변에 설명 된 접근 방식에 따라 몇 가지 문제가 발생했습니다.
- 항목이 많거나 가로 모드에서 바닥 글이 메뉴 항목과 겹침
- 실제 메뉴에 항목이 많으면 중첩 된 NavigationView가 스크롤 가능 해져서보기 좋지 않았습니다.
- 중첩에 두 개의 NavigationView가 있으므로 사용자 지정보기를 바닥 글로 정의 할 수 없습니다.
- 중첩 된 스크롤 뷰의 처리는 엉망이었습니다 (때로는 두 개의 스크롤바가 나타났습니다 등).
- 고정 바닥 글은 항상 맨 아래에 있어야합니다 (메뉴 항목이 많거나 적음).
이 모든 문제에 대한 나의 해결책은 다음과 같습니다.
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout ...>
<include layout="@layout/main_content"/>
<android.support.design.widget.NavigationView ...>
<android.support.v4.widget.NestedScrollView
...
android:fillViewport="true"
android:scrollbars="vertical">
<LinearLayout
...
android:orientation="vertical">
<android.support.design.widget.NavigationView
...
app:elevation="0dp"
app:headerLayout="@layout/nav_header"
app:menu="@menu/nav_menu">
</android.support.design.widget.NavigationView>
<LinearLayout
android:id="@+id/spacer_to_bottom"
...
android:layout_height="0dp"
android:layout_weight="1">
</LinearLayout>
<include layout="@layout/nav_footer"></include>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
여기에서 NestedScrollView는 하위 NavigationView의 스크롤 부모 역할을합니다. 즉, sub-NavigationView는 스크롤바 자체를 표시하지 않지만 전체 콘텐츠는 평면 방식으로 표시됩니다.
‘spacer_to_bottom’레이아웃은 나머지 공간을 모두 채우므로 메뉴 아이콘이 거의 없어도 바닥 글이 여전히 맨 아래에 있습니다.
마지막으로 고정 바닥 글은 실제 메뉴 (sub-NavigationView), 스페이서로 시작하는 선형 레이아웃에 추가되며 바닥 글 하단에 있습니다.
여기에서 AndroidStudio-Project로 작동하는 전체 예제를 찾을 수 있습니다. https://github.com/MarcDahlem/AndroidSidemenuFooterExample
특히 탐색 창은 여기에서 찾을 수 있습니다 :
https://github.com/MarcDahlem/AndroidSidemenuFooterExample/blob/master/app/src/main/res/layout/activity_main.xml
스크린 샷 :
답변
가장 간단한 대답은 서랍 레이아웃 내부에 버튼을 추가하고 중력을 하단으로 설정하는 것입니다. navigationview.xml
.
다음은 코드입니다.
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.NavigationView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/navigation"
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/navigation_header"
app:menu="@menu/menu_navigation">
<Button
android:id="@+id/btn_sing_in"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="@string/sign_in"
android:layout_gravity="bottom"/>
</android.support.design.widget.NavigationView>
답변
컨테이너 탐색보기 레이아웃이 있어야하며 여기에 두 개의 탐색 레이아웃이 더 있어야합니다. 부모 레이아웃의 상단과 하단에 정렬합니다.
기본적으로 ScrimFrameLayout이고 상태 표시 줄과 더 잘 상호 작용하므로 FrameLayout이 아닌 탐색보기를 부모로 사용하는 것이 좋습니다.
다음은 활동의 예입니다.
<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/layout_dashboard"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<!-- Activity content goes here -->
<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"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="top"
app:menu="@menu/menu_navigation_drawer" />
<android.support.design.widget.NavigationView
android:id="@+id/navigation_drawer_bottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:menu="@menu/menu_navigation_drawer_bottom" />
</android.support.design.widget.NavigationView>
이에 대해 자세히 알아보고 여기에서 예제를 볼 수 있습니다. http://blog.nitish.io/post/122633295558/android-design-library-navigationview-with-top
답변
늦은 답변을 알고 있지만 대부분의 개발자가 찾고있는 완벽하고 정확한 답변입니다.
내비게이션보기에 바닥 글을 추가하려면 아래와 같이 내비게이션 메뉴에 사용자 정의보기를 추가합니다.
footer_navigation_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="@string/version" />
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:gravity="right" />
</RelativeLayout>
이제 위의 뷰를 그룹 속성으로 메뉴 xml에 추가하여 메뉴에서 푸터로 구분할 수 있습니다.
profile_menu.xml
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_support"
android:title="@string/nav_item_support" />
<item
android:id="@+id/nav_settings"
android:title="@string/nav_item_settings" />
<item
android:id="@+id/nav_log_out"
android:title="@string/nav_item_log_out" />
</group>
<group
android:id="@+id/nav_footer">
<item
android:id="@+id/nav_log_version"
app:actionLayout="@layout/footer_navigation_menu" />
</group>
그게 다야. 다음은 출력입니다.
답변
NavigationView에 바닥 글을 추가 할 수있는 규정이 없다는 것은 일종의 당황스러운 일입니다. 하지만 이런 식으로 시도해 볼 수 있습니다.
<?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_base"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view_container"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:fitsSystemWindows="false"
android:layout_gravity="start"
>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbarAlwaysDrawVerticalTrack="true"
android:scrollbars="vertical"
android:isScrollContainer="true"
app:headerLayout="@layout/nav_header_base"
app:menu="@menu/activity_base_drawer"
android:layout_gravity="top"
android:layout_marginBottom="x"
/>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view_footer"
android:layout_width="wrap_content"
android:layout_height="x"
app:headerLayout="@layout/hear_layout"
app:menu="@menu/menu_items"
android:scrollbars="none"
android:layout_gravity="bottom"
/>
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
바닥 글이 목록 인 경우
app:headerLayout="@null"
app:menu="@menu/activity_base_drawer_footer"
하지만 어떤 종류의 커스텀 뷰라면
app:headerLayout="@layout/my_cutom_footer_view"
app:menu="@null"
또한이 경우에는 x = height of your custom footer view
도움이 되었기를 바랍니다.