Bạn cần gọi số drawerLayout.openDrawer(Gravity.LEFT)
để tạo hiệu ứng cho ngăn mở ngăn. Ngăn kéo sẽ không hoạt ảnh nếu bạn thực hiện cuộc gọi quá sớm trong vòng đời Hoạt động.
Giải pháp đơn giản nhất là chỉ cần đặt cờ trong onCreate() và hành động trên nó trong onResume().
Bạn muốn đảm bảo rằng bạn chỉ đặt cờ khi savedInstanceState là null cho biết Activity không được tiếp tục từ nền. Bạn không muốn ngăn kéo trượt ra mỗi khi bạn thay đổi hướng hoặc chuyển đổi ứng dụng.
public class MainActivity extends ActionBarActivity {
private DrawerLayout drawerLayout;
private boolean firstResume = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawerLayout = (DrawerLayout)findViewById(R.id.drawer);
if(savedInstanceState == null){
firstResume = true;
}
}
@Override
protected void onResume() {
super.onResume();
if(firstResume) {
drawerLayout.openDrawer(Gravity.LEFT);
}
firstResume = false;
}
}
Bạn cũng có thể sử dụng một OnPreDrawListener nhưng tôi cảm thấy đó là một chút không cần thiết phức tạp như onPreDraw được gọi là nhiều lần, do đó bạn cần phải loại bỏ người nghe sau khi mở ngăn kéo. Bạn cũng giả định rằng preDraw là một thời điểm thích hợp để kích hoạt ngăn kéo, đó là việc thực hiện nội bộ của bố cục ngăn kéo. Triển khai trong tương lai có thể không hoạt ảnh chính xác cho đến sau khi onDraw chẳng hạn.
Việc trì hoãn việc mở ngăn bằng một số tùy ý mili giây là một cách nguy hiểm để giải quyết vấn đề này. Trong trường hợp xấu nhất, lệnh gọi để mở ngăn kéo có thể xảy ra sau khi onDestroy nếu người dùng điều hướng nhanh chóng.
Nguồn
2015-01-14 01:26:57
Nếu 200ms không đủ trong mọi trường hợp thì sao? – Zordid
Sau đó, làm cho nó bất cứ điều gì chiều dài bạn cần. – MinceMan
Đó không phải là ý tôi. Cách tiếp cận này không tốt - nó không thành công bất cứ khi nào việc chuẩn bị mất nhiều thời gian hơn dự kiến. "Chúc may mắn" như bạn đặt nó thực sự phù hợp ... :-) – Zordid