it-swarm.com.de

Die Liste der Navigationsschubladen von Android wurde so eingestellt, dass genau die Hälfte des Bildschirms für den gesamten Gerätebildschirm geöffnet wird

Ich möchte die Schubladenliste für die verschiedenen Geräte auf der Hälfte des Bildschirms öffnen. Ich habe hartcodierte Werte für layout_margineleft 200dp oder 100dp in der Schubladenliste ausprobiert. aber es funktioniert nicht in allen Geräten, es unterscheidet sich von Gerät zu Gerät. Wie kann ich also genau die Hälfte des Bildschirms für die Schubladenliste verwalten? Ich habe auch verschiedene Funktionen wie setLeft (int) usw. ausprobiert, aber einige von ihnen funktionieren nicht, da ich Mindestversion 8 verwende. Helfen Sie mir bitte. Danke im Voraus. 

    mDrawerLayout = (DrawerLayout) view.findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) view.findViewById(R.id.top_sectionlist);

xml dafür:

<?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>
24
Mayur Raval

die Breite für ListView dynamisch einstellen ...

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

Sie müssen die Bildschirmgröße manuell berechnen und die dynamische Breite zur Laufzeit an das Schubladenlayout anpassen. Im Folgenden erfahren Sie, wie Sie die Bildschirmbreite und -höhe des Geräts zur Laufzeit erhalten

Mit diesem Code können Sie Breite und Höhe der Laufzeitanzeige abrufen

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;

Nun müssen Sie die Breite durch 2 teilen

int newWidth=width/2;

Stellen Sie nun die Breite auf ListView so ein

drawer_list.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,newWidth));

Dies funktioniert für alle Geräte und ergibt eine einheitliche Größe für alle Geräte.

7
Akhil Jain

hier ist meine Lösung für andere, die mehrere Prozent benötigen, um ihre Navigationsleiste anzuzeigen. 

Hier verwende ich die rechte Navigationsleiste und zeige 15% des Startbildschirms, wenn sich die Schublade nach links bewegt. 

  // 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);
3
Shihab Uddin

Mit der neuen Android Support Design Library können Sie den Android.support.percent.PercentRelativeLayout verwenden, um dies einfach zu erreichen. Hier ist meine Lösung.

<?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>

Wenn Sie fragen, warum es einen Android:layout_marginRight="-64dp" und Android:layout_marginRight="-64dp" in der DrawerLayout und den Inhalt gibt. Der fest definierte Rand von 64 dp, der direkt in die DrawerLayout codiert ist, erlaubt es nicht, eine volle Breite der Schublade zu verwenden. Mehr dazu hier

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