10

在我們的應用中,我們有幾個片段可以顯示爲全屏片段或作爲對話框片段。這些片段繼承自DialogFragment,我們確保根據應用程序的執行模式(全屏或對話框)正確實例化它們。DialogFragment中的工具欄

在帶有棒棒糖的支持庫中引入了Toolbar小部件中的最新更改之後,我們考慮爲這些對話框片段中的某些添加一些額外的功能。這個想法是讓我們在DialogFragment的子類中通常存在的普通片段中的選項菜單類型(即執行onCreateOptionsMenu之後的選項菜單充氣),只有當這些選項菜單可視化爲對話框時。簡而言之,當片段以全屏模式顯示時,我們會誇大傳統的選項菜單,當片段顯示爲對話框時,我們希望使用相同的選項菜單,但在獨立模式下使用新的工具欄小部件。我按照http://android-developers.blogspot.dk/2014/10/appcompat-v21-material-design-for-pre.html的步驟,我設法「激活」工具欄,但似乎菜單沒有膨脹 - 見附件截圖(圖片在全屏模式下的片段,圖片2在對話模式下)。

甚至可以使用DialogFragment中的新工具欄充氣選項菜單嗎?

fullscreen modedialog mode

+1

工具欄是不是想成爲一個對話框,它想成爲你的一部分r活動佈局。這是一個非常令人困惑的界面,你想擁有 – tyczj

回答

20

它甚至有可能膨脹的選項菜單中的新工具欄 是一個DialogFragment?

首先你的設計是確定和工具欄應該使用的每一個地方讓有來自克里斯·巴內斯谷歌工程師link看看這個:

// Set an OnMenuItemClickListener to handle menu item clicks 
toolbar.setOnMenuItemClickListener(
     new Toolbar.OnMenuItemClickListener() { 
      @Override 
      public boolean onMenuItemClick(MenuItem item) { 
       // Handle the menu item 
       return true; 
      } 
}); 

// Inflate a menu to be displayed in the toolbar 
toolbar.inflateMenu(R.menu.your_toolbar_menu); 

而且Android開發者工具條獨立示例:

http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

+0

謝謝。我可以做到100%的積極,因爲克里斯巴恩斯給他的帖子附加的圖片證明了這一點。我在第五次閱讀他的帖子後發現我的錯誤:-) –

+0

關於應用程序(可在此處找到:https://play.google.com/store/apps/details?id=com.google.samples.apps .iosched),以下是截圖:https://lh3.googleusercontent.com/Xwh9uUA-TvDYAFtadcPrR578GJGxbZu5Z2KuUv5U0v3QqzvQzpHR9nuDMUhMsPgVbS8=h900 –

4

是,DialogFragment具有setHasOptions()函數。在對話框的佈局中定義工具欄,並像在活動中一樣使用它。工具欄犯規記在某項活動或片段或對話片段是.......

確保您使用

setHasOptionsMenu(true) in onActivityCreated method.... 

然後,像往常一樣覆蓋

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu, inflater); 
    inflater.inflate(R.menu.my_menu, menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    return super.onOptionsItemSelected(item); 
} 
+0

如何在獨立模式下使用「工具欄」,如果我不連接它並膨脹菜單?您的解決方案僅覆蓋主機活動中指定的默認選項菜單。它不會使對話框片段有一個工具欄 –

+0

它確實....我用setActionBar(myToolbar) –

+0

這是行不通的。相反,它處理活動本身的工具欄。 –