Странное поведение при реализации скользящего меню LEFT_RIGHT

Уважаемые,

Я новичок в Android и пытаюсь использовать SlidingMenu в своем проекте. Я хочу создать приложение с двумя скользящими меню, как в Facebook.

С помощью этих шагов я создал свое приложение:

  1. Загрузите и добавьте библиотеку SlidingMenu в мое рабочее пространство.
  2. Загрузите и добавьте библиотеку actionbarsherlock в мою рабочую область.
  3. В библиотеку SlidingMenu я добавляю actionbarsherlock в качестве справочной библиотеки.
  4. В библиотеке SlidingMenu я расширяю SlidingActivity.java с помощью actionbarsherlock: public class SlidingActivity extends SherlockActivity implements SlidingActivityBase
  5. В своем приложении я добавляю ссылку на библиотеку SlidingMenu.
  6. В моем приложении я расширяю свою основную деятельность, чтобы использовать SlidingActivity: public class MainMenu extends SlidingActivity

Код моей основной деятельности:

import android.app.ActionBar;
import android.os.Bundle;
import android.view.KeyEvent;

import com.actionbarsherlock.view.MenuInflater;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivity;

public class MainMenu extends SlidingActivity {
    SlidingMenu  menu;

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

        if (enableHomeIconActionBack() || enableHomeIconActionSlidingMenu()) {
            ActionBar actionBar = getActionBar();
            if (actionBar != null){
                actionBar.setDisplayHomeAsUpEnabled(true);
            }
        }

        setContentView(R.layout.activity_main_menu);
        setBehindContentView(R.layout.activity_main_menu);

        menu = new SlidingMenu(this);
        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        menu.setMode(SlidingMenu.LEFT_RIGHT);
        menu.setShadowWidthRes(R.dimen.sliding_menu_shadow_width);
        menu.setShadowDrawable(R.drawable.shadow);
        menu.setBehindOffsetRes(R.dimen.sliding_menu_offset);
        menu.setFadeDegree(0.35f);
        menu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW);
        menu.setMenu(R.layout.sliding_menu_frame);

        menu.setSecondaryMenu(R.layout.vehicles_tree);
        menu.setSecondaryShadowDrawable(R.drawable.shadow);
    }


    @Override
    public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        MenuInflater inflater = getSupportMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            if (enableHomeIconActionSlidingMenu()
                    && menu != null) {
                menu.toggle();
            } else if (enableHomeIconActionBack()) {
                onCustomBackPressed();
            }
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }   

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_BACK:
            onCustomBackPressed();
            return true;
        default:
            return super.onKeyDown(keyCode, event);
        }
    }

    // If sliding menu is showing, we need to hide it on the first back button
    // press.
    private void onCustomBackPressed() {
        if (menu != null
                && menu.isMenuShowing()) {
            menu.toggle();
        } else {
            this.onBackPressed();
        }
    }

    /**
     * Sets activity home icon to have up icon and on press act as device back
     * button press.
     * 
     * @return Activation state.
     */
    public boolean enableHomeIconActionBack() {
        return true;
    }

    /**
     * Sets activity home icon to be as a sliding menu invoke icon and on press
     * call toggle command for the sliding menu.
     * 
     * @return Activation state.
     */
    public boolean enableHomeIconActionSlidingMenu() {
        return true;
    }   
}

Теперь menu.setMenu(R.layout.sliding_menu_frame); покажет:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFF00FF" >
</RelativeLayout>

И menu.setSecondaryMenu(R.layout.vehicles_tree); покажет:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:background="#FF0F00FF">
</RelativeLayout>

Следующие снимки описывают странное поведение:

Нажмите, чтобы открыть изображение

  1. Основная деятельность.
  2. Когда вы проводите вправо по экрану.
  3. Когда вы проводите влево по экрану.
  4. Когда вы проводите вправо от левого края экрана. Это действие охватывает весь экран и показывает действие, прикрепленное к setBehindContentView(R.layout.activity_main_menu);, я заметил это, изменив прикрепленный макет.

Я не хочу четвертый экран, что я делаю не так?

С уважением, Али Аласвад


person alawibh    schedule 09.09.2013    source источник


Ответы (3)


Изменить эту строку

public class MainMenu extends SlidingActivity {

к этой линии

public class MainMenu extends Activity {

SlidingActivity расширяет поведение номер 4 с помощью «setBehindContentView» до обычного Android «Activity», поэтому изменение его обратно на Android «Activity» удалит это нежелательное поведение.

person Captain overflow    schedule 10.09.2013
comment
Переполнение @captain у меня не работает, когда я изменил SlidingActivity на Activity, действие не распознает метод setBehindContentView - person Lalit Sharma; 21.10.2013
comment
@Lalit Google выпустил DrawerLayout: developer.android.com/reference/ android/support/v4/widget/ Я предпочитаю использовать официальные инструменты, когда они появляются, поэтому я бы перешел на них. Если вы все еще хотите использовать библиотеку SlidingMenu: setBehindContentView является частью SlidingActivity, поэтому он не будет работать в Activity. Вместо этого вы получаете меню из setMenu, а другое из setSecondaryMenu. - person Captain overflow; 11.11.2013

setBehindContentView(R.layout.activity_main_menu);

Это устанавливает макет основного меню (что происходит, когда вы проводите пальцем влево), поэтому вы должны изменить это, чтобы использовать R.layout.sliding_menu_frame и удалить setMenu(R.layout.sliding_menu_frame)

Я не уверен, почему вызов setMenu не перезаписывает это, но, похоже, это не так.

person Tushar    schedule 09.09.2013

Вот библиотека для Android, которая позволяет легко создавать приложения с выдвижными меню. Вы можете использовать его в своих приложениях для Android при условии, что вы процитируете этот проект и включите лицензию в свое приложение. Спасибо!

https://github.com/jfeinstein10/SlidingMenu

person suraj jain    schedule 09.09.2013