2013-02-23 71 views
1

我真的需要將這種類型的抽屜合併到我的android應用程序中。使用SimonVT的android-menudrawer在活動中添加滑動菜單

Feinstein滑動菜單抽屜庫令人困惑,並導致大量的錯誤,我無法修復 - 尤其是即使在android支持庫被取出時jar錯誤。所以,我切換到SimonVT的android滑動抽屜庫看起來更簡單(鏈接here)。

我只需要一個知道如何處理這些類型的滑動抽屜的人給我說明如何將滑動菜單合併到我的應用程序中。我已經廣泛研究過提供的樣品,它仍然讓我感到困惑。我對android編程很陌生,所以請放輕鬆。謝謝!

+0

有關於如何在README使用實例。你有什麼樣的問題無法解決? – 2013-02-23 12:00:45

+0

與這些問題是,當我跟着他們,我創建佈局文件,出於某種原因菜單只是不滑動。我的應用程序編譯,但它只停留在主要活動。無論我嘗試打開菜單的方式,它都拒絕打開。創建者(SimonVT)將所有示例放入示例應用程序中。如果您運行示例應用程序,然後查看代碼,則不僅僅是將自己放入自述文件中的三條線放在一起。我只需要導入他的一個庫來添加功能? – ThatGuyThere 2013-02-23 18:55:09

+0

就目前來看,這還不夠信息。可以添加一些代碼和StackTrace/LogCat或直接聯繫作者。 – 2013-02-24 11:11:27

回答

5

我想你還沒有重寫一些方法... 我在我的項目中也包含了SimonVT的MenuDrawer(這裏是com.example.testapp)。我會張貼我的代碼,它傾向於WindowSample,希望它有幫助。 檢查是否已將庫添加到項目中(在eclipse中:project-> proberties-> android-> add ...在此之前,庫必須位於您的工作區中)首先從示例App中獲取MenuScrollView幷包含它到你的procject來源。

<?xml version="1.0" encoding="utf-8"?> 
<com.example.testapp.MenuScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/scrollView" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<LinearLayout 
    android:id="@+id/sidebar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 
</LinearLayout> 

然後創建類,例如:然後邊欄這樣創建一個佈局命名NavigationManager:

package com.example.testapp; 

import net.simonvt.menudrawer.MenuDrawer; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.content.Context; 
import android.os.Build; 
import android.os.Bundle; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class NavigationManager extends Activity implements View.OnClickListener { 
private static final String STATE_MENUDRAWER = "de.example.testapp.NavigationManager.menuDrawer"; 
private static final String STATE_ACTIVE_VIEW_ID = "de.example.testapp.NavigationManager.activeViewId"; 

private MenuDrawer menuDrawer; 
private int activeNavigationItemID; 
private Context context; 
private Activity activity; 

@SuppressLint("NewApi") 
public void set(int contentView) { 
    activity = this; 
    context = this; 

    menuDrawer = MenuDrawer.attach(activity, MenuDrawer.MENU_DRAG_WINDOW); 
    menuDrawer.setContentView(contentView); 
    menuDrawer.setMenuView(R.layout.sidebar); 

    // add Items to Sidebar, like you want!!!! 
    LinearLayout sidebar = (LinearLayout) findViewById(R.id.sidebar); 
    for (int i = 1; i <= 5; i++) { 
     TextView tv = new TextView(context); 
     tv.setText("Item: " + i); 
     tv.setId(i); 
     tv.setOnClickListener(this); 
     sidebar.addView(tv); 
    } 

    MenuScrollView msv = (MenuScrollView) menuDrawer.getMenuView(); 
    msv.setOnScrollChangedListener(new MenuScrollView.OnScrollChangedListener() { 
     @Override 
     public void onScrollChanged() { 
      menuDrawer.invalidate(); 
     } 
    }); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH 
      && getActionBar() != null) { 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
    } 

    TextView activeView = (TextView) findViewById(activeNavigationItemID); 
    if (activeView != null) { 
     menuDrawer.setActiveView(activeView); 
     // mContentTextView.setText("Active item: " + activeView.getText()); 
    } 

} 


@Override 
protected void onRestoreInstanceState(Bundle inState) { 
    super.onRestoreInstanceState(inState); 
    menuDrawer.restoreState(inState.getParcelable(STATE_MENUDRAWER)); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putParcelable(STATE_MENUDRAWER, menuDrawer.saveState()); 
    outState.putInt(STATE_ACTIVE_VIEW_ID, activeNavigationItemID); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     menuDrawer.toggleMenu(); 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

@Override 
public void onBackPressed() { 
    final int drawerState = menuDrawer.getDrawerState(); 
    if (drawerState == MenuDrawer.STATE_OPEN 
      || drawerState == MenuDrawer.STATE_OPENING) { 
     menuDrawer.closeMenu(); 
     return; 
    } 

    super.onBackPressed(); 
} 

@Override 
public void onClick(View v) { 
    // Do something!!!! 

    menuDrawer.setActiveView(v); 
    menuDrawer.closeMenu(); 
    activeNavigationItemID = v.getId(); 
} 

} 

您必須添加標線在你的項目和邏輯,點擊之後發生了什麼,(標有!!!!)。所有你必須在你的Acitivities現在要做的就是讓他們延長NavigationManager並調用設置方法是這樣的:

package com.example.testapp; 

import android.os.Bundle; 

public class MainActivity extends NavigationManager { 

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

    set(R.layout.activity_main); 
} 
} 

希望它能幫助:)