2012-12-15 22 views
9

Tôi đang cố gắng sử dụng Sliding Menu trong đơn đăng ký của mình. Trên Sony Xperia S của tôi nó hoạt động rất tốt, nhưng khi tôi cố gắng khởi chạy ứng dụng trên HTC Desire HD, menu mở ra hoàn hảo bằng cử chỉ, nhưng các sự kiện cảm ứng khác bị chặn và xem trên cùng (ViewPager, menu trượt phía sau) không cuộn.Sự kiện chạm vào khóa menu trượt ở chế độ xem trên

Có ai biết cách sửa lỗi này không?

Có thể nó sẽ rất hữu ích để đưa ra một câu trả lời (Đây là cách tôi đang sử dụng trình đơn):

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);  
} 

Trong onPageSelected(), tôi vô hiệu hóa menu hoặc kích hoạt nó, vì vậy đơn chỉ xuất hiện ở trang bên trái:

@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); 
} 

Trả lời

9

Tôi vừa gặp sự cố tương tự với menu trượt hoạt động tốt trên Samsung Galaxy S2 đang chạy ICS nhưng không chạy trên HTC Desire đang chạy Gingerbread.

Tôi đã sử dụng cùng một phương pháp như bạn để triển khai menu trượt nhưng tôi thấy rằng một triển khai khác đã giải quyết được sự cố.

Thay vì bằng tay gắn menu để hoạt động của bạn:

mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT); 

tôi đã chọn để mở rộng Hoạt động của tôi theo một trong các hoạt động trượt từ thư viện SlidingMenu. Trong trường hợp của tôi, Hoạt động của tôi đã mở rộng FragmentActivity lúc đầu nhưng tôi đã thay thế nó bằng SlidingFragmentActivity

Sau đó, bạn nên đặt chế độ xem bên trong phương thức onCreate hoặc hoạt động của bạn sẽ bị lỗi.

setBehindContentView(R.layout.slidingmenu); //Replace with the layout of your menu 

Cần khắc phục sự cố.

Dưới đây là một số mẫu mã của Hoạt động của tôi:

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); 

Bạn sẽ lưu ý rằng với giải pháp này, bạn không cần phải gọi

mSlidingMenu.setMenu(firstPage); 
mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT); 

tôi đã không phân tích tất cả các mã nguồn của thư viện SlidingMenu nhưng có lẽ phương pháp attachToActivity hiện tại là lỗi trong một số trường hợp và các lỗi đó không xuất hiện nếu chúng tôi sử dụng các hoạt động đặc biệt do thư viện cung cấp.

EDIT: Ok cho những người đang làm việc với thư viện SlidingMenu AND ActionBarSherlock (ABS). Trước tiên, bạn phải đảm bảo rằng ABS được tham chiếu trong lib SlidingMenu. Bằng cách đó, bạn sẽ có thể mở rộng các lớp hoạt động do SlidingMenu cung cấp bởi các lớp ABS.

Ví dụ nếu tôi muốn sử dụng một FragmentActivity với cả ABS và menu trượt: bạn phải thay đổi trong menu thư viện trượt

class SlidingFragmentActivity extends FragmentActivity implements SlidingActivityBase 

bởi

class SlidingFragmentActivity extends SherlockFragmentActivity implements SlidingActivityBase 

Và sau đó trong bạn ứng dụng, sử dụng thông thường SlidingFragmentActivity.

Đây là mã của ứng dụng của tôi, nó giống như một trong tôi đăng nhưng với sự hỗ trợ 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 
+0

Ok, kéo dài từ ** SlidingActivity ** hoạt động hoàn hảo, nhưng có một điều tôi can' phải làm: trang trình bày thanh tác vụ với nội dung. Làm thế nào để đính kèm nó vào menu? Tôi không tìm thấy bất kỳ phương thức nào (ví dụ attachMode (int)) ... –

+0

Cố gắng gọi 'setSlidingActionBarEnabled (true);' sau khi các tùy chỉnh trình đơn, nó sẽ trượt ActionBar. Giá trị mặc định cho cài đặt này là sai, đó là lý do tại sao chỉ các trang trình bày nội dung. – FabriceMk

+1

Bạn có thể chấp nhận câu trả lời nếu giải pháp làm việc cho bạn không? – FabriceMk

Các vấn đề liên quan