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

Я хочу создать двухуровневое скользящее меню в 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);

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


person venkat    schedule 31.01.2013    source источник
comment
ты смог это решить. не могли бы вы поделиться, как вы решили свою проблему? вот мой вопрос относительно той же проблемы: stackoverflow .com/questions/15242825/   -  person suresh cheemalamudi    schedule 06.03.2013
comment
@sureshcheemalamudi: я не смог это решить. Я использовал только одноуровневое скользящее меню. Если вам удастся решить. Пожалуйста, поместите ответ здесь.   -  person venkat    schedule 07.03.2013


Ответы (5)


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

person Community    schedule 03.04.2013
comment
Таким образом, у меня было бы меню справа и слева, верно? Это не идея иметь двухслойное меню - извините. - person Trinimon; 03.04.2013
comment
да. Но других вариантов для этого я не нашел. Несмотря на то, что в библиотеке есть опция setSecondaryMenu, я не смог найти способ ее реализовать :( - person ; 04.04.2013
comment
Спасибо за ваш пост в любом случае! - person Trinimon; 04.04.2013

Попробуйте с этим:

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);
person Rafael Ríos    schedule 31.01.2013
comment
Я хочу, чтобы вторичное меню было справа от моего 1-го меню. Но я получаю вторичное меню поверх 1-го меню и скрываю его вид. - person venkat; 01.02.2013
comment
не могли бы вы помочь мне решить вышеуказанную проблему? - person venkat; 03.02.2013
comment
Вы должны использовать SlidingMenu в качестве представления, проверить документацию и изменить свои макеты на поместите несколько SlidingMenus там, где вам нужно. - person Rafael Ríos; 03.02.2013
comment
Я совершенно новичок в Android. Если бы вы разработали скользящее меню с подменю внутри, не могли бы вы поделиться кодом для этого? - person venkat; 04.02.2013
comment
Я разработал SlidingMenu с подменю, используя ПРАВОЕ меню, но очень легко использовать SlidingMenu как представление. Вы должны создать новый макет с определением SlidingMenu и позаботиться о параметрах sliding:viewAbove="@layout/YOUR_ABOVE_VIEW" sliding:viewBehind="@layout/YOUR_BEHIND_BEHIND" . ViewAdove должен быть вашим фактическим меню, а viewBehind subnemu. Для использования скользящего меню необходимо знать несколько концепций Android (фрагменты, представление,...), см. Документация по Android - person Rafael Ríos; 04.02.2013
comment
Возможно, вы можете использовать этот androidviews.net/2012/12/slide-expandable- listview для реализации вторичного меню. - person Rafael Ríos; 15.02.2013

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

Этот макет содержит скользящее меню верхнего уровня, которое ссылается на макет меню (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"
    />

Это будет меню второго уровня (sliding_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();

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

person mdelolmo    schedule 24.07.2013

Скользящее меню JFeinstein представляет собой богатую библиотеку. Вы можете легко добавить столько уровней меню, сколько пожелаете. Идея состоит в том, чтобы использовать скользящее меню как левое или правое скользящее представление главного скользящего меню и так далее. Вот отдельный пример, который обеспечивает 2-х уровневое меню. Что вам нужно, так это импортировать скользящее меню 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

    }
}

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

введите здесь описание изображения

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

person Adnan    schedule 25.02.2014

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

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

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

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

person CoffeeRoll    schedule 11.06.2015