Коснитесь в любом месте, чтобы открыть меню навигации.

Для скользящего меню от jfeinstein10 ( https://github.com/jfeinstein10/SlidingMenu) я могу скользить в любом месте приложения, чтобы открывать меню.

Для Google недавно представленный навигационный ящик http://developer.android.com/design/patterns/navigation-drawer.html, есть ли способ, которым я могу иметь подобное поведение?

До сих пор из документации я видел только ограничение скольжения от края или прикосновения к значку приложения.

Пользователь может вывести блок навигации на экран, проведя пальцем от левого края экрана или коснувшись значка приложения на панели действий.

5 ответов

Решение

Я нашел решение. Вы можете настроить поле касания и сделать его таким же широким, как ваш вид. Вот ссылка

Установить маркер для Android-навигации

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() метод.

Другие вопросы по тегам