2013-08-19 38 views
5

Tôi có một ứng dụng hiển thị bitmap toàn màn hình trong một hoạt động. Để cung cấp thời gian tải nhanh, tôi tải chúng vào bộ nhớ. Nhưng khi màn hình thay đổi hướng, tôi muốn xóa bộ nhớ cache để điền lại với các bitmap vừa với kích thước mới. Vấn đề duy nhất là để làm điều này, tôi cần phải phát hiện khi một thay đổi định hướng xảy ra. Có ai biết cách phát hiện điều này không?Làm cách nào để phát hiện khi thiết bị chuyển từ chế độ dọc sang chế độ ngang?

+1

thể trùng lặp của [ Cách phát hiện thay đổi hướng trong bố cục trong Android?] (Http://stackoverflow.com/questions/5726657/how-to-detect-orientation-change-in-layout-in -android) – Sam

Trả lời

23

Xem tài liệu chính thức http://developer.android.com/guide/topics/resources/runtime-changes.html

Thay đổi nó sẽ thực sự tạo ra một cái nhìn mới và onCreate sẽ được gọi một lần nữa.

Bên cạnh đó bạn có thể kiểm tra xem nó qua

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

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

Cảm ơn rất nhiều vì câu trả lời tuyệt vời! –

+4

@noone: Lưu ý rằng phương thức này sẽ CHỈ được gọi nếu bạn đã chọn cấu hình bạn muốn xử lý với thuộc tính android.R.attr # configChanges trong tệp kê khai của mình là . Xem javadoc! – user504342

+0

Cảm ơn người đàn ông, điều này cũng làm việc cho tôi. – Suniel

2

Thông thường, thay đổi hướng cuộc gọi OnCreate() trừ khi bạn đã làm điều gì đó để thực hiện điều đó.

Bạn có thể đặt logic ở đó.

+0

Tất nhiên có ý nghĩa, nhưng làm thế nào để đảm bảo rằng tôi không tải lại bộ nhớ cache mỗi lần onCreate được gọi là? onCreate có thể được gọi đơn giản sau khi hoạt động được tạo lại sau cuộc gọi điện thoại bằng ví dụ và không nên tải lại bộ nhớ cache trong tình huống này. –

+1

@Poplitou xem câu trả lời của siik về 'onSavedInstanceState' và cũng http://stackoverflow.com/questions/4096169/onsaveinstancestate-and-onrestoreinstancestate – sealz

+0

Cảm ơn rất nhiều vì đã liên kết –

3

Bạn có thể kiểm tra onSavedInstanceState từ phương pháp onCreate của bạn, nếu nó không phải là null phương tiện này là thay đổi cấu hình.

+0

Được rồi, tôi thấy cách làm điều này, cảm ơn vì câu trả lời tuyệt vời! –

3

Cách tiếp cận khác đang sử dụng OrientationEventListener.

Nó có thể được sử dụng như thế này:

OrientationEventListener mOrientationEventListener = new OrientationEventListener(
      this, SensorManager.SENSOR_DELAY_NORMAL) { 

     @Override 
     public void onOrientationChanged(int orientation) { 
      //checking if device was rotated 
      if (orientationPortrait != isPortrait(orientation)) { 
       orientationPortrait = !orientationPortrait; 
       Log.d(TAG, "Device was rotated!"); 
      } 
     } 
    }; 

Để kiểm tra định hướng:

private boolean isPortrait(int orientation) { 
    return (orientation >= (360 - 90) && orientation <= 360) || (orientation >= 0 && orientation <= 90); 
} 

Và đừng quên để kích hoạt và vô hiệu hóa người nghe:

if (mOrientationEventListener != null) { 
     mOrientationEventListener.enable(); 
    } 

if (mOrientationEventListener != null) { 
     mOrientationEventListener.disable(); 
    } 
+0

Tôi nghĩ rằng thay đổi cấu hình là một điều, trong trường hợp này onConfigurationChanged là cách để đi. Nhưng nếu bạn đã thay đổi định hướng bị khoá và vẫn muốn được thông báo, người nghe định hướng là phương pháp tốt nhất. Cảm ơn Bogdan. – Murciegalo84

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