当我在我的应用程序上做某事时,我看到我的应用程序上的导航抽屉减小了它的大小.但是我没有做任何事情.
然后,在检查代码后,我看到不推荐使用setDrawerListener.有人有解决方案吗?任何帮助都可以.先感谢您!
drawerLayout.setDrawerListener(actionBarDrawerToggle);
Run Code Online (Sandbox Code Playgroud) android drawerlayout material-design android-design-library navigationview
我有一个应用程序,我想在其中实现一个双抽屉 - 一个来自左边,一个来自右边.左抽屉用于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按钮 - 左抽屉也打开,并重叠右抽屉.
我想要获得以下几种解决方案:
我还没有想到如何做到这一点,因为DrawerToggle接受DrawerLayout本身作为参数,而不是单个抽屉......
我正在使用支持库.
有人有主意吗?先感谢您.
如何禁用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)
这是我试过的:
onClickListener为mDrawerLayout.onClick永远不会被召唤onTouchListener为mDrawerLayout.onTouch永远不会被召唤ActionBarDrawerToggle和DrawerLayout课程.找不到类似的东西onDrawerStartedOpening.如何使抽屉布局位于操作栏/工具栏下方?我正在使用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
我正在开发一个使用导航抽屉图案的应用程序(使用DrawerLayout).
每次单击抽屉的项目,都会替换主容器中的片段.
但是,我不确定何时是进行片段交易的合适时机?抽屉开始关闭时?或者关闭后?
在google的documentaion示例中,您可以看到他们在项目单击后立即执行事务,然后关闭抽屉.
结果,抽屉看起来很迟钝而且不平滑,看起来非常糟糕(它也发生在我的应用中).
在Gmail和Google云端硬盘应用程序中,另一方面,它似乎是在抽屉关闭后进行交易(我是对吗?).
结果,抽屉没有延迟且非常平滑,但至少需要大约1秒钟(抽屉关闭所需的时间)才能看到下一个片段.
在立即进行片段交易时,似乎抽屉没有办法顺畅.
你觉得怎么样?
提前致谢!
android android-fragments fragmenttransaction navigation-drawer 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支持库引入了DrawerLayout来实现常见的UX模式,您可以向右或向左滑动以显示导航菜单.
我喜欢的是具有相同API 的垂直DrawerLayout,可以从我的布局的顶部/底部向下/向上拉.
从4.2开始,旧的SlidingDrawer已被弃用,我还没有听说过一些实现相同功能的新Widget.
可以DrawerLayout以某种方式扩展以实现垂直滑动UX模式吗?谷歌是否提供了一些不同的小部件来实现它?
例如,谷歌音乐有一些非常类似于我想要实现的方式来拉动播放器.

我正在研究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