2016-07-18 25 views
0

在我的仪表板应用程序中,有一个应用程序栏,如下图所示。在片段视图中附加额外的工具栏

enter image description here

正如图所示,我有一个工具栏,目前显示导航抽屉。

从导航抽屉中,我可以导航到片段A,替换工具栏下的TAB区域,如下图所示。

enter image description here

有什么办法,我可以添加两个工具栏这样的地方,我可以告诉一起片段内的导航抽屉图标和后退按钮?

+0

根据你的更新,它看起来像你找到了一种方法来实现你的要求。你只是要求一个*不同的方式来实现同样的事情吗?如果是这样,为什么你目前的实施不足够? – Bryan

+0

我肯定找到了一种方法来实现这个问题,我在想如果有一个最好的实现上述,因为我发布的解决方案更多的是我想的解决方法.. –

回答

0

没有达到你在找什么没有最佳方式,考虑到它会对Android Design Guidelines。虽然没有明确说明,但抽屉式图标和后退按钮图标不会一起显示。

这个设计背后的理论是导航应该是直观和可预测的,两个导航图标相邻显示会损害直观的用户界面。 返回按钮应显示如果有什么要去返回到。虽然,持久导航的需求可以通过两种不同的方式解决。以Google的Gmail应用为例。

默认情况下,NavigationView支持使用屏幕左边缘的轻扫作为手势打开导航抽屉。在Gmail应用程序中,当您位于任何一个收件箱中时,会显示导航抽屉图标。只要选择一条消息,导航抽屉图标就会被替换为返回按钮。但是,您会注意到您仍然可以使用之前所述的手势访问抽屉。

Gmail w/ Drawer Icon Gmail w/ Back Button

在更大屏幕上,Gmail应用支持微型导航抽屉。该抽屉可以保持在视图中而不需要显示导航图标。尽管使用当前的支持库实现起来要困难一点,但如果您期待,this answer可能会有所帮助。

Gmail w/ Persistant Drawer

最后,要回答你的问题,还有就是显示一个后退按钮和抽屉式导航图标一起没有内置的方式。如果您需要这样做,唯一的方法就是像现在一样使用“解决方法”。

虽然,我可能会做的唯一的变化是使用ImageButton而非ImageView。然后,您可以使用style="?android:attr/actionButtonStyle"来设置按钮的样式,以模仿ActionBar按钮的外观。

+0

谢谢布赖恩,为了拉出一些时间,并帮助我解决这个问题。我已经将ImageView替换为ImageButton,这绝对看起来不错。干杯! –

-2

只是为了更新,暂时实现上述我所做的是。

我添加了一个布局,我的片段文件,其中我画一个自定义后退按钮这样的:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/colorPrimaryDark20" 
    android:orientation="horizontal" 
    android:padding="15dp" 
    android:weightSum="3"> 
    <ImageView 
     android:id="@+id/backButton" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="left" 
     android:layout_weight="0.2" 
     android:src="@drawable/delete_icon" /> 
</LinearLayout> 

当一个人点击backImage,我打电话popBackStack

imageView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getFragmentManager().popBackStack(); 
     } 
    }); 

上面的代码给了我所需的功能。

注意,对于上面的工作,你需要确保你所添加的fragmentTransaction到堆栈中,如下

final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
transaction.replace(R.id.home_content_layout,NAME_OFYOUR_FRAGMENT,"nameOfYourFragment"); 
transaction.addToBackStack(null); 
transaction.commit(); 
+1

您可以随时更新您的问题(点击[*编辑*](http://stackoverflow.com/posts/38436040/edit)),这不属于答案。 – Bryan

+0

谢谢布莱恩。将为未来记住这一点。 –