Скользящее меню блокирует сенсорное событие на верхнем виде
Я пытаюсь использовать скользящее меню в моем приложении. На моем Sony 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);
}
В 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);
}
1 ответ
У меня была та же проблема с меню "Скольжение", работающим нормально на моем Samsung Galaxy S2 с ICS, но не на моем HTC Desire с Gingerbread.
Я использовал тот же метод, что и вы, чтобы реализовать скользящее меню, но обнаружил, что другая реализация решает проблему.
Вместо того, чтобы вручную прикреплять меню к вашей деятельности:
mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);
Я решил расширить свою активность одним из действий Sliding из библиотеки SlidingMenu. В моем случае моя активность расширялась FragmentActivity
сначала, но я заменил его SlidingFragmentActivity
Затем вы должны установить BackView внутри onCreate
метод или ваша деятельность потерпит крах.
setBehindContentView(R.layout.slidingmenu); //Replace with the layout of your menu
Это должно решить проблему.
Вот пример кода моей активности:
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). Во-первых, вы должны убедиться, что ссылка на ABS есть в библиотеке SlidingMenu. Таким образом, вы сможете расширить классы действий, предоставляемые SlidingMenu ABS.
Пример, если я хочу использовать FragmentActivity как с ABS, так и со скользящим меню: вам нужно изменить в библиотеке скользящего меню
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