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
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)) ... –
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
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