우선 나는이 질문이 전에 여기에 나타났음을 알고 있지만 많은 것을 시도한 후에도 여전히 성공하지 못했습니다. 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
대신 start
에 onNavigationItemSelected
방법 :
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가 말한 것처럼 메뉴 열기 / 닫기를 처리하십시오!