Правая сторона панели навигации Android не работает

У меня есть ящик навигации, и я пытаюсь изменить его положение открытия. Я хочу, чтобы мой навигационный ящик открывался с правой стороны.

Это мой XML-код навигационного ящика:

<ge.me.custom.CustomDrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout5"
android:layout_width="200dp"
android:layout_height="match_parent" >
<FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
<!-- The navigation drawer -->
<LinearLayout
    android:id="@+id/drawer"
    android:layout_width="200dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="#09b52f"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <RelativeLayout
            android:id="@+id/slidemenumainlayout"
            android:layout_width="match_parent"
            android:layout_height="120dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true" >

            <ImageView
                android:id="@+id/slidemenuuserimage"
                android:layout_width="70dp"
                android:layout_height="70dp"
                android:layout_alignParentBottom="true"
                android:layout_alignParentLeft="true"
                android:layout_marginBottom="16dp"
                android:layout_marginLeft="14dp"
                android:background="@drawable/ic_user_blue" />

        </RelativeLayout>

        <ListView
            android:id="@+id/drawer_list"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignRight="@+id/slidemenumainlayout"
            android:layout_below="@+id/slidemenumainlayout"
            android:divider="#00af25"
            android:dividerHeight="1dp" >
        </ListView>
    </RelativeLayout>
</LinearLayout>

This is my custom drawer:

public class CustomDrawerLayout extends DrawerLayout {

    public CustomDrawerLayout(Context context) {
        super(context);
    }

    public CustomDrawerLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomDrawerLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        widthMeasureSpec = MeasureSpec.makeMeasureSpec(
            MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY);
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(
            MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.EXACTLY);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

}

И этот код находится внутри основного действия:

  mDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout,
            R.drawable.ic_drawer, R.string.app_name,
            R.string.app_name) {

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            if (item != null && item.getItemId() == android.R.id.home) {
                if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
                    mDrawerLayout.closeDrawer(Gravity.RIGHT);
                } else {
                    mDrawerLayout.openDrawer(Gravity.RIGHT);
                }
            }
            return false;
        }
    };

    mDrawerLayout.setDrawerListener(mDrawerToggle);

Я написал метод, чтобы открыть свой ящик с правой стороны, но когда я запускаю свое приложение, оно падает.

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

Если я вызову метод следующим образом:

openDrawer(Gravity.START);

Я не получаю сообщение об ошибке, но начальная позиция навигационного ящика оставлена.

Это моя ошибка:

java.lang.IllegalArgumentException: No drawer view found with gravity RIGHT

Как я могу открыть панель навигации с правой стороны?


person BekaKK    schedule 08.09.2015    source источник
comment
Вы пробовали Gravity.END?   -  person    schedule 08.09.2015
comment
Я пытался, но у меня такая же ошибка @ Noob Coder   -  person BekaKK    schedule 08.09.2015


Ответы (2)


Попробуйте установить layout_gravity в right в вашем xml:

<LinearLayout
    android:id="@+id/drawer"
    android:layout_width="200dp"
    android:layout_height="match_parent"
    android:layout_gravity="right"
    android:background="#09b52f"
    android:orientation="vertical" >
person User42    schedule 10.09.2015

Вы должны придерживаться более простого кода при нажатии пункта меню. Я не думаю, что вам нужно беспокоиться о закрытии ящика или нет, поскольку вы не можете дотянуться до значка, чтобы коснуться его, когда ящик открыт.

Простое решение будет примерно таким:

@Override 
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        mDrawerLayout.openDrawer(Gravity.RIGHT);
    } 
    return false;
}); 
person Mike    schedule 08.09.2015
comment
спасибо но не работает. я не знаю, что не так - person BekaKK; 08.09.2015