2010-09-08 17 views
144

Tôi chỉ muốn đặt một số cờ khi định hướng của tôi ở chế độ ngang để khi hoạt động được tạo lại trong onCreate() tôi có thể chuyển đổi giữa những gì cần tải theo chiều dọc và ngang. Tôi đã có một xml bố cục đất đang xử lý bố cục của tôi.Làm cách nào để có được hướng màn hình hiện tại?

public void onConfigurationChanged(Configuration _newConfig) { 

     if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
      this.loadURLData = false; 
     } 

     if (_newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
      this.loadURLData = true; 
     } 

     super.onConfigurationChanged(_newConfig); 
    } 

Over-riding onConfigurationChangeed sẽ ngăn xml bố cục đất của tôi tải theo hướng ngang.

Tôi chỉ muốn có định hướng hiện tại của thiết bị trong onCreate(). Làm thế nào tôi có thể nhận được điều này?

Trả lời

372
Activity.getResources().getConfiguration().orientation 
+8

Điều này chỉ cung cấp hai giá trị ORIENTATION_PORTRAIT và ORIENTATION_LANDSCAPE. Có cách nào để có được tất cả bốn giá trị từ ActivityInfo không? (Đó là LANDSCAPE_REVERSE và PORTRAIT_REVERSE) – HRJ

+16

@HRJ bạn có thể sử dụng getWindowManager(). GetDefaultDisplay().getRotation() – MKJParekh

+18

getWindowManager() getDefaultDisplay(). getRotation() trả về vòng quay với tham chiếu đến định hướng "tự nhiên" của màn hình, nghĩa là đối với một máy tính bảng, nó sẽ trả về Surface.ROTATION_0 ở chế độ ngang, trong khi đó đối với điện thoại di động, nó sẽ trả về cùng một giá trị cho ảnh chân dung. –

25

Trong một số thiết bị void onConfigurationChanged() có thể gặp sự cố. Người dùng sẽ sử dụng mã này để xem hướng màn hình hiện tại.

public int getScreenOrientation() 
{ 
    Display getOrient = getActivity().getWindowManager().getDefaultDisplay(); 
    int orientation = Configuration.ORIENTATION_UNDEFINED; 
    if(getOrient.getWidth()==getOrient.getHeight()){ 
     orientation = Configuration.ORIENTATION_SQUARE; 
    } else{ 
     if(getOrient.getWidth() < getOrient.getHeight()){ 
      orientation = Configuration.ORIENTATION_PORTRAIT; 
     }else { 
      orientation = Configuration.ORIENTATION_LANDSCAPE; 
     } 
    } 
    return orientation; 
} 

Và sử dụng

if (orientation==1)  // 1 for Configuration.ORIENTATION_PORTRAIT 
{       // 2 for Configuration.ORIENTATION_LANDSCAPE 
    //your code    // 0 for Configuration.ORIENTATION_SQUARE 
} 
+0

câu trả lời trùng lặp – Apurva

+1

Xin lưu ý rằng getOrient.getWidth() và getOrient.getHeight() không còn được dùng nữa. – anivaler

+0

Nên được đánh dấu là câu trả lời đúng như cách chi tiết hơn – Zapnologica

11
getActivity().getResources().getConfiguration().orientation 

này lệnh trở về int giá trị 1 cho Portrait và 2 cho Cảnh

5

Trong trường hợp bất cứ ai muốn có được meaningful mô tả định hướng (như vậy truyền cho onConfigurationChanged(..) với những người reverseLandscape, sensorLandscape và cứ tiếp tục), chỉ cần sử dụng getRequestedOrientation()

17
int rotation = getWindowManager().getDefaultDisplay().getRotation(); 

điều này sẽ mang lại cho tất cả các định hướng như bình thường và ngược lại

và xử lý nó như

int angle = 0; 
switch (rotation) { 
    case Surface.ROTATION_90: 
     angle = -90; 
     break; 
    case Surface.ROTATION_180: 
     angle = 180; 
     break; 
    case Surface.ROTATION_270: 
     angle = 90; 
     break; 
    default: 
     angle = 0; 
     break; 
} 
36
int orientation = this.getResources().getConfiguration().orientation; 
if (orientation == Configuration.ORIENTATION_PORTRAIT) { 
    //code for portrait mode 
} else { 
    //code for landscape mode 
} 

Khi cha của thisActivity

0

nếu bạn muốn ghi đè lên phương thức onConfigurationChanged và s cho đến khi muốn nó làm những thứ cơ bản sau đó xem xét sử dụng super.onConfigyrationChanged() làm câu lệnh đầu tiên trong phương thức overriden.

1

Trong lớp hoạt động của bạn sử dụng phương thức dưới đây:

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

     // Checks the orientation of the screen 
     if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 

      setlogo();// Your Method 
      Log.d("Daiya", "ORIENTATION_LANDSCAPE"); 

     } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 

      setlogoForLandScape();// Your Method 
      Log.d("Daiya", "ORIENTATION_PORTRAIT"); 
     } 
    } 

Sau đó, để tuyên bố rằng hoạt động của bạn xử lý một sự thay đổi cấu hình, chỉnh sửa các yếu tố thích hợp trong file manifest của bạn để bao gồm các thuộc tính android:configChanges với một giá trị đại diện cho cấu hình bạn muốn xử lý. Giá trị có thể được liệt kê trong tài liệu cho thuộc tính android:configChanges (giá trị được sử dụng phổ biến nhất là "hướng" để ngăn khởi động lại khi hướng màn hình thay đổi và "keyboardHidden" để ngăn khởi động lại khi tính khả dụng của bàn phím thay đổi). Bạn có thể khai báo nhiều giá trị cấu hình trong thuộc tính bằng cách tách chúng bằng một đường ống | tính cách.

<activity android:name=".MyActivity" 
      android:configChanges="orientation|keyboardHidden" 
      android:label="@string/app_name"> 

Đó là tất cả !!

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