Thay đổi hướng màn hình theo chương trình bằng một nút


Câu trả lời:


216

Có, nó có thể thực hiện được!

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

ActivityInfo

http://developer.android.com/reference/android/content/pm/ActivityInfo.html

Tham khảo liên kết:

Button buttonSetPortrait = (Button)findViewById(R.id.setPortrait);
Button buttonSetLandscape = (Button)findViewById(R.id.setLandscape);

buttonSetPortrait.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
   }

});

buttonSetLandscape.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
   }

});

http://android-er.blogspot.in/2011/08/set-screen-orientation-programmatically.html


Cảm ơn. Nhưng chức năng này có cần phải chạy trên thiết bị đã root không? Nó dường như không hoạt động trên điện thoại di động của tôi nhưng trên máy tính bảng đã root của tôi.
Sam

Không nó không phải như thế .. Thật sự tôi đã thử nghiệm mã trong liên kết trước khi gửi bài .. Nó được làm việc trong điện thoại của tôi ..
Hariharan

được rồi, vâng, bạn đúng. Tôi vừa thử nghiệm một thiết bị khác và nó hoạt động tốt. tốt, Samsung Galaxy Nexus của tôi không hoạt động. Không biết tại sao.
Sam

4
Cảm ơn vì câu trả lời. Nhưng điều này sẽ khóa ứng dụng ở chế độ đó. Khi Người dùng đang xoay thiết bị, màn hình không xoay.
Eco4ndly,

2
Nếu tôi đặt hướng nằm ngang theo chương trình như câu trả lời này, thì người dùng không thể thay đổi hướng bằng cách xoay thiết bị nữa. Bất kỳ cách nào để xử lý vấn đề này? Tôi muốn thực hiện những gì đã được dạy trong câu trả lời này nhưng sau đó khi người dùng xoay thiết bị, nó sẽ tiếp tục thay đổi hướng.
Sớm ở Santos,

36

Có, bạn có thể đặt hướng màn hình theo chương trình bất cứ lúc nào bạn muốn bằng cách sử dụng:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

cho chế độ ngang và dọc tương ứng. Phương thức setRequestedOrientation () có sẵn cho lớp Activity , vì vậy nó có thể được sử dụng bên trong Activity của bạn.

Và đây là cách bạn có thể lấy hướng màn hình hiện tại và đặt nó phù hợp tùy thuộc vào trạng thái hiện tại của nó:

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
final int orientation = display.getOrientation(); 
 // OR: orientation = getRequestedOrientation(); // inside an Activity

// set the screen orientation on button click
Button btn = (Button) findViewById(R.id.yourbutton);
btn.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {

              switch(orientation) {
                   case Configuration.ORIENTATION_PORTRAIT:
                       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                       break;
                   case Configuration.ORIENTATION_LANDSCAPE:
                       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                       break;                   
               }
          }
   });

Lấy từ đây: http://techblogon.com/android-screen-orientation-change-rotation-example/

BIÊN TẬP

Ngoài ra, bạn có thể lấy hướng màn hình bằng cách sử dụng Configuration:

Activity.getResources().getConfiguration().orientation

3
Tôi khuyên bạn nên sử dụng getRequestedOrientation()để lấy hướng màn hình hiện tại: stackoverflow.com/a/21909327/1037294
a.ch.

getRequestedOrientation()cung cấp cho bạn UNSPECIFIEDkhi bạn khởi động ứng dụng. Vì vậy, với trình nghe ở trên, nó sẽ không thay đổi màn hình và nếu bạn thêm UNSPECIFIEDvào, switchnó sẽ đặt màn hình ở một trong các vị trí Chân dung / Ngang trước.
mortalis

22

Bất cứ khi nào có thể, vui lòng không sử dụng SCREEN_ORIENTATION_LANDSCAPE hoặc SCREEN_ORIENTATION_PORTRAIT. Thay vào đó hãy sử dụng:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

Những điều này cho phép người dùng định hướng thiết bị theo hướng ngang hoặc hướng dọc tương ứng. Nếu bạn đã từng phải chơi một trò chơi với một dây cáp sạc cắm vào bụng, thì bạn biết chính xác lý do tại sao việc có cả hai hướng có sẵn lại quan trọng đối với người dùng.

Lưu ý: Đối với điện thoại, ít nhất một số điện thoại mà tôi đã kiểm tra, nó chỉ cho phép chế độ dọc "bên phải", tuy nhiên, SENSOR_PORTRAIT hoạt động bình thường trên máy tính bảng.

Lưu ý: tính năng này đã được giới thiệu trong API Cấp 9, vì vậy nếu bạn phải hỗ trợ 8 hoặc thấp hơn (không có khả năng xảy ra tại thời điểm này), thay vào đó hãy sử dụng:

setRequestedOrientation(Build.VERSION.SDK_INT < 9 ?
                        ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE :
                        ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(Build.VERSION.SDK_INT < 9 ?
                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT :
                        ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

19

Sử dụng tùy chọn này để đặt hướng của màn hình:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

hoặc là

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

và đừng quên thêm cái này vào tệp kê khai của bạn:

android:configChanges = "orientation"

2
Bạn cần cả hai "orientation|screenSize", Hãy xem tại đây: developer.android.com/guide/topics/resources/…
Benny

7

Mã làm việc:

private void changeScreenOrientation() {
    int orientation = yourActivityName.this.getResources().getConfiguration().orientation;
    if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        showMediaDescription();
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        hideMediaDescription();
    }
    if (Settings.System.getInt(getContentResolver(),
            Settings.System.ACCELEROMETER_ROTATION, 0) == 1) {
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
            }
        }, 4000);
    }
}

gọi phương thức này trong lần nhấp vào nút của bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.