Как установить значок Layer Layout в правой части экрана устройства?
Я создал приложение образца макета ящика, он отлично работает, моя проблема заключается в том, что макет ящика отлично работает в правом левом углу, но я пытаюсь переместить значок слева направо вправо, но он не работает, дайте мне ваше предложение..!!! Это возможно или нет?
![enter image description here]()
<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:layout_gravity="right" >
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<!-- The navigation drawer -->
<ListView
android:id="@+id/drawer_list"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#111"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
Ответы
Ответ 1
Этот значок представляет меню навигации, которое по дизайну должно быть в левой части экрана. В соответствии с рекомендациями мы можем иметь навигационный ящик с правой стороны, но это должно использоваться для изменения содержимого (например, фильтров). Для всех таких целей вы можете использовать ActionbarItem и установить ActionItem в правом углу экрана. Нажмите на этот элемент действия, чтобы открыть или закрыть правый навигационный ящик.
Но наверняка, согласно дизайну, этот анимированный трехслойный значок меню, представляющий навигацию, должен быть с левой стороны.
Только для информации, чтобы поместить навигационный ящик с правой стороны, вы должны изменить гравитацию навигационного ящика следующим образом:
<?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/main_background" >
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<!-- The navigation drawer -->
<LinearLayout
android:id="@+id/right_drawer"
android:layout_width="280dp"
android:layout_gravity="end"
android:layout_height="match_parent"
android:orientation="vertical" />
</android.support.v4.widget.DrawerLayout>
Кроме того, в этом случае вы действительно хотите, чтобы значок меню навигации, справа, использовал пользовательские макеты заголовков или библиотеку, например ActionBarSherlock, для ее редактирования.
Надеюсь, это поможет!
Ответ 2
Возможно, это слишком поздно, но вы можете решить это, используя меню по умолчанию.
Создать res/menu/my_right_side_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/btnMyMenu"
android:icon="@drawable/ic_drawer"
android:title="Right Side Menu"
myapp:showAsAction="always"/>
</menu>
Затем добавьте свое меню в onCreateOptionsMenu()
в Activity
@Override
public boolean onCreateOptionsMenu(Menu menu) {
int menuToUse = R.menu.my_right_side_menu;
MenuInflater inflater = getMenuInflater();
inflater.inflate(menuToUse, menu);
return super.onCreateOptionsMenu(menu);
}
Затем в вашем ActionBarDrawerToggle
обработайте событие клика вашего пункта меню
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {
@Override
public boolean onOptionsItemSelected(android.view.MenuItem item) {
if (item != null && item.getItemId() == R.id.btnMyMenu) {
if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
mDrawerLayout.closeDrawer(Gravity.RIGHT);
} else {
mDrawerLayout.openDrawer(Gravity.RIGHT);
}
return true;
}
return false;
}
};
И, наконец, не забудьте скрыть кнопку "Домой" с ActionBar
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setDisplayShowHomeEnabled(false);
Ответ 3
Если вы используете AppBarLayout и панель инструментов, выполните следующие действия
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay"
android:layoutDirection="rtl">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
уведомление: android: layoutDirection = "rtl"
Ответ 4
У вас есть два варианта, если вы не хотите иметь панель инструментов или не нуждаетесь в панели инструментов, как в моем случае, есть простой вариант просто добавить ImageButton в правом верхнем углу вашей активности, например
<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:layout_gravity="right" >
<!-- The main content view -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<ImageButton
android:id="@+id/account_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:padding="15dp"
android:background="@null"
android:src="@drawable/ic_menu_white_24dp" />
</RelativeLayout>
<!-- The navigation drawer -->
<ListView
android:id="@+id/drawer_list"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#111"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
а затем просто добавьте к нему прослушиватель и используйте drawerLayout.isDrawerOpen(), чтобы проверить текущее состояние ящика в нормальном состоянии if, затем открыть и закрыть ящик с помощью drawerLayout.openDrawer() и drawerLayout.closeDrawer();, и для каждого из методов, которые вы можете передать, будет ли гравитация или drawerView в вашем случае ListView, поэтому это должно быть что-то как это drawer_layout.isDrawerOpen(drawer_list);
Ответ 5
Вот лазееподобное решение, которое работало в моем случае.
toggle = new ActionBarDrawerToggle(
this, drawer, toolbar0, R.string.open_nav, R.string.close_nav);
Я создал для него панель инструментов.
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_marginRight="40dp"
android:layout_marginEnd="40dp"
android:background="@color/colorPrimary">
<!-- this is your general toolbar-->
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="right|end|center_vertical"
android:text="Mytitle"/>
</android.support.v7.widget.Toolbar>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar0"
android:layout_width="40dp"
android:layout_height="?attr/actionBarSize"
android:layout_gravity="right|end"
android:background="?attr/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<!-- this is your nav-button toolbar-->
</FrameLayout>
</android.support.design.widget.AppBarLayout>
и установите для него onclicklistener:
toolbar0.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (drawer.isDrawerOpen(Gravity.RIGHT)) {
drawer.closeDrawer(Gravity.RIGHT);
} else {
drawer.openDrawer(Gravity.RIGHT);
}
}
});
Ответ 6
Из Руководство разработчика:
Позиционирование и компоновка ящика контролируется с помощью android: атрибут layout_gravity для дочерних представлений, соответствующих с которого вы хотите, чтобы ящик появился: слева или справа. (Или начало/конец на версиях платформы, поддерживающих направление макета.)
Это означает, что вы можете сделать это:
<DrawerLayout
android:layout_gravity="right">
</DrawerLayout>
Изменить
Согласно Создание ящика навигации,
Вид ящика (ListView) должен указывать горизонтальную гравитацию с атрибутом android: layout_gravity. Для поддержки права налево (RTL), укажите значение с "start" вместо "left" (так ящик появляется справа, когда макет RTL).
Итак, вы должны сделать:
<DrawerLayout
android:layout_gravity="start">
</DrawerLayout>