2012-03-03 24 views
7

Tôi đã tạo cửa sổ bật lên có chế độ xem theo tháng để nhận ngày. Khi tôi thay đổi hướng, do Android tải một hoạt động trên một lần nữa, cửa sổ bật lên của tôi sẽ biến mất. Làm thế nào tôi có thể làm cho nó mở ra ngay cả khi định hướng thay đổi trong thời gian chạy?Cách bật cửa sổ bật lên khi định hướng thay đổi vào thời gian chạy trong Android?

+0

bạn cũng có thể đọc http://blog.doityourselfandroid.com/2010/11/14/handling-progress-dialogs- và màn hình-hướng-thay đổi/ –

Trả lời

5

bao gồm android:configChanges="orientation" trong AndroidManifest.xml của bạn đến cửa sổ hiển thị hoạt động. Làm điều này cho android biết rằng bạn sẽ tự xử lý thay đổi định hướng và cuối cùng nó sẽ không phá hủy hoạt động của bạn và giữ cho cửa sổ hiển thị.

Kỹ thuật này là tốt nếu bạn không có bố cục khác nhau cho chế độ dọc và ngang. Tuy nhiên, nếu bạn làm thế, bạn vẫn có thể thực hiện thực hiện tùy chỉnh bố trí bằng cách phát hiện các chế độ định hướng như sau:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) 
     Log.i("orientation", "Orientation changed to: Landscape"); 
    else 
     Log.i("orientation", "Orientation changed to: Portrait"); 
} 

cho xem trước, tải về và cài đặt this sample app.

+1

bạn có hai bố cục khác nhau cho hướng dọc và ngang không? bởi vì tôi chỉ thử nghiệm này trên bố trí xml duy nhất cho cả hai định hướng và nó làm việc tốt – waqaslam

+0

hmm lạ, bởi vì tôi đã thử nghiệm nó trên một bố cục duy nhất và nó hoạt động tốt. Xem APK demo của tôi tại http://www.2shared.com/file/LdtQTybl/HelloWorld.html – waqaslam

+0

http://speedy.sh/n59h3/HelloWorld.apk – waqaslam

4

Bất cứ khi nào có thay đổi hướng, Android sẽ hủy hoạt động của bạn (gọi onDestroy()) và sau đó khởi động lại (gọi onCreate()).
Ngay sau khi bật lên, hãy đặt cờ popup_open=1. Cửa sổ bật lên của bạn sẽ tự nhiên có nút gạt. Đặt cờ = 0 trong trình xử lý nhấp chuột của nút này. Sau đó, bạn có thể mở lại cửa sổ bật lên khi ứng dụng khởi động lại theo phương thức onRestoreInstanceState() hoặc trong số onCreate(). Ở đây bạn sẽ thực hiện kiểm tra cờ. Nếu cờ được đặt thành 1, hãy mở cửa sổ bật lên. Vì vậy, ngay cả khi định hướng thay đổi trong khi cửa sổ bật lên đã lên, onRestoreInstanceState() sẽ biết phải làm gì dựa trên trạng thái của cờ. Để biết thêm thông tin kiểm tra tham khảo: How to handle runtime changes.

+0

không cho rằng cửa sổ bật lên của bạn có một số nút để người dùng loại bỏ nó. Trong trình xử lý nhấp chuột của nút này, bạn sẽ có 'popup_open = 0'. Đặt 'popup_open = 1' ngay khi cửa sổ bật lên của bạn được khởi chạy. Vì vậy, nếu cửa sổ bật lên mở và thay đổi định hướng, cờ sẽ không được đặt thành 0 và do đó 'onRestoreInstanceState()' sẽ khắc phục mọi thứ. Ill chỉnh sửa câu trả lời của tôi để xử lý việc thiết lập cờ với cửa sổ bật lên thay vì onSaveInstanceState đang thực hiện nó. – Urban

+0

có vì vậy tôi đã cố gắng nói rằng bạn nên đặt cờ trong phương thức 'OnClick()' này chứa đối tượng bật lên. Trước đó tôi đã đề nghị thiết lập cờ trong 'onSaveInstanceState'. – Urban

+0

tôi nghĩ bạn đang bối rối. Tại sao bạn đang cố gắng đăng ký onSaveInstance? Như tên của phương pháp này gợi ý, phương pháp này được gọi ngay trước khi phá hủy ứng dụng (tức là sau khi thay đổi định hướng, khi Android sắp khởi động lại ứng dụng của bạn). Bạn nên kiểm tra giá trị trong EITHER 'onRestoreInstanceState()' OR 'onCreate() '. Hãy xem liên kết mà tôi đã đưa ra trong câu trả lời của tôi. – Urban

1

Thêm khách sạn này đến hoạt động của bạn trong manifest.xml

android:configChanges="orientation|keyboard" 

và rằng nên làm điều đó.

+0

Một số người không thể rút tay ra khỏi nút downvote, nếu câu trả lời của tôi sai thì người đó có thể giải thích cho tôi tại sao không? –

0

Hiển thị PopupWindow như

final View parent = findViewById(R.id.{parentId}); 
parent.post(new Runnable() { 
    @Override 
    public void run() { 
     mPopup.showAtLocation(parent, ...); 
    } 
}); 

giải quyết ngoại lệ unhandled về biến đổi định hướng

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