Android-возможен ли навигационный ящик с правой стороны?
http://developer.android.com/training/implementing-navigation/nav-drawer.html
согласно этому документу, он не говорит, Можно ли реализовать ящик с правой стороны. Это вообще возможно? : (
8 ответов:
вот документация на ящике, и кажется, что вы можете настроить его, чтобы вытащить слева или справа.
располагать и план ящика проконтролированы используя :layout_gravity атрибут android на вид ребенком, соответствующие которых сторона представления, из которой вы хотите, чтобы ящик появился: слева или справа. (Или начало / конец на версиях платформы, которые поддерживают макет направление.)
http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html
NavigationDrawer можно настроить для извлечения слева, справа или обоих. Ключ-это порядок появления ящиков в объявлении 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>
мое приложение разбилось с ошибкой "нет представления ящика, найденного с гравитацией слева".
поэтому добавил Это в onOptionsItemSelected:
if (item != null && item.getItemId() == android.R.id.home) { if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) { mDrawerLayout.closeDrawer(Gravity.RIGHT); } else { mDrawerLayout.openDrawer(Gravity.RIGHT); } }
добавить к https://stackoverflow.com/a/21781710/437039 решение.
если вы используете проект Navigation Drawer, созданный 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от материального дизайна. Например :<?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); } }); } }и здесь вы можете установить свой собственный адаптер списка как для списков, так и для элемента click call displayView(position); метод, где вы можете добавить свой фрагмент в framelayout.
/** * 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"); } }
чтобы установить навигационный ящик справа от экрана, сделайте родительский элемент компоновки ящика навигационного вида и установите гравитацию компоновки навигационного вида справа.
Comments