Gra*_*eme 24 android navigation-drawer drawerlayout
我一直在试图跨越到移动我的代码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)
但是,如果您将其自身作为参数(在极端情况下会多余),则会出现以下错误:
E/AndroidRuntime(11241): java.lang.ClassCastException:
android.widget.FrameLayout$LayoutParams cannot be cast to
android.support.v4.widget.DrawerLayout$LayoutParams
Run Code Online (Sandbox Code Playgroud)
(正如你所注意到的那样,并没有给你任何关于你做错了什么的信息.而是问题的症状).
这里或这里的其他答案要么难以理解,要么与问题密切相关,没有太多解释.即便如此,我还是尝试添加一个LinearLayout或一个DrawerLayout孩子,每个都给出了这个错误:
E/AndroidRuntime(11424): java.lang.IllegalArgumentException:
View android.widget.FrameLayout{420f5ea8 V.E..... ........
0,0-800,1172 #7f060038 app:id/menuPane} is not a drawer
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这些方法实际需要传递给他们的工作吗?
Gra*_*eme 19
答案是:
第二个孩子(又名"抽屉")是需要传递给方法的东西.我的问题是,当我想到这一点时,我将布局简化为尽可能简单的实现测试 - 我从"抽屉"中移除了引力.如果没有重力,您将获得上述完全不相关的错误消息.
我可以确认我使用以下设置获得了代码:
mMenuPanel.isDrawerOpen(findViewById(R.id.drawer));
Run Code Online (Sandbox Code Playgroud)
并与布局:
<android.support.v4.widget.DrawerLayout
android:id="@+id/mainmenuPanel"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/drawer"
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_gravity="start"/> <!-- This line was the problem!!!!!!!-->
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
Jos*_*hon 14
如果要避免引用视图或布局以调用isDrawerOpen,可以应用另一种方法.
在这种情况下,您必须指出重力:
mDrawerLayout.isDrawerOpen(Gravity.START);
Run Code Online (Sandbox Code Playgroud)
作为mDrawerLayout您DrawerLayout参考.
正如你所说,别忘了 android:layout_gravity="start"
| 归档时间: |
|
| 查看次数: |
9310 次 |
| 最近记录: |