ฉันต้องการให้แอปพลิเคชัน Android ของฉันทำงานในโหมดแนวตั้งเท่านั้น


358

ฉันต้องการให้แอปพลิเคชัน Android ของฉันทำงานในโหมดแนวตั้งเท่านั้น ฉันจะทำสิ่งนั้นได้อย่างไร

คำตอบ:


778

ในรายการให้ตั้งค่านี้สำหรับกิจกรรมทั้งหมดของคุณ:

<activity android:name=".YourActivity"
    android:configChanges="orientation"
    android:screenOrientation="portrait"/>

ให้ฉันอธิบาย:

  • กับandroid:configChanges="orientation"คุณบอก Android ว่าคุณจะต้องรับผิดชอบต่อการเปลี่ยนแปลงของการปฐมนิเทศ
  • android:screenOrientation="portrait" คุณตั้งค่าโหมดการวางแนวเริ่มต้น

50
จะไม่ดีถ้าเราสามารถกำหนดทิศทาง "ทั่วโลก" สำหรับกิจกรรมทั้งหมดในแอปพลิเคชัน ดูเหมือนว่าเราไม่มีตัวเลือก แต่คัดลอก / วางแอตทริบิวต์ "portrait" ในทุกกิจกรรม ...
Eduardo Coelho

63
ก็พอที่จะตั้งandroid:screenOrientation="portrait"
จนถึง

11
@EduardoCoelho คุณสามารถสร้างคลาสพื้นฐานPortraitActivityและในการโทรแบบsetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
เร่งด่วน

1
@Twinone: วิธีการเกี่ยวกับเมื่อมีกิจกรรมที่แตกต่างกันต้องการที่จะสืบทอดมาจากคลาสย่อยที่แตกต่างกันActivityเช่นกิจกรรมหนึ่งยื่นออกมาจากListActivityในขณะที่คนอื่น ๆ ขยายเพียงจากActivity?
RestInPeace

3
@ RestInPeace ใช่จุดดี แต่นั่นไม่ใช่ความคิดที่ผิดของฉันที่เป็นเพียง Java ไม่สนับสนุนมรดกหลาย :)
Twinone

57

ใน Android Manifest แฟ้มใส่แอตทริบิวต์ของคุณ<activity>ที่android:screenOrientation="portrait"


2
ให้ฉันเพิ่ม: จาก Android Sudio 3.6 จำเป็นต้องใช้ android: screenOrientation = "fullSensor" หรือ android: screenOrientation = "unspecified" fullSensor หมายความว่าคุณมี ON "Rotate off" หรือไม่มันจะเปลี่ยนทิศทางตามที่คุณย้ายโทรศัพท์ ไม่ได้ระบุวิธีการถ้าคุณมีการหมุนปิดแล้วมันจะยังคงอยู่ในทิศทางนั้นและหากไม่ได้มันจะเปลี่ยนทิศทางตามที่คุณย้ายโทรศัพท์
Kirguduck

24

มีสองวิธีคือ

  1. เพิ่มandroid:screenOrientation="portrait"สำหรับแต่ละกิจกรรมในไฟล์มานิเฟสต์
  2. เพิ่มthis.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);ในแต่ละไฟล์ java

14
ตัวเลือกที่สองมีผลข้างเคียงที่น่ากลัวว่าจะเริ่มกิจกรรมของคุณใหม่เมื่อเริ่มในแนวตั้ง
Joakim

4

ในรายการ:

<activity android:name=".activity.MainActivity"
        android:screenOrientation="portrait"
        tools:ignore="LockedOrientationActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

หรือ: ในกิจกรรมหลัก

@SuppressLint("SourceLockedOrientationActivity")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

app/src/main/AndroidManifest.xml; lineNumber: 20; columnNumber: 50; The prefix "tools" for attribute "tools:ignore" associated with an element type "activity" is not bound.ฉันได้รับ การเพิ่มxmlns:tools="http://schemas.android.com/tools"องค์ประกอบหลักในการแก้ปัญหา
ojabojad

3

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

   private void initActivityScreenOrientPortrait()
    {
        // Avoid screen rotations (use the manifests android:screenOrientation setting)
        // Set this to nosensor or potrait

        // Set window fullscreen
        this.activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        DisplayMetrics metrics = new DisplayMetrics();
        this.activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);

         // Test if it is VISUAL in portrait mode by simply checking it's size
        boolean bIsVisualPortrait = ( metrics.heightPixels >= metrics.widthPixels ); 

        if( !bIsVisualPortrait )
        { 
            // Swap the orientation to match the VISUAL portrait mode
            if( this.activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT )
             { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }
            else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ); }
        }
        else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); }

    }

ทำงานเหมือนจับใจ!

ข้อสังเกต: เปลี่ยนthis.activityตามกิจกรรมของคุณหรือเพิ่มไปยังกิจกรรมหลักและลบthis.activity;-)


-5

ฉันใช้

 android:screenOrientation="nosensor"

มันจะมีประโยชน์ถ้าคุณไม่ต้องการสนับสนุนโหมดแนวตั้งคว่ำลง


ถ้านี่เป็นสิ่งที่ฉันคิดว่ามันทำมันไม่ได้บังคับให้หน้าจอเป็นแนวตั้งจริง ๆ ซึ่งคุณอาจต้องการทำ
Lassi Kinnunen

ทำไมคุณไม่ลบความคิดเห็นนี้ทิ้ง! มันไม่สมเหตุสมผล
Alexander Zaldostanov

ใน Android Manifest File เพียงเพิ่มคุณสมบัติสำหรับ <activity> ของคุณที่ android: screenOrientation = "portrait"
Avinash Shinde

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