it-swarm.com.de

Android - Ist eine Navigationsleiste von rechts möglich?

http://developer.Android.com/training/implementing-navigation/nav-drawer.html

Laut diesem Dokument heißt es nicht, ob es möglich ist, die Schublade von der rechten Seite aus zu implementieren. Ist es überhaupt möglich? :(

62
user2062024

Hier ist die Dokumentation zur Schublade und es scheint, dass Sie sie so konfigurieren können, dass sie von links oder rechts herausgezogen wird.

Die Positionierung und Anordnung der Schubladen wird mit .__ gesteuert. Android: layout_gravity-Attribut für untergeordnete Ansichten, denen .__ entspricht. Seite der Ansicht, aus der die Schublade hervorgehen soll: links oder rechts . (Oder bei Plattformversionen, die die Layoutrichtung unterstützen, starten/enden.)

http://developer.Android.com/reference/Android/support/v4/widget/DrawerLayout.html

46
Larry McKenzie

Der NavigationDrawer kann so konfiguriert werden, dass er von links, rechts oder von beiden herausgezogen wird. Der Schlüssel ist die Reihenfolge der Darstellung der Schubladen in der XML-Deklaration und das Attribut layout_gravity. Hier ist ein Beispiel:

<Android.support.v4.widget.DrawerLayout
    Android:id="@+id/drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" >

    <FrameLayout
        Android:id="@+id/content"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:baselineAligned="false" >
    </FrameLayout>

    <!-- Left drawer -->

    <ListView
        Android:id="@+id/left_drawer"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_gravity="left"
        Android:choiceMode="singleChoice" />

    <!-- Right drawer -->

    <ListView
        Android:id="@+id/right_drawer"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_gravity="right"
        Android:choiceMode="singleChoice" />
</Android.support.v4.widget.DrawerLayout>
65
Jeshurun

Meine App stürzte mit der Fehlermeldung "Keine Schubladenansicht mit Schwerkraft LINKS gefunden" ab.  

Also fügte ich dies zu onOptionsItemSelected hinzu:

if (item != null && item.getItemId() == Android.R.id.home) {
        if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
            mDrawerLayout.closeDrawer(Gravity.RIGHT);
        } else {
            mDrawerLayout.openDrawer(Gravity.RIGHT);
        }
    }
24
amalBit

Hinzufügen zu https://stackoverflow.com/a/21781710/437039 solution. 

Wenn Sie ein von Android Studio erstelltes Navigation Drawer-Projekt verwenden, ändert sich dies in onOptionsItemSelected. Da sie die untergeordnete Klasse erstellt haben, müssen Sie diesen Code verwenden

if (item != null && id == Android.R.id.home) {
        if (mNavigationDrawerFragment.isDrawerOpen(Gravity.RIGHT)) {
            mNavigationDrawerFragment.closeDrawer(Gravity.RIGHT);
        } else {
            mNavigationDrawerFragment.openDrawer(Gravity.RIGHT);
        }
        return true;
}

Nächster. In der Klasse NavigationDrawerFragment müssen Sie 3 Methoden erstellen: 

Methode 1 

public boolean isDrawerOpen(int gravity) {
    return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(gravity);
}

Methode 2

public void closeDrawer(int gravity) {
    mDrawerLayout.closeDrawer(gravity);
}

Methode 3

public void openDrawer(int gravity) {
    mDrawerLayout.openDrawer(gravity);
}

Nur jetzt funktioniert die rechte Schublade. 

5
sandalone

Sie können NavigationView im Materialdesign verwenden. Für ex:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent" />

    <Android.support.design.widget.NavigationView
        Android:id="@+id/nav_view"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_gravity="end"
        Android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</Android.support.v4.widget.DrawerLayout>

Für eine vollständige Anleitung siehe http://v4all123.blogspot.in/2016/03/simple-example-of-navigation-view-on.html

3
Gunaseelan

Ich weiß, dass dies eine alte Frage ist, aber für diejenigen, die noch nach der Antwort suchen: 

Ja, es ist möglich. Bitte überprüfen Sie meine Antwort unter folgendem Link: 

https://stackoverflow.com/a/19358114/1572408

1
Rudi

Dann verwenden Sie diese Codes @amal Ich denke, das wird Ihnen helfen .. _. XML:

<!-- Framelayout to display Fragments -->

<FrameLayout
    Android:id="@+id/frame_container"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" >

    <RelativeLayout
        Android:layout_width="match_parent"
        Android:layout_height="48dp"
        Android:background="@drawable/counter_bg" >

        <ImageView
            Android:id="@+id/iconl"
            Android:layout_width="25dp"
            Android:layout_height="wrap_content"
            Android:layout_gravity="left"
            Android:layout_marginLeft="12dp"
            Android:layout_marginRight="12dp"
            Android:src="@drawable/ic_launcher" />

        <ImageView
            Android:id="@+id/iconr"
            Android:layout_width="25dp"
            Android:layout_height="wrap_content"
            Android:layout_alignParentRight="true"
            Android:layout_alignParentTop="true"
            Android:layout_marginRight="17dp"
            Android:src="@drawable/ic_launcher" />
    </RelativeLayout>
</FrameLayout>

<!-- Listview to display slider menu -->

<ListView
    Android:id="@+id/list_slidermenu"
    Android:layout_width="240dp"
    Android:layout_height="match_parent"
    Android:layout_gravity="start"
    Android:background="@color/list_background"
    Android:choiceMode="singleChoice"
    Android:divider="@color/list_divider"
    Android:dividerHeight="1dp"
    Android:listSelector="@drawable/list_selector" />

<ListView
    Android:id="@+id/list_slidermenu2"
    Android:layout_width="240dp"
    Android:layout_height="match_parent"
    Android:layout_gravity="end"
    Android:background="@color/list_background"
    Android:choiceMode="singleChoice"
    Android:divider="@color/list_divider"
    Android:dividerHeight="1dp"
    Android:listSelector="@drawable/list_selector" />

// Stellen Sie die erforderlichen Bilder ein

Aktivitätscode:

ImageView iconl,iconr;

private DrawerLayout mDrawerLayout;
private ListView mDrawerList,mDrawerList2;

ImageView iconl,iconr;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    iconl = (ImageView)findViewById(R.id.iconl);
    iconr = (ImageView)findViewById(R.id.iconr);

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
    mDrawerList2 = (ListView) findViewById(R.id.list_slidermenu2);
    mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
    mDrawerList2.setOnItemClickListener(new SlideMenuClickListener());
    iconl.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            mDrawerLayout.openDrawer(Gravity.START);
            mDrawerLayout.closeDrawer(Gravity.END);
        }
    });
    iconr.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            mDrawerLayout.openDrawer(Gravity.END);
            mDrawerLayout.closeDrawer(Gravity.START);
        }
    });
}
}

und hier können Sie Ihren eigenen Listenadapter für beide Listen und für Elementklickaufruf anzeigen (Position) festlegen. Methode, wo Sie Ihr Fragment zu Framelayout hinzufügen können.

/**
 * Diplaying fragment view for selected nav drawer list item
 * */
private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
    case 0:
        fragment = new HomeFragment();
        break;


    default:
        break;
    }

    if (fragment != null) 
    {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
        .replace(R.id.frame_container, fragment).commit();

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);

        mDrawerLayout.closeDrawer(mDrawerList);
    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }
}
1
Rohit Goswami

Um die Navigationsleiste von der rechten Seite des Bildschirms aus einzustellen, machen Sie das Schubladenlayout der Navigationsansicht übergeordnet, und legen Sie das Layout der Navigationsansicht nach rechts fest.

0
Vikash Sharma