web-dev-qa-db-ja.com

Androidナビゲーションドロワーリストを設定して、すべてのデバイス画面で画面のちょうど半分を開く

引き出しリストをすべての異なるデバイスの画面の半分まで開きたいです。 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>
26
Mayur Raval

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);
69
Gopal Gopi

画面サイズを手動で計算し、実行時にドロワーレイアウトに動的な幅を設定する必要があります。実行時にデバイスの画面の幅と高さを取得する方法は次のとおりです。

このコードを使用すると、ランタイムディスプレイの幅と高さを取得できます

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));

これはすべてのデバイスで機能し、すべてのデバイスでサイズが均一になります。

7
Akhil Jain

ここに、ナビゲーションドロワーを表示するために数パーセントを必要とする他の人のための私のソリューションがあります。

ここでは、右のナビゲーションドロワーを使用し、ドロワーを左に移動するとホーム画面の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);
4
Shihab Uddin

新しい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の固定マージンのため、引き出しの幅全体を使用することはできません。それについての詳細 こちら

1
gentra
 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;
0
Ahmad Moussa