我目前正在努力按照我想要的方式设计我的应用程序。 在我的应用程序中,我使用的是NavigationDrawer和不同的片段。通过单击NavigationDrawer中的项目,我将换出当前活动的片段。 有一个主要片段显示地图,但不显示工具栏。当我切换到另一个片段时,我想显示我的工具栏并让用户与之交互。 现在,当我显示工具栏时,我必须将NavigationDrawer的上边距设置为工具栏的大小,这样它就不会重叠。
当我显示工具栏时,我设置了NavigationDrawer列表视图的边距,如下所示:
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mDrawerListView.getLayoutParams();
params.setMargins(0, drawerMarginTop, 0, 0);
mDrawerListView.setLayoutParams(params);
mDrawerListView.requestLayout();
结果就像我期望的完全相反。看起来边距应用于视图的底部。
截图:
让我烦恼的另一件事是工具栏的切换箭头没有正确居中。它比应有的高一点,因此它与顶部的系统栏重叠,并且不会填充工具栏的整个大小。我试图在下面的图片中说明这一点:
如果您需要任何xml或代码,请告诉我,我将编辑我的问题。
提前谢谢!
编辑1 + 2:
我的工具栏样式:
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar_navigation"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/my_color"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
</android.support.v7.widget.Toolbar>
编辑3:
现在修复了切换箭头未居中的问题。感谢Alchete。
不幸的是,NavigationDrawer仍然是错误的。我发现如果我多次打开和关闭NavigationDrawer它会以某种方式改变其布局并且边距设置正确...有没有办法强制立即发生这个顶部?
经过多次打开和关闭抽屉后,它看起来像这样:(正是我希望它看起来像)
必须有办法立即强迫这个,对吧?
答案 0 :(得分:1)
您的对齐问题很可能是由于您的工具栏高度造成的。您应该按如下方式设置工具栏高度:
<android.support.v7.widget.Toolbar
android:layout_height="?attr/actionBarSize">
以下是相同的问题供参考:android.support.v7.widget.Toolbar icon alignment issue
我也会使用Google的IOSched应用程序来参考如何正确设置这些项目。您可以在Github上找到所有代码。
这是他们的布局文件。向下滚动以查看其工具栏/导航器布局:https://github.com/google/iosched/tree/dfaf8b83ad1b3e7c8d1af0b08d59caf4223e0b95/android/src/main/res/layout
而且,还要注意Google的参考设计是使用navdrawer覆盖工具栏 - 这不是你拥有它的方式。并且,右边距应该等于工具栏高度。
见这里:http://www.google.com/design/spec/patterns/navigation-drawer.html
答案 1 :(得分:0)
我不是100%关于这个,但看起来你将ViewGroup布局参数设置为MarginLayoutParams类型。相反,将边距设置为“普通”根ViewGroup类型,例如RelativeLayout并将其传递给View:
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT);
params.setMargins(0, drawerMarginTop, 0, 0);
mDrawerListView.setLayoutParams(params);
mDrawerListView.requestLayout();
您可能希望根据您的xml将MATCH_PARENT更改为WRAP_CONTENT。