因此,我希望以这样的方式为DrawerLayout设置动画,使其打开,将一个项目添加到其中的菜单中,然后将其关闭.
我尝试了很多东西,但问题是"打开"和"关闭"命令之间没有延迟(或者至少没有明显的延迟),因此动画永远不会触发.
我真的不想使用任意长度的'post delayed',因为这看起来很脏.我已经尝试在监听器中手动覆盖"onDrawerOpened()" - 这已经工作了,但是在执行操作后我无法关闭它,因为你无法从内部关闭它(意思是,如果'closeDrawer(布局) )'方法是从侦听器本身的任何子线程调用的,它将得到运行时错误).
所以我拥有的是:
_drawerToggle = new ActionBarDrawerToggle(MainActivity.this, _drawerLayout, R.drawable.ic_drawer, R.string.drawerOpen, R.string.drawerClose)
{
/** Called when a drawer has settled in a completely closed state. */
public void onDrawerClosed(View view) {
getActionBar().setTitle(_title);
}
/** Called when a drawer has settled in a completely open state. */
public void onDrawerOpened(View drawerView) {
myAction(); //My action
//If I try to invoke 'drawerClose()' here or in my action, a runtime error occurs
}
};
_drawerLayout.setDrawerListener(_drawerToggle);
_drawerLayout.openDrawer(_mainFrame);
//If I invoke …Run Code Online (Sandbox Code Playgroud) 我DrawerLayout在我的申请中使用.现在,当我按下后退按钮时,它首先关闭DrawerLayout,需要再次单击后退按钮,然后它将重定向到上一个屏幕.
但我想避免这个DrawerLayout关闭后退按钮.任何人都知道如何防止这种情况?
请告诉我我被困在这上面的方式.
提前致谢.
所以,我有这个
btn_menu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {if(mDrawerLayout.isDrawerVisible(R.id.drawer_layout) == false) {
mDrawerLayout.openDrawer(mDrawerList);
Log.d("False", "" + mDrawerLayout.isDrawerOpen(R.id.drawer_layout));
} else {
mDrawerLayout.closeDrawer(mDrawerLayout);
Log.d("True", "" + mDrawerLayout.isDrawerOpen(R.id.drawer_layout));
}
}
});
Run Code Online (Sandbox Code Playgroud)
在“ btn_menu”上,单击“我将打开和关闭抽屉”,问题是无论我做什么,“ isDrawerOpen”方法始终会返回false。我不知道该怎么办
这是布局:
<?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:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ExpandableListView
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" />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
编辑:blipinsk的答案是正确的。但是我也不得不更改if测试。
if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
mDrawerLayout.closeDrawer(Gravity.LEFT);
} else {
mDrawerLayout.openDrawer(Gravity.LEFT);
}
Run Code Online (Sandbox Code Playgroud) 我按照本教程创建了一个导航抽屉
但我需要的是,我需要从右侧打开相同的抽屉菜单。有谁知道如何实现这一目标?
以下是我的 xml
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
>
<include
android:id="@+id/toolbar"
layout="@layout/tool_bar"
/>
<FrameLayout
android:id="@+id/frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="right"
app:headerLayout="@layout/header"
app:menu="@menu/drawer"
/>
Run Code Online (Sandbox Code Playgroud)
并在代码中
// Initializing Drawer Layout and ActionBarToggle
drawerLayout = (DrawerLayout) findViewById(R.id.drawer);
ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.openDrawer, R.string.closeDrawer){
@Override
public void onDrawerClosed(View drawerView) {
// Code here will be triggered once the drawer closes as we dont want anything to happen so we …Run Code Online (Sandbox Code Playgroud) 我有一个抽屉布局的活动。
我想检查抽屉是否关闭然后调用onBackPressed. 如果抽屉是打开的,它应该先关闭然后onBackPressed应该被调用。
我尝试使用 addDrawerListener 这样做
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setUpUI();
listeners(
}
public void setUpUI() {
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Initializing NavigationView
navigationView = (NavigationView) findViewById(R.id.navigation_view);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer);
}
public void listeners()
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
}
@Override
public void onDrawerOpened(View drawerView) {
}
@Override
public void onDrawerClosed(View drawerView) {
onBackPressed();
}
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我正在我的应用程序中添加抽屉,并遵循官方指南。我想将 Drawer 分为三个部分:
抽屉头(顶部)
部分项目
设置(底部)
如果我ListView是其直接子代,Drawer则它可以正常工作,但我无法在底部添加“设置”部分。我发现了这个,它符合我的要求,但DrawerHeader不占用最大宽度。
这是我的代码:
Drawer(
elevation: 1.5,
child: Column(children: <Widget>[
DrawerHeader(
decoration: BoxDecoration(
color: Colors.redAccent,
)),
Expanded(
child: ListView(
padding: EdgeInsets.zero,
children: <Widget>[
//list tiles
],
)),
Container(
color: Colors.black,
width: double.infinity,
height: 0.1,
),
Container(
padding: EdgeInsets.all(10),
height: 100,
child: Text("V1.0.0",style: TextStyle(fontWeight: FontWeight.bold),)),
])),
Run Code Online (Sandbox Code Playgroud)
默认情况下,抽屉标题宽度不是最大的。它根据内容大小进行调整,如果我增加字体大小或在左侧和右侧添加填充,则需要更多的宽度。
检查下图以供参考: