2013-11-25 76 views
4

我工作的公司有一個iOS應用程序,它有兩個滑動菜單:一個用於導航,另一個用於顯示應用程序的上下文信息和操作。 iOS應用程序具有一個ActionBar類似的小部件,當顯示任一菜單(意味着它被隱藏)時,該部件與主內容窗格一起滑動。由於使用導航抽屜的已發佈guidelines,我們正在考慮更新Android版本中的用戶界面以符合(儘可能接近)。考慮到這一點,我的UI設計師已經要求提供一些可以放在用戶面前獲得反饋的演示。她被要求提供三個樣本:兩個菜單Android應用

  1. 一個在頂部有一個靜止的動作條。這兩個菜單都會覆蓋主內容窗格,而不是操作欄。這將遵循已發佈的指導原則。

    enter image description here

  2. 一個像目前的Facebook應用程序的功能。 ActionBar(或等價物)被認爲是主要內容窗格的一部分,當任何一個抽屜被打開時將被覆蓋/滑走。

    enter image description here enter image description here

  3. 一個是前兩個的混合:左側導航菜單應操作欄下滑出(以下準則)。右側抽屜會滑出操作欄。這種情況與當前的Evernote應用類似。

    enter image description here enter image description here

到目前爲止,我一直在擺弄SlidingMenu,有一個功能演示爲#1和#2。根據我讀到的here,我應該可以使用官方的Android navigation drawer完成#1。但是,我還沒有能夠爲演示#3獲得任何工作。它看起來不像DrawerLayout可以在ActionBar的頂部工作,所以它沒有了。

是否有可能使用兩個抽屜(使用SlidingMenu):一個與ActionBar一起工作而另一個沒有?如果不是,那麼有沒有其他解決方案可以工作,還是需要考慮滾動我自己的解決方案?

回答

1

所以事實證明,這是可能的使用SlidingMenu。基本上我結束了創建兩個SliderMenu對象:

public class SlidingMenuEvernoteActivity extends SlidingFragmentActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.sliding_menu_main); 
    setBehindContentView(R.layout.sliding_menu_red); 
    setSlidingActionBarEnabled(false); 

    SlidingMenu leftMenu = getSlidingMenu(); 
    leftMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); 
    leftMenu.setMode(SlidingMenu.LEFT); 
    getSupportFragmentManager() 
      .beginTransaction() 
      .replace(R.id.sliding_menu_main, new ListFragment()) 
      .commit(); 

    SlidingMenu rightMenu = new SlidingMenu(this); 
    rightMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); 
    rightMenu.setMode(SlidingMenu.RIGHT); 
    rightMenu.setMenu(R.layout.sliding_menu_blue); 
    rightMenu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW); 
    getSupportFragmentManager() 
      .beginTransaction() 
      .replace(R.id.sliding_menu_blue, new ListFragment()) 
      .commit(); 
    } 
} 

注:由於活動延伸SlidingFragmentActivity,沒有必要創建兩個SlidingMenu手動對象。第一個是在回調中自動創建的。

這裏是相關佈局文件:

* sliding_menu_main.xml *

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:clickable="true" 
    android:id="@+id/sliding_menu_main"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello World!" 
     android:id="@+id/textView" 
     android:layout_gravity="center" /> 
</FrameLayout> 

* sliding_menu_red.xml *

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/sliding_menu_red" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#ff001c"> 

</LinearLayout> 

* sliding_menu_blue.xml *

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/sliding_menu_blue" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#0028ff"> 

</LinearLayout> 
3

在我進入我的答案,我只想澄清不同類型的抽屜我們這裏

選項1是標準Navigation Drawer其中的內容所帶來的主要佈局

選項2的頂部第三方導航抽屜Sliding Menu它複製正是Facebook的應用程序確實,有很多的選擇,以定製

方案3是SlidingPaneLayout與看起來是一個自制從android導航抽屜僞造右導航抽屜裏。您可以告訴滑動窗格佈局,因爲您可以在內容中的任意位置滑動,並且該窗格將移動到通常必須從屏幕邊緣滑動才能移動的位置。

它可以使用2個抽屜來獲得#3的效果,我會做的是使用SlidingPaneLayout,然後導入Sliding Menu庫並使用它只有得到正確的菜單,這樣你有你的動作欄移動時你打開右側抽屜。它可能並不完全是你想要的,而是它在操作欄上的位置。

+0

有趣。我沒有考慮使用SlidingPaneLayout。感謝您的建議 – kierse