Zak*_*man 9 android menu slidingdrawer android-viewpager
我正在尝试在我的应用程序中使用滑动菜单.在我的索尼Xperia S上它工作得非常好,但当我尝试在HTC Desire HD上启动应用程序时,菜单打开完美的手势,但其他触摸事件被阻止,顶视图(ViewPager滑动菜单在它后面)不滚动.
有人知道如何解决这个问题吗?
提供答案可能会有所帮助(这就是我使用菜单的方式):
private void initSlidingMenu()
{
mSlidingMenu = new SlidingMenu(getApplicationContext());
mSlidingMenu.setMode(SlidingMenu.LEFT);
mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
mSlidingMenu.setShadowWidthRes(R.dimen.default_shadow_width);
mSlidingMenu.setShadowDrawable(R.drawable.defaultshadow);
mSlidingMenu.setBehindOffsetRes(R.dimen.default_behind_offset);
mSlidingMenu.setFadeDegree(0.35f);
mSlidingMenu.setMenu(firstPage);
mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);
}
Run Code Online (Sandbox Code Playgroud)
在onPageSelected(),我禁用菜单或启用它,所以菜单只出现在左页:
@Override public void onPageSelected(int arg0)
{
ActivityCompat.invalidateOptionsMenu(this);
if (arg0 == Utils.DEFAULT_PAGE)
mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
else
mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);
}
Run Code Online (Sandbox Code Playgroud)
我刚刚在运行ICS的三星Galaxy S2上运行Sliding菜单时出现了同样的问题,但在运行Gingerbread的HTC Desire上没有.
我使用与您相同的方法来实现滑动菜单,但我发现另一个实现解决了这个问题.
而不是手动将菜单附加到您的活动:
mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);
Run Code Online (Sandbox Code Playgroud)
我选择通过SlidingMenu库中的一个Sliding活动扩展我的Activity.在我的情况下,我的活动最初是扩展FragmentActivity,但我替换它SlidingFragmentActivity
然后你应该在onCreate方法中设置behindView,否则你的活动就会崩溃.
setBehindContentView(R.layout.slidingmenu); //Replace with the layout of your menu
Run Code Online (Sandbox Code Playgroud)
它应该解决问题.
以下是我的活动的示例代码:
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);
Run Code Online (Sandbox Code Playgroud)
您将注意到,使用此解决方案,您无需致电
mSlidingMenu.setMenu(firstPage);
mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);
Run Code Online (Sandbox Code Playgroud)
我没有分析SlidingMenu库的所有源代码,但是attachToActivity在某些情况下当前的方法可能有错误,如果我们使用库提供的特殊活动,则不会出现这些错误.
编辑:对于那些使用SlidingMenu库和ActionBarSherlock(ABS)的人来说很好.首先,您必须确保在SlidingMenu lib中引用了ABS.这样,您就可以通过ABS扩展SlidingMenu提供的活动类.
例如,如果我想将FragmentActivity与ABS和Sliding菜单一起使用:您必须在滑动菜单库中进行更改
class SlidingFragmentActivity extends FragmentActivity implements SlidingActivityBase
Run Code Online (Sandbox Code Playgroud)
通过
class SlidingFragmentActivity extends SherlockFragmentActivity implements SlidingActivityBase
Run Code Online (Sandbox Code Playgroud)
然后在您的应用程序中,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9554 次 |
| 最近记录: |