NavigationView의 구분선 높이 변경
4994 단어 안드로이드MaterialDesignKotlin
소개
Design Support Library의 NavigationView
를 사용하여 네비게이션 드로어를 구현했으며 각 그룹에 표시되는 구분선(separator)의 높이를 조정하고 싶다는 요구가 있었습니다. Style이나 Attribute로 간단하게 실현할 수 있을 것이라고 생각하고 있었습니다만, 조금 빠졌기 때문에 메모합니다.
구현
NavigationView
의 기본적인 구현은 공식 문서 를 참고로 진행합니다. 자신의 레이아웃을 사용하고 싶다면
activity_main.xml<DrawerLayout>
<FrameLayout />
<NavigationView>
<include layout="@layout/navigation_view">
</NavigationView>
</DrawerLayout>
같은 느낌으로 잘 해주면 좋을까. XML로 설정할 수 있는 내용을 공식 문서 에서 확인합니다.
XML attributes
내용
itemBackground
메뉴 항목의 배경을 지정된 리소스로 설정합니다.
itemIconTint
메뉴 항목의 아이콘에 적용되는 색상을 설정합니다.
itemTextAppearance
메뉴 항목의 텍스트 모양을 지정된 리소스로 설정합니다.
itemTextColor
메뉴 항목의 텍스트 색상을 설정합니다.
그리고 구분선에 관한 설정은 표기되어 있지 않았습니다. 다음으로 Design Support Library에서 NavigationView
가 어떻게 구현되는지 Android Studio를 사용하여 소스 코드를 쫓아 보았습니다.
헤더, 메뉴 항목, 서브 타이틀, 등의 레이아웃 (ViewHolder)의 로드는 NavigationMenuPresenter
로 행해지고 있었습니다. 구분선(separator)의 부분은
NavigationMenuPresenter.javaprivate static class SeparatorViewHolder extends NavigationMenuPresenter.ViewHolder {
public SeparatorViewHolder(LayoutInflater inflater, ViewGroup parent) {
super(inflater.inflate(layout.design_navigation_item_separator, parent, false));
}
}
라는 구현이었습니다. 읽는 design_navigation_item_separator.xml
before
after
갔다. 구체적으로는 Design Support Library와 같은 이름의 레이아웃을 작성하면 됩니다.
design_navigation_item_separator.xml<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:layout_width="match_parent"
android:layout_height="8dp"
android:background="?android:attr/listDivider" />
</FrameLayout>
요약
본래라면 RecyclerView
를 배치하고 고뇨고뇨하는 것이 세올리라고 생각합니다만(Stack Overflow에서도 그렇게 대답되었습니다), 되었습니다. 덧붙여 어디까지나 개인의 해결 방법이며, 이것이 올바른 실장이라고는 한정되지 않으므로 양해 바랍니다. 또한 Design Support Library 버전을 업데이트하는 경우 리소스 이름이 변경될 수 있으므로 매번 확인해야 합니다. 샘플을 GitHub으로 올려 둡니다.
아무래도 좋은 이야기
네비게이션 드로어는 '햄버거 메뉴'라고도 불립니다. 유래로서는, 메뉴의 가로 3본선으로 구성된 아이콘이 햄버거로 보이기 때문이라고 합니다.
참고문헌
NavigationView
의 기본적인 구현은 공식 문서 를 참고로 진행합니다. 자신의 레이아웃을 사용하고 싶다면activity_main.xml
<DrawerLayout>
<FrameLayout />
<NavigationView>
<include layout="@layout/navigation_view">
</NavigationView>
</DrawerLayout>
같은 느낌으로 잘 해주면 좋을까. XML로 설정할 수 있는 내용을 공식 문서 에서 확인합니다.
XML attributes
내용
itemBackground
메뉴 항목의 배경을 지정된 리소스로 설정합니다.
itemIconTint
메뉴 항목의 아이콘에 적용되는 색상을 설정합니다.
itemTextAppearance
메뉴 항목의 텍스트 모양을 지정된 리소스로 설정합니다.
itemTextColor
메뉴 항목의 텍스트 색상을 설정합니다.
그리고 구분선에 관한 설정은 표기되어 있지 않았습니다. 다음으로 Design Support Library에서
NavigationView
가 어떻게 구현되는지 Android Studio를 사용하여 소스 코드를 쫓아 보았습니다.헤더, 메뉴 항목, 서브 타이틀, 등의 레이아웃 (ViewHolder)의 로드는
NavigationMenuPresenter
로 행해지고 있었습니다. 구분선(separator)의 부분은NavigationMenuPresenter.java
private static class SeparatorViewHolder extends NavigationMenuPresenter.ViewHolder {
public SeparatorViewHolder(LayoutInflater inflater, ViewGroup parent) {
super(inflater.inflate(layout.design_navigation_item_separator, parent, false));
}
}
라는 구현이었습니다. 읽는
design_navigation_item_separator.xml
before
after
갔다. 구체적으로는 Design Support Library와 같은 이름의 레이아웃을 작성하면 됩니다.
design_navigation_item_separator.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:layout_width="match_parent"
android:layout_height="8dp"
android:background="?android:attr/listDivider" />
</FrameLayout>
요약
본래라면 RecyclerView
를 배치하고 고뇨고뇨하는 것이 세올리라고 생각합니다만(Stack Overflow에서도 그렇게 대답되었습니다), 되었습니다. 덧붙여 어디까지나 개인의 해결 방법이며, 이것이 올바른 실장이라고는 한정되지 않으므로 양해 바랍니다. 또한 Design Support Library 버전을 업데이트하는 경우 리소스 이름이 변경될 수 있으므로 매번 확인해야 합니다. 샘플을 GitHub으로 올려 둡니다.
아무래도 좋은 이야기
네비게이션 드로어는 '햄버거 메뉴'라고도 불립니다. 유래로서는, 메뉴의 가로 3본선으로 구성된 아이콘이 햄버거로 보이기 때문이라고 합니다.
참고문헌
네비게이션 드로어는 '햄버거 메뉴'라고도 불립니다. 유래로서는, 메뉴의 가로 3본선으로 구성된 아이콘이 햄버거로 보이기 때문이라고 합니다.
참고문헌
Reference
이 문제에 관하여(NavigationView의 구분선 높이 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/toranokopg/items/fc2d322fe3ec371287c6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)