เปลี่ยนการวางแนวหน้าจอโดยใช้ปุ่ม


98

ฉันคิดว่าสิ่งนี้สามารถใช้ได้เนื่องจากพฤติกรรมการหมุนหน้าจอสามารถไปถึงระดับแอปพลิเคชันได้


คุณลองสิ่งนี้แล้วหรือยัง? : stackoverflow.com/questions/14873755/…
Sayed Jalil Hassan

คำตอบ:


218

ใช่มันสามารถใช้ได้!

ข้อมูลกิจกรรม SCREEN_ORIENTATION_LANDSCAPE

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ข้อมูลกิจกรรม SCREEN_ORIENTATION_PORTRAIT

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

ActivityInfo

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

อ้างอิงลิงค์:

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


ขอบคุณ. แต่ฟังก์ชันนี้จำเป็นต้องรันบนอุปกรณ์ที่รูทหรือไม่? ดูเหมือนว่าจะไม่ทำงานบนโทรศัพท์มือถือของฉัน แต่ใช้กับแท็บเล็ตที่รูทแล้ว
แซม

ไม่มันไม่ใช่แบบนั้น .. อันที่จริงฉันทดสอบโค้ดในลิงค์นั้นก่อนโพสต์ .. มันใช้งานได้ในอุปกรณ์ของฉัน ..
Hariharan

โอเคใช่คุณพูดถูก ฉันเพิ่งทดสอบอุปกรณ์อื่นและใช้งานได้ดี ดี Samsung Galaxy Nexus ของฉันใช้งานไม่ได้ ไม่รู้ว่าทำไม
แซม

4
ขอบคุณสำหรับคำตอบ. แต่นี่เป็นการล็อกแอปพลิเคชันในโหมดนั้น เมื่อผู้ใช้หมุนอุปกรณ์หน้าจอจะไม่หมุน
Eco4ndly

2
หากฉันตั้งค่าการวางแนวเป็นแนวนอนตามโปรแกรมตามคำตอบนี้ผู้ใช้จะไม่สามารถเปลี่ยนการวางแนวได้อีกต่อไปโดยการหมุนอุปกรณ์ วิธีใดในการจัดการปัญหานี้ ฉันต้องการทำสิ่งที่สอนในคำตอบนี้ แต่เมื่อผู้ใช้หมุนอุปกรณ์อุปกรณ์จะเปลี่ยนทิศทางไปเรื่อย ๆ
Soon Santos

36

ได้คุณสามารถตั้งค่าการวางแนวหน้าจอตามโปรแกรมได้ตลอดเวลาที่คุณต้องการโดยใช้:

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

สำหรับโหมดแนวนอนและแนวตั้งตามลำดับ เมธอด setRequestedOrientation () มีให้สำหรับคลาสกิจกรรมดังนั้นจึงสามารถใช้ภายในกิจกรรมของคุณได้

และนี่คือวิธีที่คุณจะได้รับการวางแนวหน้าจอปัจจุบันและตั้งค่าอย่างเพียงพอโดยขึ้นอยู่กับสถานะปัจจุบัน:

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;                   
               }
          }
   });

นำมาจากที่นี่: http://techblogon.com/android-screen-orientation-change-rotation-example/

แก้ไข

นอกจากนี้คุณสามารถรับการวางแนวหน้าจอโดยใช้Configuration:

Activity.getResources().getConfiguration().orientation

3
ฉันขอแนะนำให้ใช้getRequestedOrientation()เพื่อรับการวางแนวหน้าจอปัจจุบัน: stackoverflow.com/a/21909327/1037294
a.ch.

getRequestedOrientation()ให้คุณUNSPECIFIEDเมื่อคุณเริ่มแอป ดังนั้นด้วยฟังก์ชั่นด้านบนจะไม่เปลี่ยนหน้าจอและหากคุณเพิ่มลงUNSPECIFIEDในswitchนั้นควรวางหน้าจอไว้ในตำแหน่งแนวตั้ง / แนวนอนก่อน
มรรตัย

22

หากเป็นไปได้โปรดอย่าใช้ SCREEN_ORIENTATION_LANDSCAPE หรือ SCREEN_ORIENTATION_PORTRAIT ใช้แทน:

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

สิ่งเหล่านี้ช่วยให้ผู้ใช้ปรับทิศทางอุปกรณ์ให้เป็นแนวนอนหรือแนวตั้งตามลำดับ หากคุณเคยเล่นเกมที่มีสายชาร์จเสียบเข้าไปในท้องคุณจะรู้ดีว่าทำไมการมีทั้งสองทิศทางจึงมีความสำคัญต่อผู้ใช้

หมายเหตุ: สำหรับโทรศัพท์อย่างน้อยหลายเครื่องที่ฉันได้ตรวจสอบแล้วจะอนุญาตให้ใช้โหมดแนวตั้ง "ด้านขวาขึ้น" เท่านั้นอย่างไรก็ตาม SENSOR_PORTRAIT ทำงานได้อย่างถูกต้องบนแท็บเล็ต

หมายเหตุ: ฟีเจอร์นี้เปิดตัวใน API ระดับ 9 ดังนั้นหากคุณต้องรองรับ 8 หรือต่ำกว่า (ไม่น่าจะเป็นในตอนนี้) ให้ใช้:

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

ใช้สิ่งนี้เพื่อกำหนดแนวของหน้าจอ:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

หรือ

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

และอย่าลืมเพิ่มสิ่งนี้ในรายการของคุณ:

android:configChanges = "orientation"

2
คุณต้องการทั้งสอง"orientation|screenSize"อย่างดูที่นี่: developer.android.com/guide/topics/resources/…
Benny

7

รหัสการทำงาน:

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);
    }
}

เรียกวิธีนี้ในการคลิกปุ่มของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.