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);
}
ドロワーに画像を追加したいのですが、ドロワーヘッダーの全領域をカバーする必要があります。画像(解像度)のサイズを教えてください。これは、さまざまな画面解像度を持つすべての電話に適しています。写真のサイズを最小化するにはどうすればよいですか?
このスクリーンショットでは、ヘッダー画像がDrawerの全領域を覆っていません。
私は最近アプリを作成し、ほぼすべてのマテリアルデザインの側面について徹底的な調査を行ったので、ここで私の経験を共有したいと思います。
1つ目は this の素晴らしい記事です。NavDrawerで使用するすべてのプロパティとビューを設定します。
Drawer Imageは、Nav Drawerの幅の16/9にする必要があります。 (HeaderHeight = NavDrawerWidth * 9/16)
私は576x324ピクセルの画像(かなりきれいでナイスな画像、ほぼ27KB)を使用し、自動スケーリングとメモリの問題を回避するために、それをdrawable-nodpi内に配置しました。
私は幅304 dpのnav Drawerを使用しています(ほとんどの場合、Googleアプリで見つかりますが、Playミュージック、ハングアウトなどの一部のアプリでも320 dpを使用しています)。
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>
これが誰かを助けることを願っています。
ヘッダービューの高さの目安は
HeaderHeight = NavDrawerWidth * 9/16
。
つまり、基本的には140〜169 dpです。
別の画面で最良の結果を得るために別のdimenファイルを使用する
hdpi-高さ= 170dp xhdpi-高さ= 180dp
HeaderImageView
がDrawerの幅と高さに一致するように設定されている場合、ScaleType
をFIT_CENTER
に設定するだけで、画像がDrawer全体に拡大されます。
以下のコードを使用して、画像をナビゲーションドロワーヘッダーの相対レイアウトまたは線形レイアウトに読み込みます
RelativeLayout imgNavHeaderBg = navHeader.findViewById(R.id.headerRelativelayout);
imgNavHeaderBg.post(new Runnable(){
public void run(){
Glide.with("Your Class".this).load("URL").asBitmap().into(new SimpleTarget<Bitmap>(imgNavHeaderBg.getMeasuredWidth(), imgNavHeaderBg.getMeasuredHeight()) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
Drawable drawable = new BitmapDrawable(getResources(), resource);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
imgNavHeaderBg.setBackground(drawable);
}
}
});
}
});