标签: drawerlayout

方法setDrawerListener已弃用

当我在我的应用程序上做某事时,我看到我的应用程序上的导航抽屉减小了它的大小.但是我没有做任何事情.

导航抽屉

然后,在检查代码后,我看到不推荐使用setDrawerListener.有人有解决方案吗?任何帮助都可以.先感谢您!

drawerLayout.setDrawerListener(actionBarDrawerToggle);
Run Code Online (Sandbox Code Playgroud)

android drawerlayout deprecation-warning

219
推荐指数
4
解决办法
8万
查看次数

如何在NavigationView中自定义项目背景和项目文本颜色?

我想实现Material Design Docs中显示的类似内容.

colorControlHighlight 用于检查项目的背景.

我需要自定义:

  • 背景未经检查
  • 文字颜色检查
  • 文本颜色未选中

android drawerlayout material-design android-design-library navigationview

73
推荐指数
6
解决办法
7万
查看次数

DrawerLayout双抽屉(左右抽屉同时)

我有一个应用程序,我想在其中实现一个双抽屉 - 一个来自左边,一个来自右边.左抽屉用于app导航,右抽屉用于结果过滤.

所以,布局是这样的:

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

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/light_grey"
        android:orientation="vertical">

        <GridView
            android:id="@+id/gridview"
            style="@style/GridViewStyle"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center"
            android:horizontalSpacing="7dp"
            android:stretchMode="columnWidth"
            android:verticalSpacing="7dp" />
    </LinearLayout>

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#111"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp" />

    <ListView
        android:id="@+id/right_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="end"
        android:background="#111"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

你可以在这里清楚地看到"left_drawer"和"right_drawer",以及它们各自的重力 - "开始"和"结束"这实际上是有效的!你可以将它们全部拉出来.

问题是,当我实现DrawerToggle时 - 它只打开左抽屉,而不是关闭右抽屉,所以如果打开右抽屉我按下DrawerToggle按钮 - 左抽屉也打开,并重叠右抽屉.

我想要获得以下几种解决方案:

  1. 在右侧创建相同的DrawerToggle按钮,其行为和动画与左侧相同.
  2. 将抽屉放在抽屉的另一侧,我试图打开 - 自动关闭(如果左抽屉打开,我按下右抽屉的拨动开关,反之亦然).

我还没有想到如何做到这一点,因为DrawerToggle接受DrawerLayout本身作为参数,而不是单个抽屉......

我正在使用支持库.

有人有主意吗?先感谢您.

android navigation-drawer drawerlayout

63
推荐指数
5
解决办法
6万
查看次数

在DrawerLayout上禁用手势监听器

如何禁用DrawerLayout的手势识别?(从左向右滑动)并且只接受关闭手势(从右到左)并使用主页按钮打开抽屉?

android drawerlayout

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

如何检测DrawerLayout是否开始打开?

因此,当导航抽屉开始打开时,我有要隐藏的标签.我完成打开时隐藏了它们的代码,但这不是我想要的.

mDrawerToggle = new ActionBarDrawerToggle(
        this,                 
        mDrawerLayout,        
        R.drawable.ic_drawer,  
        R.string.drawer_open,  
        R.string.drawer_close  
) {
    @Override
    public void onDrawerClosed(View view) {
        invalidateOptionsMenu(); 
        setActionBarMode(ActionBar.NAVIGATION_MODE_TABS);
    }

    @Override
    public void onDrawerOpened(View drawerView) {
        invalidateOptionsMenu(); 
        setActionBarMode(ActionBar.NAVIGATION_MODE_STANDARD);
    }

};
mDrawerLayout.setDrawerListener(mDrawerToggle);
Run Code Online (Sandbox Code Playgroud)

这是我试过的:

  • 设置onClickListenermDrawerLayout.onClick永远不会被召唤
  • 设置onTouchListenermDrawerLayout.onTouch永远不会被召唤
  • 研究ActionBarDrawerToggleDrawerLayout课程.找不到类似的东西onDrawerStartedOpening.

android navigation-drawer drawerlayout drawertoggle

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

如何使DrawerLayout显示在工具栏下方?

如何使抽屉布局位于操作栏/工具栏下方?我正在使用v7:21 app compat库和新的ToolBar视图.

我看到的例子看起来像

<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<!-- drawer view -->
<LinearLayout
    android:layout_width="304dp"
    android:layout_height="match_parent"
    android:layout_gravity="left|start">

    <!-- drawer content -->

</LinearLayout>

<!-- normal content view -->
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <!-- The toolbar -->
    <android.support.v7.widget.Toolbar  
        android:id="@+id/my_awesome_toolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary" />

    <!-- The rest of content view -->

</LinearLayout>  
Run Code Online (Sandbox Code Playgroud)

但随后工具栏将被抽屉隐藏,这使得动画汉堡图标(如v7.ActionBarDrawerToggle)无用,因为它在抽屉下方不可见,但我确实想使用新的ToolBar视图来更好地支持Material主题.

那么如何实现呢?是否可以将DrawerLayout作为非顶级视图?

android toolbar android-support-library navigation-drawer drawerlayout

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

DrawerLayout的项目点击 - 何时是替换片段的正确时间?

我正在开发一个使用导航抽屉图案的应用程序(使用DrawerLayout).

每次单击抽屉的项目,都会替换主容器中的片段.

但是,我不确定何时是进行片段交易的合适时机?抽屉开始关闭时?或者关闭后?

在google的documentaion示例中,您可以看到他们在项目单击后立即执行事务,然后关闭抽屉.
结果,抽屉看起来很迟钝而且不平滑,看起来非常糟糕(它也发生在我的应用中).

GmailGoogle云端硬盘应用程序中,另一方面,它似乎是在抽屉关闭后进行交易(我是对吗?).
结果,抽屉没有延迟且非常平滑,但至少需要大约1秒钟(抽屉关闭所需的时间)才能看到下一个片段.

在立即进行片段交易时,似乎抽屉没有办法顺畅.

你觉得怎么样?

提前致谢!

android android-fragments fragmenttransaction navigation-drawer drawerlayout

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

Android:如何使DrawerLayout不会将触摸事件传递给基础视图

DrawerLayout在我的应用程序中使用支持库.我注意到,当我在Drawer视图中单击一个空白区域时,底层View(包含a ListView)会收到Touch事件并对其作出反应.

看起来像这样的onInterceptTouchEvent方法DrawerLayout:

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    final int action = MotionEventCompat.getActionMasked(ev);

    // "|" used deliberately here; both methods should be invoked.
    final boolean interceptForDrag = mLeftDragger.shouldInterceptTouchEvent(ev) |
            mRightDragger.shouldInterceptTouchEvent(ev);

    boolean interceptForTap = false;

    switch (action) {
        case MotionEvent.ACTION_DOWN: {
            final float x = ev.getX();
            final float y = ev.getY();
            mInitialMotionX = x;
            mInitialMotionY = y;
            if (mScrimOpacity > 0 &&
                    isContentView(mLeftDragger.findTopChildUnder((int) x, (int) y))) {
                interceptForTap = true;
            }
            mDisallowInterceptRequested = …
Run Code Online (Sandbox Code Playgroud)

android android-support-library drawerlayout

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

vertical DrawerLayout或SlidingPaneLayout

最新的Android支持库引入了DrawerLayout来实现常见的UX模式,您可以向右或向左滑动以显示导航菜单.

我喜欢的是具有相同API 的垂直DrawerLayout,可以从我的布局的顶部/底部向下/向上拉.

从4.2开始,旧的SlidingDrawer已被弃用,我还没有听说过一些实现相同功能的新Widget.

可以DrawerLayout以某种方式扩展以实现垂直滑动UX模式吗?谷歌是否提供了一些不同的小部件来实现它?

例如,谷歌音乐有一些非常类似于我想要实现的方式来拉动播放器.

在此输入图像描述

android android-widget drawerlayout

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

ClassCastException android.widget.FrameLayout $ LayoutParams to android.support.v4.widget.DrawerLayout $ LayoutParams

我正在研究Android的导航抽屉.根据我的要求,我要在导航抽屉中显示gridview和项目列表视图.我在布局xml文件中创建了一个linearLayout,并将两个小部件(Grid视图和Listview)放在LinearLayout中.

当我运行该文件时,我收到以下错误:

java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.navigationdrawer3/com.example.navigationdrawer3.MainActivity}:java.lang.ClassCastException:android.widget.FrameLayout $ LayoutParams无法强制转换为android.support.v4. widget.DrawerLayout $的LayoutParams

下面是我的java,logcat和NavigationDrawer布局文件:

MainActivity.java

public class MainActivity extends Activity {

     private DrawerLayout mDrawerLayout;
        private ListView mDrawerList;
        private ActionBarDrawerToggle mDrawerToggle;

        private CharSequence mDrawerTitle;
        //@SuppressWarnings("unused")
        private CharSequence mTitle;
        private String[] mGalaxyTitles;

        private GridView mDrawerGrid;

        private LinearLayout mDrawerLinear;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTitle = mDrawerTitle = getTitle();
        mGalaxyTitles = getResources().getStringArray(R.array.items_array);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);

        mDrawerGrid = (GridView)findViewById(R.id.gridview);

        mDrawerLinear =(LinearLayout)findViewById(R.id.linearLayout);

        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);

        mDrawerGrid.setAdapter(new ImageAdapter(MainActivity.this));

        mDrawerList.setAdapter(new ArrayAdapter<String>(this,
                R.layout.drawer_list_item, mGalaxyTitles));

        mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); …
Run Code Online (Sandbox Code Playgroud)

android android-layout navigation-drawer drawerlayout android-framelayout

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