Как реализовать двухуровневое slidemenu в Android с помощью jfeinstein10/SlidingMenu?

Я хочу создать 2-уровневое раздвижное меню в Android. Когда я нажимаю первый скользящий элемент меню  Мне нужно показать другое скользящее меню слева. Я создал скользящее меню первого уровня, используя следующий код.

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

    <ListView    
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="@dimen/list_padding"
        android:paddingRight="@dimen/list_padding" />

</FrameLayout> 

Часть кода

SlidingMenu menu;
menu = new SlidingMenu(this);
menu.setMode(SlidingMenu.LEFT);
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
menu.setShadowWidth(10);
menu.setFadeDegree(0.0f);
menu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW);
menu.setBehindWidth(200);
menu.setMenu(R.layout.menu_frame);

Как перейти к созданию скользящего меню второго уровня?

Ответ 1

Мы можем достичь SlideMenu, используя TranslateAnimation в android. Создайте frameLayout в XML и на странице MainXML, а затем MainSlidingMenu. Примыкающие к MainSlidingMenu имеют вторичную скользящую Менью. По умолчанию функции MainSlidingMenu и Secondary SlidingMenu невидимы. Если щелчок на кнопке или любое событие, ожидающее события, показывает Main SlidingMenu, тогда, если в MainSlidingmenu есть щелчок/событие, переведите MainMenu дальше, чтобы показать дополнительное скользящее меню.

Ответ 2

Попробуйте следующее:

SlidingMenu menu;
menu = new SlidingMenu(this);
menu.setMode(SlidingMenu.LEFT_RIGHT);
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
menu.setShadowWidth(10);
menu.setFadeDegree(0.0f);
menu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW);
menu.setBehindWidth(200);
menu.setMenu(R.layout.menu_frame);
//Set the secondary menu
menu.setSecondaryMenu(R.layout.menu_frame);
menu.setSecondaryShadowDrawable(R.drawable.shadow);

Ответ 3

Вот как я получил его, используя указанную библиотеку:

Этот макет содержит скользящее меню верхнего уровня, которое ссылается на макет меню (fragment_nav_menu) и макет с ссылкой на макет подменю, как показано выше.

<com.jeremyfeinstein.slidingmenu.lib.SlidingMenu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:sliding="http://schemas.android.com/apk/res-auto"
    android:id="@+id/slidingMenuRoot"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    sliding:viewAbove="@layout/sliding_sub_menu"
    sliding:viewBehind="@layout/fragment_nav_menu"
    sliding:touchModeAbove="fullscreen"
    />

Это будет меню второго уровня (slide_sub_menu.xml), обратите внимание, что то, что вы установили как viewAbove здесь, будет фактическим содержанием верхнего уровня.

<com.jeremyfeinstein.slidingmenu.lib.SlidingMenu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:sliding="http://schemas.android.com/apk/res-auto"
    android:id="@+id/slidingSubMenuRoot"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    sliding:viewAbove="@layout/fragment_content"
    sliding:viewBehind="@layout/fragment_sliding_menu"
    sliding:touchModeAbove="fullscreen"
/>

Макет содержимого (fragment_content.xml) может быть таким, простой FrameLayout, а затем программным путем вы добавите желаемый фрагмент.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainContentFrame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/app_background"
    />

Аналогично, содержимое скользящего подменю определяется в файле макета (fragment_sliding_menu.xml) и используется программно для объявления экземпляра фрагмента.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainContentFrame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/app_background"
    />

Чтобы добавить фрагмент к этим FrameLayouts, используйте что-то вроде этого (возможно, также удалите потенциальный предыдущий фрагмент перед добавлением нового):

    FragmentTransaction fragTrans = getSupportFragmentManager().beginTransaction();
    fragTrans.add(R.id.slidingSubMenuFrame, SubMenuFragment.newInstance(this));
    fragTrans.commit();

Я еще не тестировал его, но, похоже, работает. Конечно, необходима дальнейшая логика для реализации желаемого поведения меню (закрытый слушатель, выбор элементов и т.д.).

Ответ 4

Скользящее меню JFeinstein - это богатая библиотека. Вы можете легко добавить столько уровней меню, сколько пожелаете. Идея состоит в том, чтобы использовать скользящее меню в виде левого или правого скользящего вида основного скользящего меню и т.д. Вот отдельный пример, в котором предусмотрено меню с двумя уровнями. Вам нужно импортировать скользящее меню JFeinstein в качестве библиотеки и расширить свою активность от SlidingFragmentActivity. Я добавляю полный код операции с комментариями, чтобы сделать вещи более ясными.

 public class MainActivity extends SlidingFragmentActivity {

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

        // dummy views - content view
        TextView content = new TextView(this);
        content.setBackgroundColor(Color.WHITE);
        content.setText("content");
       // Menu view
        TextView menu = new TextView(this);
        menu.setBackgroundColor(Color.GREEN);
        menu.setText("menu");
        // 2nd level menu view
        TextView subMenu = new TextView(this);
        subMenu.setBackgroundColor(Color.LTGRAY);
        subMenu.setText("submenu");


        //configure sliding menu
        SlidingMenu sm = getSlidingMenu();
        sm.setMode(SlidingMenu.SLIDING_WINDOW);
        sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        sm.setBehindOffset(80);
        sm.setBehindScrollScale(0.25f);
        sm.setFadeDegree(0.25f);

        //Another sliding menu - for 2nd level or sub menu 
        SlidingMenu leftSlidingView = new SlidingMenu(this);
        leftSlidingView.setMode(SlidingMenu.SLIDING_WINDOW);
        leftSlidingView.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        leftSlidingView.setBehindOffset(80);
        leftSlidingView.setBehindScrollScale(0.25f);
        leftSlidingView.setFadeDegree(0.25f);

    //==== Required instruments has been created ;) lets put them at right places   

        // setting menu and sub-menu view 
        leftSlidingView.setContent(menu);  // at center of left sliding view
        leftSlidingView.setMenu(subMenu);  // at left of left sliding view

        //set content view
        setContentView(content);           // at center of main sliding view
        // finally, set  leftSlidingView as behind content  view of main view
        setBehindContentView(leftSlidingView); // at left of main sliding view

    }
}

Вот результат:

enter image description here

Надеюсь, что это поможет:)

Ответ 5

Я понял, это так просто.

menu.setMenu(R.layout.layout_filemenu);
menu.setSecondaryMenu(R.layout.layout_main);
menu.setMode(SlidingMenu.LEFT_RIGHT);

setMenu → Левая сторона SetSecondaryMenu → Правая сторона

Надеюсь, что это поможет