我刚刚在运行 ICS 的三星 Galaxy S2 上正常运行滑动菜单时遇到了同样的问题,但在运行 Gingerbread 的 HTC Desire 上却没有。
我使用与您相同的方法来实现滑动菜单,但我发现另一种实现解决了问题。
而不是手动将菜单附加到您的活动:
mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);
我选择通过 SlidingMenu 库中的一项滑动活动来扩展我的活动。就我而言,我的 Activity 一开始是在扩展 FragmentActivity,但我将其替换为 SlidingFragmentActivity
那么你应该在 onCreate 方法中设置 behindView 否则你的 Activity 会崩溃。
setBehindContentView(R.layout.slidingmenu); //Replace with the layout of your menu
它应该可以解决问题。
这是我的 Activity 的示例代码:
public class MainActivity extends SlidingFragmentActivity {
SlidingMenu menu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Main view layout for the activity
setContentView(R.layout.activity_listing);
// set the Behind View : REQUIRED (replace with your menu's layout)
setBehindContentView(R.layout.slidingmenu);
menu = getSlidingMenu();
//Now you can customize your sliding menu if you want
menu.setMode(SlidingMenu.LEFT);
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
menu.setShadowWidthRes(R.dimen.shadow_width);
menu.setShadowDrawable(R.drawable.slidingmenu_shadow);
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
menu.setFadeDegree(0.35f);
您会注意到,使用此解决方案您不必调用
mSlidingMenu.setMenu(firstPage);
mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);
我还没有分析 SlidingMenu 库的所有源代码,但可能当前的attachToActivity 方法在某些情况下存在错误,如果我们使用库提供的特殊活动,这些错误不会出现。
编辑: 好的,适合使用 SlidingMenu 库和 ActionBarSherlock (ABS) 的人。
首先,您必须确保在 SlidingMenu 库中引用了 ABS。这样,您就可以通过 ABS 扩展 SlidingMenu 提供的活动类。
如果我想使用带有 ABS 和滑动菜单的 FragmentActivity 示例:
你必须在滑动菜单库中改变
class SlidingFragmentActivity extends FragmentActivity implements SlidingActivityBase
由
class SlidingFragmentActivity extends SherlockFragmentActivity implements SlidingActivityBase
然后在您的应用程序中,正常使用SlidingFragmentActivity。
这是我应用的代码,和我发布的一样,但支持 ABS:
public class MainActivity extends SlidingFragmentActivity {
ActionBar mActionBar;
SlidingMenu menu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listing); //Layout of the above view
/*
* ABS initialization
*/
mActionBar = getSupportActionBar();
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
mActionBar.setDisplayHomeAsUpEnabled(true);
/*
* Sliding menu initialization
*/
menu = getSlidingMenu();
menu.setMode(SlidingMenu.LEFT);
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
menu.setShadowWidthRes(R.dimen.shadow_width);
menu.setShadowDrawable(R.drawable.slidingmenu_shadow);
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
menu.setFadeDegree(0.35f);
/* This line initializes the way the sliding menu is working
if you set the boolean to true, the ActionBar will slide along with the content.
if you set to false, only the content will slide and the ActionBar will not move */
setSlidingActionBarEnabled(true);
// set the Behind View
setBehindContentView(R.layout.slidingmenu); //Menu view