引き出しリストをすべての異なるデバイスの画面の半分まで開きたいです。 layout_margineleft 200dpまたは100dpのハードコードされた値を引き出しリストに試しました。ただし、すべてのデバイスで機能するわけではなく、デバイスごとに異なります。だからどうすれば引き出しリストの画面のちょうど半分を維持できますか?また、setLeft(int)などのさまざまな機能を試しましたが、最小バージョン8を使用しているために機能しないものもあります。前もって感謝します。
mDrawerLayout = (DrawerLayout) view.findViewById(R.id.drawer_layout);
mDrawerList = (ListView) view.findViewById(R.id.top_sectionlist);
そのためのxml:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.DrawerLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/drawer_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@color/setting_background" >
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="fill_parent"
Android:layout_margin="@dimen/top_news_linear_margin"
Android:background="@color/news_list_divider_color"
Android:orientation="vertical"
Android:padding="@dimen/top_news_linear_padding" >
</RelativeLayout>
<ListView
Android:id="@+id/drawer_list"
Android:layout_width="wrap_content"
Android:layout_height="fill_parent"
Android:layout_gravity="right"
Android:layout_alignParentTop="true"
Android:background="@color/setting_background"
Android:cacheColorHint="@Android:color/transparent"
Android:choiceMode="singleChoice"
Android:divider="@color/news_list_divider_color"
Android:dividerHeight="@dimen/news_list_divider_height"
/>
</Android.support.v4.widget.DrawerLayout>
listViewの幅を動的に設定します...
mDrawerLayout = (DrawerLayout) view.findViewById(R.id.drawer_layout);
mDrawerList = (ListView) view.findViewById(R.id.top_sectionlist);
int width = getResources().getDisplayMetrics().widthPixels/2;
DrawerLayout.LayoutParams params = (Android.support.v4.widget.DrawerLayout.LayoutParams) mDrawerList.getLayoutParams();
params.width = width;
mDrawerList.setLayoutParams(params);
画面サイズを手動で計算し、実行時にドロワーレイアウトに動的な幅を設定する必要があります。実行時にデバイスの画面の幅と高さを取得する方法は次のとおりです。
このコードを使用すると、ランタイムディスプレイの幅と高さを取得できます
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
次に、幅を2で割る必要があります
int newWidth=width/2;
次のように幅をListViewに設定します
drawer_list.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,newWidth));
これはすべてのデバイスで機能し、すべてのデバイスでサイズが均一になります。
ここに、ナビゲーションドロワーを表示するために数パーセントを必要とする他の人のための私のソリューションがあります。
ここでは、右のナビゲーションドロワーを使用し、ドロワーを左に移動するとホーム画面の15%を表示します。
// convert your offset percent (here 15% ) into decimal by dividing 100
float offset = .15f * getResources().getDisplayMetrics().widthPixels ;
float width = getResources().getDisplayMetrics().widthPixels - offset;
DrawerLayout.LayoutParams params = (Android.support.v4.widget.DrawerLayout.LayoutParams) rightNavigationView.getLayoutParams();
params.width = (int) width;
rightNavigationView.setLayoutParams(params);
新しいAndroid Support Design Library)を使用すると、Android.support.percent.PercentRelativeLayout
を使用してこれを簡単に実現できます。これが私の解決策です。
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.DrawerLayout
Android:id="@+id/drawer_layout"
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:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginRight="-64dp"
Android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/content"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginRight="64dp"/>
<Android.support.percent.PercentRelativeLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="start"
>
<Android.support.design.widget.NavigationView
Android:id="@+id/nav_view"
Android:layout_width="0dp"
Android:layout_height="match_parent"
Android:layout_alignParentLeft="true"
Android:layout_alignParentStart="true"
Android:fitsSystemWindows="true"
app:layout_widthPercent="50%"
app:headerLayout="@layout/nav_header_dashboard"
app:menu="@menu/menu_drawer_activity_dashboard"/>
</Android.support.percent.PercentRelativeLayout>
</Android.support.v4.widget.DrawerLayout>
DrawerLayout
とコンテンツにAndroid:layout_marginRight="-64dp"
とAndroid:layout_marginRight="-64dp"
がある理由を尋ねている場合。 DrawerLayout
に直接コーディングされている64 dpの固定マージンのため、引き出しの幅全体を使用することはできません。それについての詳細 こちら
int currentVerion = Build.VERSION.SDK_INT;
int width= 0;
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
if(currentVerion >= Build.VERSION_CODES.BASE) {
display.getSize(size);
width = size.x;
}
else
{
width = display.getWidth();
}
((ListView) view.findViewById(R.id.top_sectionlist)).getLayoutParams().width =width/2;