2016-07-18 23 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

謝謝布萊恩。將爲未來記住這一點。 –