标签: drawerlayout

如何打开没有操作栏的导航抽屉,只需一个按钮即可打开

我有一个没有任何操作栏的导航栏(我不想要一个操作栏).我正在尝试这样做,以便我有一个可以打开导航抽屉的按钮.

我知道有对DrawerLayout一个名为openDrawer方法 http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html#openDrawer(android.view.View)

我不知道如何使用它,但我在点击时尝试制作一个按钮,运行此方法:

DrawerLayout mDrawerLayout = (DrawerLayout) getView().findViewById(R.id.drawer_layout);
mDrawerLayout.openDrawer(mDrawerLayout);
Run Code Online (Sandbox Code Playgroud)

当我点击它时,它给了我一个Java NullPointerException.有人有什么想法吗?

编辑:此代码在片段内,我试图在片段外引用这些抽屉布局.我使用了调试器,它显示mDrawlerLayout为NULL.

有什么建议?

谢谢!

android button navigation-drawer drawerlayout

36
推荐指数
2
解决办法
7万
查看次数

是否可以使用除listview之外的其他内容作为drawerlayout中的滑动抽屉

我想有例如LinearLayout或者RelativeLayout从屏幕的,而不是一个孤独的左侧滑动ListView.

我试图将使用LinearLayoutandroid:layout_gravity="start"和我在运行时有此错误:

ClassCastException: android.widget.LinearLayout$LayoutParams cannot 
be cast to android.support.v4.widget.DrawerLayout$LayoutParams
Run Code Online (Sandbox Code Playgroud)

这是布局文件:

<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="@android:color/white"
    >

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <LinearLayout 
        android:layout_width="320dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:orientation="vertical">

        <ImageView 
            android:id="@+id/ivwLogo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/video_icon"
        />

        <ListView 
            android:id="@+id/left_drawer"
            android:layout_width="320dp"
            android:layout_height="match_parent"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"
            android:background="@android:color/white"
        />

    </LinearLayout>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

谢谢

android drawerlayout

34
推荐指数
3
解决办法
2万
查看次数

全宽导航抽屉

我想创建一个全宽导航抽屉.设置layout_widthmatch_parenton @+id/left_drawer的宽度约为屏幕空间的80%.这似乎是标准行为.我一定要重写onMeasure()DrawerLayout

我目前的代码:

<?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">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/black"
        android:id="@+id/mainFragmentContainer">
    </FrameLayout>

    <include
        android:id="@+id/left_drawer"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        layout="@layout/drawer"/>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

谢谢.

android android-layout navigation-drawer drawerlayout

34
推荐指数
5
解决办法
4万
查看次数

如何使用Appcompat v7 21,工具栏和DrawerLayout动画汉堡到箭头

我使用android.support.v7.widget.Toolbar与android.support.v4.widget.DrawerLayout.它工作正常,导航抽屉关闭时显示汉堡图标,抽屉打开时显示箭头图标.我想在应用程序中的某些事件中禁用抽屉并将Burger图标设置为箭头.我试图将锁定模式设置为关闭,但v7.app.ActionBarDrawerToggle仍显示Burger并打开抽屉.

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

有任何想法吗?谢谢!

更新:

不,我可以更改图标的状态,我可以启用/禁用抽屉,但动画不能使用此方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    Toolbar toolbar = (Toolbar) findViewById(R.id.application_toolbar);
    setSupportActionBar(toolbar);

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.string1, R.string.string2) {
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
        }

        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
        }
    };

    //mDrawerLayout.setDrawerListener(mDrawerToggle); // not needed
    ...
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case android.R.id.home:
            if (mDrawerLayout.getDrawerLockMode(GravityCompat.START) == LOCK_MODE_UNLOCKED) {
                showDrawer();
            } else {
                handleBackButtonPress(); // On this stage the home button is …
Run Code Online (Sandbox Code Playgroud)

android toolbar android-appcompat drawerlayout drawertoggle

33
推荐指数
2
解决办法
4万
查看次数

如何使用可见句柄实现DrawerLayout

我已成功为我的应用程序实现了NavigationDrawer.

我的应用程序显示在屏幕左侧打开的抽屉.

我的问题是我需要在左边添加一个按钮.可以单击或滑动该按钮以打开左侧抽屉.我能做到的.

但按钮应该看起来像抽屉的一部分会溢出到屏幕上.

这意味着当抽屉打开和关闭时,按钮应同时滑动.

关闭状态:

在此输入图像描述

开放状态

在此输入图像描述

我尝试将按钮添加到左侧抽屉的布局中,但似乎您无法使其显示在其边界之外,并且当您关闭它时,抽屉将始终完全隐藏.

现在我正在尝试添加它以向主DrawerLayout添加一个按钮并使其与左抽屉的右侧对齐...但没有运气......看起来像DrawerLayout不能有两个以上的孩子.. .

任何帮助将不胜感激.

我正在使用支持库(v4)

[编辑]我支持API级别8 ...所以不能使用ImageView.setTranslationXView.OnAttachStateChangeListener

android android-layout navigation-drawer drawerlayout

29
推荐指数
2
解决办法
1万
查看次数

如何将项目添加到NavigationView中的菜单组

在Android的文字游戏中,我目前有一个硬编码的菜单left_drawer_menu.xml,由3组(轮到我,回合对手,最后是其他东西)组成.

应用截图

mLeftDrawer = (NavigationView) findViewById(R.id.left_drawer);
mLeftDrawer.setNavigationItemSelectedListener(
        new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(final MenuItem menuItem) {
                Menu menu = mLeftDrawer.getMenu();

                if (menuItem.getGroupId() == R.id.my_move) {
                    menu.setGroupCheckable(R.id.my_move, true, true);
                    menu.setGroupCheckable(R.id.his_move, false, false);
                    menu.setGroupCheckable(R.id.extras, false, false);
                } else if (menuItem.getGroupId() == R.id.his_move) {
                    menu.setGroupCheckable(R.id.my_move, false, false);
                    menu.setGroupCheckable(R.id.his_move, true, true);
                    menu.setGroupCheckable(R.id.extras, false, false);
                } else if (menuItem.getGroupId() == R.id.extras) {
                    menu.setGroupCheckable(R.id.my_move, false, false);
                    menu.setGroupCheckable(R.id.his_move, false, false);
                    menu.setGroupCheckable(R.id.extras, true, true);
                }

                menuItem.setChecked(true);
                mLeftItem = menuItem.getItemId();
                mDrawerLayout.closeDrawer(mLeftDrawer);
                mHandler.postDelayed(new Runnable() {
                    @Override
                    public void …
Run Code Online (Sandbox Code Playgroud)

android navigation-drawer drawerlayout navigationview

29
推荐指数
2
解决办法
3万
查看次数

如何在DrawerLayout的NavigationView中设置未读通知计数?

我使用Android Design Support LibraryDrawerLayout中创建了一个NavigationView

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/drawer_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:fitsSystemWindows="true">

     <!-- other views -->

     <android.support.design.widget.NavigationView
         android:id="@+id/navigation"
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:layout_gravity="start"
         app:menu="@menu/my_navigation_items" />
 </android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

my_navigation_items.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/bookmarks_drawer"
            android:icon="@drawable/ic_drawer_bookmarks"
            android:title="@string/bookmarks" />
        <item
            android:id="@+id/alerts_drawer"
            android:icon="@drawable/ic_drawer_alerts"
            android:title="@string/alerts" />
        <item
            android:id="@+id/settings_drawer"
            android:icon="@drawable/ic_drawer_settings"
            android:title="@string/settings" />
    </group> 
</menu>
Run Code Online (Sandbox Code Playgroud)

现在,我想为NavigationView下面的图像中的每个项目设置未读通知计数器:

未读通知计数器

如何在项目上设置未读通知计数器NavigationView

android android-support-library drawerlayout android-design-library navigationview

27
推荐指数
3
解决办法
2万
查看次数

Android工具栏+标签布局+抽屉,滚动时隐藏工具栏并将TabLayout置于顶部

我有活动,附有抽屉.抽屉的每个菜单都是一个片段,在其中一个菜单下我有一个片段TabLayout,每个标签包含一个RecyclerView.所以现在,当我滚动时RecyclerView,标签布局被隐藏但ToolBar仍然位于顶部.我需要的是ToolBar隐藏(scrollFlags:scroll|enterAlways),并TabLayout应显示在顶部.

所以目前的设置是:

Activity with attached DrawerLayout -> Fragment with TabLayout -> Tab Fragment 1 with RecyclerView -> Tab Fragment 2 with RecyclerView

android android-fragments drawerlayout material-design android-toolbar

25
推荐指数
4
解决办法
1万
查看次数

你需要传递给v4.widget.DrawerLayout.isDrawerOpen()/.openDrawer()/.closeDrawer()

我一直在试图跨越到移动我的代码DrawerLayout作为由Android建议这里SlidingDrawer已经过时了.

我的问题是,到目前为止DrawerLayout似乎要么执行得非常糟糕,有无用的错误消息(没有防御性编程)和/或在文档中没有得到足够的解释.

这个isDrawerOpen()方法在这里描述:

public boolean isDrawerOpen(查看抽屉)

检查给定的抽屉视图当前是否处于打开状态.为了被视为"开放",抽屉必须已经稳定在其完全可见的状态.要检查部分可见性,请使用isDrawerVisible(android.view.View).

参数:drawer - 要检查的抽屉视图

返回:如果给定的抽屉视图处于打开状态,则返回true

每个方法isDrawerOpen(View drawer),openDrawer(View drawer)并且closeDrawer(View drawer)在传递时不起作用:DrawerLayout有问题或者其中任何一个的孩子.我不知道我应该为这些方法提供什么来让它们发挥作用.有人能告诉我吗?

有关实现,请参阅下面的整个问题描述.

我有这样的布局:

<android.support.v4.widget.DrawerLayout
    android:id="@+id/mainmenuPanel"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/dualPane"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <FrameLayout
        android:id="@+id/menuPane"
        android:layout_width="300dp"
        android:layout_height="match_parent" />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我将以下方法连接到一个按钮:

protected void onCreate(Bundle savedInstanceState) {    
    ...
    mMenuPanel = (DrawerLayout) findViewById(R.id.mainmenuPanel);
    ....
}

public boolean isDrawerOpen() {
    if(mMenuPanel != null) {
        return mMenuPanel.isDrawerOpen(mMenuPanel);
    }
    return false;
} …
Run Code Online (Sandbox Code Playgroud)

android navigation-drawer drawerlayout

24
推荐指数
2
解决办法
9310
查看次数

四个屏幕边的CustomDrawerLayout发出Fling手势和检测

我正在尝试创建和改进现有的SlidingDrawers项目,这些项目可以适用于屏幕的所有四个边{LEFT,RIGHT,TOP,BOTTOM}.有一些库,但它们都有局限性,复杂性和错误.其中一个比较常见的是umano的AndroidSlidingUpPanel,但是,我不喜欢这个库,因为你只需要包含两个子布局,并且还需要注意主要内容的具体安排.其他库类似,或更复杂,或有bug.

我接近完成我的SlidingDrawers版本,我专注于BOTTOM引力.我需要一些帮助.单击抽屉将打开并关闭它.您也可以用手指滑动抽屉.但是,如果你扔掉抽屉,整个视图将会移动到比它应该更低或更低的位置.

我该如何解决这个问题?据我所知,我的数学是正确的.我传给动画师的翻译价值应该是正确的.以下是我完成的工作.请查看此项目https://github.com/drxeno02/CustomDrawerLayout.git.先感谢您.

对于那些想要查看有问题的代码看起来的片段的人来说,这就是我目前正在做的手势.

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            mActivePointerId = MotionEventCompat.getPointerId(event, 0);
            switch (mStickTo) {
                case GRAVITY_BOTTOM:
                case GRAVITY_TOP:
                    mInitialCoordinate = event.getY();
                    break;
                case GRAVITY_LEFT:
                case GRAVITY_RIGHT:
                    mInitialCoordinate = event.getX();
                    break;
            }
            break;

        case MotionEvent.ACTION_MOVE:

            float coordinate = 0;
            switch (mStickTo) {
                case GRAVITY_BOTTOM:
                case GRAVITY_TOP:
                    coordinate = event.getY();

                    break;
                case GRAVITY_LEFT:
                case GRAVITY_RIGHT:
                    coordinate = event.getX();
                    break;
            }

            final int diff = (int) Math.abs(coordinate - mInitialCoordinate);

            // confirm that difference …
Run Code Online (Sandbox Code Playgroud)

android gesture slidingdrawer drawerlayout

24
推荐指数
1
解决办法
304
查看次数