Коснитесь в любом месте, чтобы открыть меню навигации.
Для скользящего меню от jfeinstein10 ( https://github.com/jfeinstein10/SlidingMenu) я могу скользить в любом месте приложения, чтобы открывать меню.
Для Google недавно представленный навигационный ящик http://developer.android.com/design/patterns/navigation-drawer.html, есть ли способ, которым я могу иметь подобное поведение?
До сих пор из документации я видел только ограничение скольжения от края или прикосновения к значку приложения.
Пользователь может вывести блок навигации на экран, проведя пальцем от левого края экрана или коснувшись значка приложения на панели действий.
5 ответов
Я нашел решение. Вы можете настроить поле касания и сделать его таким же широким, как ваш вид. Вот ссылка
Google, исходя из того, как они произносят свое руководство "Если пользователь касается самого левого края экрана (в пределах 20 dp слева)", кажется, что они не хотят этой функциональности.
См. http://developer.android.com/design/patterns/navigation-drawer.html
"Пользователь может вывести блок навигации на экран, проведя пальцем от левого края экрана или коснувшись значка приложения на панели действий".
Они не говорят и не ударяют из любого места на экране. Они также не имеют этой функциональности ни в одном из своих приложений (G+, Gmail и т. Д.), Поэтому, если вы хотите эту функциональность, вам, вероятно, следует заняться написанием своего (с помощью жестов) или третьего лица (например, jfeinstein10).
РЕДАКТИРОВАТЬ: Youtube приложение позволяет вам провести в любом месте, но версия, по крайней мере у меня (4.5.17), похоже, не использует их новый API.
Вы можете использовать это
DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Field mDragger = mDrawerLayout.getClass().getDeclaredField(
"mLeftDragger");//mRightDragger or mLeftDragger based on Drawer Gravity
mDragger.setAccessible(true);
ViewDragHelper draggerObj = (ViewDragHelper) mDragger
.get(mDrawerLayout);
Field mEdgeSize = draggerObj.getClass().getDeclaredField(
"mEdgeSize");
mEdgeSize.setAccessible(true);
int edge = mEdgeSize.getInt(draggerObj);
mEdgeSize.setInt(draggerObj, edge * 3);
Как уже говорили другие, и Чейни сказал в своем ответе - вероятно, лучше оставить все как положено. Тем не менее DrawerLayout
это другой стиль, чем SlidingMenu
, Google также добавил SlidingPaneLayout
который больше соответствует стилю SlidingMenu.
Я закончил реализацию SlidingPaneLayout
таким образом, поскольку это было больше из того, что я искал в конце концов. (Это также стиль приложения YouTube / Hangouts)
<android.support.v4.widget.SlidingPaneLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/sliding_pane_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/left_pane"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"/>
</android.support.v4.widget.SlidingPaneLayout>
Затем, чтобы открыть с помощью кнопки домой панель действий:
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action buttons
switch(item.getItemId()) {
case android.R.id.home:
if (mPaneLayout.isOpen())
mPaneLayout.closePane();
else
mPaneLayout.openPane();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Затем вы можете реализовать PanelSlideListener
справиться, когда он скользит / открывается / закрывается.
Я предлагаю прочитать серию Адама Пауэлла и на навигационном блокноте - часть 3 начинает использовать SlidingPaneLayout vs Navigation Drawer:
Часть 1. https://plus.google.com/+AdamWPowell/posts/2zi4DXd3jkm
Часть 2. https://plus.google.com/+AdamWPowell/posts/VdgexsZeXHW
Часть 3 - https://plus.google.com/+AdamWPowell/posts/8j2GVw72i1E
Часть 4. https://plus.google.com/+AdamWPowell/posts/TtBFUXhe5HU
Вы могли бы использовать GestureDetector
самостоятельно определить скользящие жесты и просто открыть навигационный ящик с помощью DrawerLayout.openDrawer()
метод.