[android] 탐색 창을 오른쪽에서 왼쪽으로 열도록 설정하는 방법

우선 나는이 질문이 전에 여기에 나타났음을 알고 있지만 많은 것을 시도한 후에도 여전히 성공하지 못했습니다. Android 개발자 사이트 에서 예제를 작업 중입니다
.

예제에서 구현하는 방법 (왼쪽에서 오른쪽으로) 대신 오른쪽에서 왼쪽으로 메뉴가 열리도록 설정하려고합니다. 또한 메뉴 열기 버튼을 작업 표시 줄의 오른쪽으로 이동하고 싶습니다. 또한, 예를 들어, 여기에 몇 가지 답변을 빨간색 이 대답 .

뷰와 레이아웃의 중력을 변경하려고하는데 오류가 발생합니다.

절대 중력이 왼쪽 인 서랍 뷰를 찾을 수 없습니다.

오른쪽에서 열리도록 메뉴를 설정하고 작업 표시 줄 버튼을 오른쪽으로 이동하려면 내 코드의 문제가 무엇인지, 무엇을 변경해야하는지 알려주세요.

xml 코드는 다음과 같습니다.

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_gravity="right"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/content_frame"
        android:layoutDirection="rtl"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

    <ListView android:id="@+id/left_drawer"
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="10dp"
        android:background="#111"/>

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



답변

메인 레이아웃에서 ListView중력을 오른쪽으로 설정합니다 .

android:layout_gravity="right"

또한 코드에서 :

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer, R.string.drawer_open,
            R.string.drawer_close) {

    @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;
    }
};

그것이 작동하기를 바랍니다 🙂


답변

매니페스트에 다음 코드를 추가합니다.

<application android:supportsRtl="true">

Oncreate에 다음 코드를 작성하십시오.

getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);

그것은 나를 위해 작동합니다. 😉


답변

해결책


your_layout.xml :

<?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="end">

    <include layout="@layout/app_bar_root"
        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:itemTextColor="@color/black"
        app:menu="@menu/activity_root_drawer" />

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

YourActivity.java :

@Override
protected void onCreate(Bundle savedInstanceState) {
//...
toolbar = (Toolbar) findViewById(R.id.toolbar);

drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();

toolbar.setNavigationOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (drawer.isDrawerOpen(Gravity.RIGHT)) {
                drawer.closeDrawer(Gravity.RIGHT);
            } else {
                drawer.openDrawer(Gravity.RIGHT);
            }
        }
    });
//...
}


답변

이 답변 은 탐색을 오른쪽에서 왼쪽으로 열도록 설정하는 데 유용하지만 아이콘을 오른쪽으로 설정하는 솔루션은 없습니다. 이 코드 는 그것을 고칠 수 있습니다. 당신이 그것을 줄 경우 drawer첫 번째 PARAM로하고 ViewCompat.LAYOUT_DIRECTION_RTL두 번째 PARAM 같이 ENTIER 레이아웃은 RTL로 설정됩니다. 빠르고 간단한 해결책이지만 메뉴가 오른쪽에서 왼쪽으로 열리도록 설정하고 아이콘을 오른쪽으로 설정하려는 분들에게는 올바른 해결책이 될 수 없다고 생각합니다. (하지만 그것은 목적에 달려 있습니다.) 그러나, 나는이주는 제안 toolbar대신의를 drawer. 이렇게하면 도구 모음 만 RTL이됩니다. 그래서 저는이 두 가지 대답의 조합이 당신이 원하는 것을 정확히 할 수 있다고 생각합니다.

이러한 설명에 따르면 코드는 다음과 같아야합니다.

(이 줄을 onCreate 메서드에 추가)

final DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); // Set it final to fix the error that will be mention below.

    ViewCompat.setLayoutDirection(toolbar, ViewCompat.LAYOUT_DIRECTION_RTL);

    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (drawer.isDrawerOpen(Gravity.RIGHT))
                drawer.closeDrawer(Gravity.RIGHT);
            else
                drawer.openDrawer(Gravity.RIGHT);
        }
    });

서랍을 최종으로 만들어야합니다. 그렇지 않으면 다음 오류가 발생합니다.

변수 ‘서랍’은 내부 클래스 내에서 액세스되며 최종적으로 선언되어야합니다.

그리고 사용하는 것을 잊지하지 않는 end대신 startonNavigationItemSelected방법 :

drawer.closeDrawer(GravityCompat.END);

그리고 activity_main.xml에서

<android.support.v4.widget.DrawerLayout
   android:id="@+id/drawer_layout"
   tools:openDrawer="end">

   <android.support.design.widget.NavigationView
      android:id="@+id/nav_view"
      android:layout_gravity="end"/>
</android.support.v4.widget.DrawerLayout>


답변

다음은 서랍에 대한 문서이며 왼쪽 또는 오른쪽에서 꺼내도록 구성 할 수있는 것으로 보입니다.

서랍 위치 및 레이아웃은 서랍이 나타나기를 원하는 뷰의 측면 (왼쪽 또는 오른쪽)에 해당하는 하위 뷰의 android : layout_gravity 속성을 사용하여 제어됩니다. (또는 레이아웃 방향을 지원하는 플랫폼 버전에서 시작 / 종료합니다.)

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


답변

이것을보세요 : ExpandableListView를 DrawerLayout 폼에서 오른쪽에서 왼쪽으로 밉니다 .

ActionBarDrawerToggle을 구현했다고 가정합니다. 트릭은 onOptionsItemSelected(MenuItem item)ActionBarDrawerToggle 개체 내부의 메서드를 다음과 같이 재정의하는 것입니다.

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

onOptionsItemSelected(MenuItem item)활동에서 이것을 확인하고 호출하십시오 .

@Override
public boolean onOptionsItemSelected(MenuItem item) {

if(mDrawerToggle.onOptionsItemSelected(item)) {
    return true;
}

return super.onOptionsItemSelected(item);
}

이렇게하면 홈 버튼 기능을 사용할 수 있습니다. 버튼을 작업 표시 줄의 오른쪽으로 이동하려면 사용자 지정 작업 항목을 구현해야하며 원하는대로 작동하도록하기위한 다른 항목이있을 수 있습니다.


답변

다음 오류의 주요 문제 :

절대 중력이 왼쪽 인 서랍 뷰를 찾을 수 없습니다.

즉,

android:layout_gravity="right"

오른쪽에있는 목록보기의 경우 다음 함수를 호출하여 왼쪽에서 서랍을 열어보십시오.

mDrawerToggle.syncState();

햄버거 아이콘을 클릭하세요!

위의 기능에 주석을 달고 @Rudi가 말한 것처럼 메뉴 열기 / 닫기를 처리하십시오!