http://developer.android.com/training/implementing-navigation/nav-drawer.html
В соответствии с этим документом, он не говорит, что можно реализовать ящик с правой стороны. Возможно ли это?: (
http://developer.android.com/training/implementing-navigation/nav-drawer.html
В соответствии с этим документом, он не говорит, что можно реализовать ящик с правой стороны. Возможно ли это?: (
Вот документация на ящике, и кажется, что вы можете настроить ее на выход слева или справа.
Позиционирование и компоновка ящика контролируется с помощью android: атрибут layout_gravity для дочерних представлений, соответствующих с которого вы хотите, чтобы ящик появился: слева или справа. (Или начало/конец на версиях платформы, поддерживающих направление макета.)
http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html
Навигатор может быть настроен для выхода из левого, правого или обоих. Ключом является порядок появления ящиков в объявлении XML и атрибут layout_gravity. Вот пример:
<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>
Мое приложение разбилось с ошибкой "Нет обзора ящика с гравитацией LEFT".
Поэтому добавлено это в onOptionsItemSelected:
if (item != null && item.getItemId() == android.R.id.home) {
if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
mDrawerLayout.closeDrawer(Gravity.RIGHT);
} else {
mDrawerLayout.openDrawer(Gravity.RIGHT);
}
}
Добавить в fooobar.com/questions/94553/... решение.
Если вы используете проект "Навигационный ящик", созданный Android Studio, все изменится в onOptionsItemSelected
. Поскольку они создали дочерний класс, вы должны использовать этот код
if (item != null && id == android.R.id.home) {
if (mNavigationDrawerFragment.isDrawerOpen(Gravity.RIGHT)) {
mNavigationDrawerFragment.closeDrawer(Gravity.RIGHT);
} else {
mNavigationDrawerFragment.openDrawer(Gravity.RIGHT);
}
return true;
}
Далее. В классе NavigationDrawerFragment
вам необходимо создать 3 метода:
Способ 1
public boolean isDrawerOpen(int gravity) {
return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(gravity);
}
Способ 2
public void closeDrawer(int gravity) {
mDrawerLayout.closeDrawer(gravity);
}
Способ 3
public void openDrawer(int gravity) {
mDrawerLayout.openDrawer(gravity);
}
Только теперь будет работать правый ящик.
Вы можете использовать NavigationView
из Material design. Например:
<?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>
Для полного обучения, пожалуйста, обратитесь http://v4all123.blogspot.in/2016/03/simple-example-of-navigation-view-on.html
Затем используйте эти коды @amal, я думаю, что это вам поможет. 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" />
// установите требуемые изображения
Код операции:
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);
}
});
}
}
и здесь вы можете настроить свой собственный адаптер списка для обоих списков и на дисплее вызова clickView (позиция); метод, в котором вы можете добавить фрагмент в рамки.
/**
* 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");
}
}
Я знаю, что это старый вопрос, но для тех, кто все еще ищет ответ:
Да, это возможно. Пожалуйста, проверьте мой ответ по ссылке ниже:
Чтобы установить навигационный ящик справа от экрана, сделайте макет ящика родителем навигационного представления и установите гравитацию макета навигационного представления справа.
У меня та же проблема, я могу показать свой ящик с левой стороны по стандартному значку гамбургера, но я не могу показать ящик с правой стороны и не могу перейти к значку гамбургера с правой стороны.
Я сделал это выше:
to boxLayout ---> android: layout_gravity = "right"
на коды --->
@Override public boolean onNavigationItemSelected (@NonNull MenuItem menuItem) {
int id = menuItem.getItemId();
if (menuItem != null && id == android.R.id.home)
{
if (drawer.isDrawerOpen(Gravity.RIGHT))
{
drawer.closeDrawer(Gravity.RIGHT);
}
else
{
drawer.openDrawer(Gravity.RIGHT);
}
return true;
}
Примечания. Я изменил имя функции как onOptionSelectedItem, но оно не изменилось.
Я не могу найти свою ошибку и не могу решить это.