5
public DrawerProfile(Context context) { 
     super(context); 
     HeaderImageView = new ImageView(context); 
     HeaderImageView.setVisibility(VISIBLE); 
     HeaderImageView.setScaleType(ImageView.ScaleType.CENTER); 
     HeaderImageView.setImageResource(R.mipmap.drawer_background_image); 
     addView(HeaderImageView); 
} 

서랍에 이미지를 추가하고 서랍 머리글의 전체 영역을 포함해야합니다. 나는 이미지 (해상도)의 크기가 무엇인지 알아야한다. 다양한 화면 해상도의 모든 휴대 전화에 적합합니다. 어떻게 사진의 크기를 최소화 할 수 있습니까? 이 스크린 샷 여기 서랍 머리글 이미지의 크기는 얼마입니까?

는 헤더 이미지는 다음 ScaleType FIT_CENTER 설정 서랍의 폭과 높이와 일치하도록 설정된다 HeaderImageView 주어 서랍의 전체 영역을

enter image description here

답변

15

나는 최근에 응용 프로그램을 만들었고 거의 모든 재료 디자인 측면에 대한 철저한 연구를 수행 했으므로 여기에서 나의 경험을 공유하고 싶습니다. 도움이 될 것입니다.

첫 번째로 이동 this 멋진 기사, 그것을 사용하면 모든 속성과보기와 함께 사용하는 탐색기를 설정 안내합니다.

서랍 이미지는 너비가 너비의 16/9 또는 보통 여야합니다. (HeaderHeight = NavDrawerWidth * 9/16)

나는 576x324 픽셀 (아주 깨끗하고 좋은 그림, 거의 27킬로바이트)의 이미지를 사용하고 자동 확장 및 메모리 문제를 방지하기 위해 당김-nodpi 안에 넣어.

폭이 304dp 인 nav Drawer를 사용합니다 (대부분 Google Apps에서 찾을 수 있지만 Play 뮤직, 행 아웃 등 일부 앱에서도 320dp를 사용했습니다).

HeaderImage의 높이는 태블릿을 제외한 거의 모든 기기에서 동일하게 유지됩니다.

기기의 경우 sw-480dp-xxxhdpi까지 서랍 너비 304dp 및 헤더 높이 170dp를 사용하십시오.

위의 sw-600dp 장치에서 최소한 드로어 너비 400dp 및 헤더 이미지 높이 225dp를 사용하십시오.

이것은 내 drawer_header입니다.XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/navDrawer_header_height" 
    android:background="@drawable/img_navdrawer_header" 
    android:gravity="bottom" 
    android:orientation="vertical" 
    android:padding="16dp" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark" >  
</LinearLayout> 

그리고 이것이 내가 그들의 경계를 설정하는 NavigationView 이제

<android.support.design.widget.NavigationView 
    android:id="@+id/navigation_view" 
    android:layout_width="@dimen/nav_drawer_width" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    app:headerLayout="@layout/drawer_header" 
    app:menu="@menu/drawer" /> 

시간 안에 그것을 사용했던 방법이다, 태블릿 /res/values/dimens/

<dimen name="nav_drawer_width">304dp</dimen> 
<dimen name="navDrawer_header_height">170dp</dimen> 

: /res/values-sw600dp/, /res/values/sw-720dp

<dimen name="nav_drawer_width">400dp</dimen> 
<dimen name="navDrawer_header_height">225dp</dimen> 

희망이 있으면 도움이 될 것입니다.

+0

, 나는 XML을 사용하지 않고있다. 어떻게하면 자바에서 동일한 작업을 수행 할 수 있습니까? –

+0

HeaderViewImage 클래스의 메커니즘이 무엇인지 모르겠다.이 클래스가 HeaderViewImage.setBounds (0,0, px의 폭, px의 높이)를 지원하면 이처럼 값을 넣을 수있다. –

+0

매우 훌륭하지만 gmail/inbox/다른 Google 앱과 비교하면 서랍의 너비가 304dp가 아닌 것을 볼 수 있습니다. 내 넥서스 5x로 테스트 됨 –

0

피복되지 이미지가 전체 서랍을 채우도록 축척됩니다. 헤더 뷰 신장 엄지

+0

여전히 작동하지만 이미지가 전체 영역을 차지하지 않습니다. 이미지 크기는 어떻게해야합니까? 내 프로젝트에서 –

0

규칙

HeaderHeight = NavDrawerWidth * 9/16이다.

그래서 기본적으로 140에서 169dp 사이입니다.