3

亲爱的,

我是 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. 在我的应用程序中,我扩展了我的主要活动以使用SlidingActivitypublic 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);

我不想要第四个屏幕,我做错了什么?

问候,阿里·阿拉斯瓦德

4

3 回答 3

1

更改此行

public class MainMenu extends SlidingActivity {

到这条线

public class MainMenu extends Activity {

SlidingActivity 将带有“setBehindContentView”的行为编号 4 扩展到正常的 android“Activity”,因此将其更改回 android“Activity”将消除不需要的行为

于 2013-09-10T08:26:23.027 回答
0

这是一个 Android 库,可让您轻松创建带有滑入式菜单的应用程序。您可以在您的 Android 应用程序中使用它,前提是您引用此项目并将许可证包含在您的应用程序中。谢谢!

https://github.com/jfeinstein10/SlidingMenu

于 2013-09-09T14:09:09.597 回答
0
setBehindContentView(R.layout.activity_main_menu);

这会设置主菜单的布局(向左滑动时会发生什么),因此您应该将其更改为使用R.layout.sliding_menu_frame和删除setMenu(R.layout.sliding_menu_frame)

我不确定为什么调用setMenu不会覆盖它,但它似乎没有这样做。

于 2013-09-09T14:04:28.623 回答