วิธีปิดการใช้งานโหมดแนวนอนใน Android


933

ฉันจะปิดใช้งานโหมดแนวนอนสำหรับบางมุมมองในแอพ Android ของฉันได้อย่างไร


3
คุณพยายามปิดการใช้งานคุณสมบัติหมุนอัตโนมัติหรือไม่ ลองตั้งค่าการวางแนวที่คุณต้องการในมุมมองแนวตั้งใช่ไหม http://code.google.com/android/reference/android/R.styleable.html#AndroidManifestActivity_screenOrientation
ดัม

คำตอบ:


1632

เพิ่มandroid:screenOrientation="portrait"ไปยังกิจกรรมใน AndroidManifest.xml ตัวอย่างเช่น:

<activity android:name=".SomeActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait" />

แก้ไข: ตั้งแต่นี้ได้กลายเป็นคำตอบที่ได้รับความนิยมสูงสุดฉันรู้สึกผิดมากเพราะการบังคับให้บุคคลนั้นเป็นวิธีแก้ปัญหาที่ถูกต้องสำหรับปัญหาที่นำมาใช้บ่อยๆ
caveats สำคัญกับแนวตั้งบังคับ:

  • สิ่งนี้ไม่ได้ช่วยให้คุณไม่ต้องนึกถึงเหตุการณ์รอบการทำงานของกิจกรรมหรือการบันทึก / เรียกคืนสถานะอย่างถูกต้อง มีสิ่งต่าง ๆ มากมายนอกเหนือจากการหมุนแอปที่สามารถทำให้เกิดการทำลายกิจกรรม / นันทนาการรวมถึงสิ่งที่หลีกเลี่ยงไม่ได้เช่นมัลติทาสกิ้ง ไม่มีทางลัด; เรียนรู้การใช้ชุดรวมและretainInstanceชิ้นส่วน
  • โปรดจำไว้ว่าแตกต่างจากประสบการณ์ iPhone ค่อนข้างสม่ำเสมอมีอุปกรณ์บางอย่างที่แนวตั้งไม่ใช่แนวนิยมอย่างชัดเจน เมื่อผู้ใช้อยู่ในอุปกรณ์ที่มีแป้นพิมพ์ฮาร์ดแวร์หรือแผ่นเกม a la the Nvidia Shield, บนChromebooks , บนพับได้ , หรือบนSamsung DeX , การบังคับรูปคนสามารถทำให้แอปของคุณมีประสบการณ์ จำกัด หรือก่อให้เกิดความยุ่งยากในการใช้งาน หากแอปของคุณไม่มีอาร์กิวเมนต์ UX ที่แข็งแกร่งซึ่งจะนำไปสู่ประสบการณ์เชิงลบสำหรับการสนับสนุนการวางแนวอื่น ๆ คุณอาจไม่ควรบังคับแนวนอน ฉันกำลังพูดถึงสิ่งต่าง ๆ เช่น "นี่เป็นแอพลงทะเบียนเงินสดสำหรับแท็บเล็ตรุ่นหนึ่งที่ใช้ในฮาร์ดแวร์แบบถาวรเสมอ"

ดังนั้นแอพส่วนใหญ่ควรปล่อยให้เซ็นเซอร์โทรศัพท์ซอฟต์แวร์และการกำหนดค่าทางกายภาพตัดสินใจเองเกี่ยวกับวิธีที่ผู้ใช้ต้องการโต้ตอบกับแอพของคุณ บางกรณีที่คุณอาจยังต้องการคิดถึงถ้าคุณไม่พอใจกับพฤติกรรมเริ่มต้นของsensorการวางแนวในกรณีที่คุณใช้:

  • หากความกังวลหลักของคุณคือการวางแนวอุบัติเหตุโดยบังเอิญการเปลี่ยนแปลงกิจกรรมกลางที่คุณคิดว่าเซ็นเซอร์และซอฟต์แวร์ของอุปกรณ์จะไม่รองรับเช่นกัน (ตัวอย่างเช่นในเกมเอียง) พิจารณาการสนับสนุนแนวนอนและแนวตั้ง แต่ใช้nosensorสำหรับการวางแนว สิ่งนี้บังคับให้ใช้แนวนอนบนแท็บเล็ตและแนวตั้งส่วนใหญ่บนโทรศัพท์ส่วนใหญ่ แต่ฉันยังคงไม่แนะนำสำหรับแอพ "ปกติ" ส่วนใหญ่ (ผู้ใช้บางคนชอบพิมพ์ softkeyboard แนวนอนบนโทรศัพท์ของพวกเขาและผู้ใช้แท็บเล็ตจำนวนมาก คุณควรปล่อยให้พวกเขา)
  • หากคุณยังต้องบังคับให้ถ่ายภาพบุคคลด้วยเหตุผลบางอย่างsensorPortraitอาจดีกว่าportraitสำหรับ Android 2.3+ ทำให้สามารถถ่ายภาพกลับหัวได้ซึ่งเป็นเรื่องธรรมดาในการใช้แท็บเล็ต

54
เป็นไปได้ที่จะทำเพื่อแอพทั้งหมด ลองดูstackoverflow.com/a/9784269/1300707
Liam George Betsworth

1
ฉันสังเกตเห็นว่ามีแนวตั้งอื่น: sensorPortait ความแตกต่างระหว่าง sensorPortait และ Portrait Jack
Jacky

1
หากคุณอ่านเอกสารของ Google : "การวางแนวแนวตั้ง แต่อาจเป็นแนวตั้งปกติหรือย้อนกลับตามเซ็นเซอร์อุปกรณ์เพิ่มในระดับ API 9" ดังนั้น - นั่นคือ - "แนวตั้ง, หงายหน้าขึ้นหรือลง, Android 2.3 ขึ้นไปเท่านั้น"
Yoni Samlan

2
ดังที่ฉันได้กล่าวไว้ในคำตอบของฉันด้านล่าง - เพื่อแก้ไขปัญหาต่าง ๆ "nosensor" น่าจะเป็นตัวเลือกที่ดีกว่า
Mike Weir

1
ฉันต้องบอกว่าฉันไม่เห็นด้วย ไม่ใช่ว่าทุกประสบการณ์จะเข้ากันได้กับโหมดแนวนอนบนโทรศัพท์ดังนั้นคุณควรปล่อยให้ UX ตัดสินใจไม่ใช่เซ็นเซอร์ นี่ไม่ใช่กรณีบนแท็บเล็ต
Renzo Tissoni

110

ฉันไม่ทราบถึงการAndroidManifest.xmlสลับไฟล์จนกว่าจะอ่านโพสต์นี้ดังนั้นในแอพของฉันฉันได้ใช้สิ่งนี้แทน:

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);     //  Fixed Portrait orientation

9
สิ่งนี้สามารถทำให้กิจกรรมของคุณกระโดดในการโหลดครั้งแรกหากอุปกรณ์ไม่ได้อยู่ในทิศทางที่ระบุ
Dori

ฉันใช้วิธีนี้ฉันกำลังเรียกมันใน OnCreate แล้วฉันจะอ่านข้อมูลจากไฟล์เนื้อหาบางไฟล์ ถ้าฉันจะเริ่มแอพด้วยอุปกรณ์ในแนวนอนมันจะหมุน แต่สิ่งนี้จะส่งผลให้อ่านเนื้อหาการเริ่มต้นเหล่านั้นอย่างไม่ถูกต้องด้วยเหตุผลแปลก ๆ (อาจต้องรอให้การหมุนเสร็จสิ้น) การใช้ทางเลือก xml ไม่ได้ทำให้เกิดปัญหานี้
Radu Simionescu

1
นั่นอาจเป็นปัญหากับลำดับการเริ่มต้นสำหรับโปรแกรม Android คุณสามารถลองย้าย setRequestedOrientation () ไปยัง onResume () ???
รวย

45

เพิ่มสิ่งนี้android:screenOrientation="portrait"ในไฟล์รายการที่คุณประกาศกิจกรรมของคุณเช่นนี้

<activity android:name=".yourActivity"
    ....
    android:screenOrientation="portrait" />

หากคุณต้องการใช้รหัส java ลอง

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

ก่อนที่คุณจะเรียกวิธีการสำหรับกิจกรรมของคุณในsetContentViewonCreate()

หวังว่าความช่วยเหลือนี้และเข้าใจได้ง่ายสำหรับทุกคน ...


29

คำตอบมากมายที่นี่แนะนำให้ใช้"portrait"ในไฟล์ AndroidManifest.xml ของคุณ นี่อาจดูเหมือนเป็นทางออกที่ดี - แต่ดังที่ระบุไว้ในเอกสารคุณกำลังแยกแยะอุปกรณ์ที่อาจมีแนวนอนเท่านั้น นอกจากนี้คุณยังบังคับให้อุปกรณ์บางอย่าง (ซึ่งทำงานได้ดีที่สุดในแนวนอน) เพื่อให้เข้ากับแนวตั้งไม่ใช่การวางแนวที่เหมาะสม

ข้อเสนอแนะของฉันคือการใช้"nosensor"แทน การดำเนินการนี้จะทำให้อุปกรณ์ใช้การวางแนวที่เป็นค่าเริ่มต้นที่ต้องการจะไม่บล็อกการซื้อ / ดาวน์โหลดใด ๆ บน Google Play และจะตรวจสอบให้แน่ใจว่าเซ็นเซอร์ไม่รบกวนเกม (NDK ของคุณในกรณีของฉัน)


เนื่องจากหลายคนโหวตสิ่งนี้ขึ้นมาฉันอยากจะชี้ให้เห็นว่าฉันได้ไปกับคำตอบอื่น ๆ ที่แนะนำ "แนวตั้ง" เนื่องจากอุปกรณ์ปิดบังบางอย่างตอบสนองอย่างคาดไม่ถึงเมื่อต้องการใช้การหมุนหน้าจอในแอปซึ่งกลายเป็น ความต้องการในภายหลังสำหรับฉัน ฉันยังสงสัยว่าแอพใดที่มี "แนวตั้ง" จะถูกบล็อกโดยการตั้งค่า Google Play ใด ๆ
Mike Weir

Google Play จะกรองแอพแบบแนวตั้งเท่านั้นบนอุปกรณ์แนวนอนเท่านั้นดูหมายเหตุในหน้านี้: developer.android.com/guide/topics/manifest/ ...... ("ค่าที่คุณประกาศเปิดใช้งานการกรองโดยบริการต่างๆเช่น Google เล่น ")
miracle2k

14

เพียงเพิ่ม Like Line นี้ใน Manifest ของคุณ

หุ่นยนต์: screenOrientation = "ภาพ"

<manifest
    package="com.example.speedtest"
    android:versionCode="1"
    android:versionName="1.0" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >


        <activity
            android:name="ComparisionActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
        </activity>

    </application>

</manifest>   

13

หากคุณต้องการตั้งค่าผู้ใช้

แล้วฉันจะแนะนำ setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

คุณสามารถเปลี่ยนการตั้งค่าได้จากเมนูการตั้งค่า

ฉันต้องการสิ่งนี้เพราะตัวจับเวลาของฉันจะต้องสอดคล้องกับสิ่งที่อยู่บนหน้าจอและการหมุนหน้าจอจะทำลายกิจกรรมปัจจุบัน


9

คุณสามารถทำสิ่งนี้กับแอปพลิเคชันทั้งหมดของคุณโดยไม่ต้องทำให้กิจกรรมทั้งหมดของคุณขยายคลาสพื้นฐานทั่วไป

เคล็ดลับคือก่อนเพื่อให้แน่ใจว่าคุณรวมคลาสย่อยของแอปพลิเคชันในโครงการของคุณ ใน onCreate () เรียกว่าเมื่อแอปเริ่มขึ้นครั้งแรกคุณลงทะเบียนวัตถุ ActivityLifecycleCallbacks (ระดับ API 14+) เพื่อรับการแจ้งเตือนกิจกรรมรอบการทำงานของกิจกรรม

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

และอย่าลืมเพิ่มแอพ: name = ". MyApp" ในไฟล์ Manifest ของคุณ

class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();  

        // register to be informed of activities starting up
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

            @Override
            public void onActivityCreated(Activity activity, 
                                          Bundle savedInstanceState) {

                // new activity created; force its orientation to portrait
                activity.setRequestedOrientation(
                    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            }
            ....
        });
    }
}




6

หากคุณไม่ต้องการให้ยุ่งยากในการเพิ่มการวางแนวในรายการกิจกรรมแต่ละรายการให้ดีขึ้นให้สร้างคลาส BaseActivity (สืบทอด 'กิจกรรม' หรือ 'AppCompatActivity') ซึ่งจะได้รับการสืบทอดจากทุกกิจกรรมในแอปพลิเคชันของคุณแทน 'กิจกรรม 'หรือ' AppCompatActivity 'และเพิ่มรหัสต่อไปนี้ใน BaseActivity ของคุณ:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    // rest of your code......
}

5

เพิ่มandroid:screenOrientation="portrait"ในกิจกรรมที่คุณต้องการปิดใช้งานโหมดแนวนอน


5

หากคุณต้องการปิดการใช้งานLandscape mode for your android app(หรือกิจกรรมเดียว) สิ่งที่คุณต้องทำคือการเพิ่ม

android:screenOrientation="portrait" ไปยังแท็กกิจกรรมใน AndroidManifest.xmlไฟล์

ชอบ:

<activity android:name="YourActivityName" 
    android:icon="@drawable/ic_launcher" 
    android:label="Your App Name" 
    android:screenOrientation="portrait">

อีกวิธีหนึ่งวิธีการเขียนโปรแกรม

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

ฉันหวังว่ามันจะช่วยให้คุณสำหรับรายละเอียดเพิ่มเติมคุณสามารถเยี่ยมชมที่นี่ป้อนคำอธิบายการเชื่อมโยงที่นี่


2
เนื่องจากคำตอบมากมายให้คำแนะนำที่ขัดแย้งกับคำแนะนำที่ดีของ @Phoenix และ @Yoni ฉันคิดว่าบรรทัดล่างที่ดีคือการย้ำสิ่งที่พวกเขาแนะนำ:android:screenOrientation="nosensor">
DSlomer64

1
@ DSlomer64 ใช่หากคุณต้องการรับมือกับอุปกรณ์แท็บเล็ตคุณควรใช้ค่า nosensor แทนการถ่ายภาพบุคคล
IntelliJ Amiya

5

วิธีเปลี่ยนการวางแนวในบางมุมมอง

แทนที่จะล็อคการวางแนวของกิจกรรมทั้งหมดคุณสามารถใช้คลาสนี้เพื่อล็อคการวางแนวแบบไดนามิกจากมุมมองใด ๆ ของคุณในทางปฏิบัติ: -

ทำให้มุมมองของคุณภูมิทัศน์

OrientationUtils.lockOrientationLandscape(mActivity);

ทำให้มุมมองของคุณภาพ

OrientationUtils.lockOrientationPortrait(mActivity);

ปลดล็อกการวางแนว

OrientationUtils.unlockOrientation(mActivity);

ชั้นเรียนปฐมนิเทศประโยชน์

import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Build;
import android.view.Surface;
import android.view.WindowManager;

/*  * This class is used to lock orientation of android app in nay android devices 
 */

public class OrientationUtils {
    private OrientationUtils() {
    }

    /** Locks the device window in landscape mode. */
    public static void lockOrientationLandscape(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    }

    /** Locks the device window in portrait mode. */
    public static void lockOrientationPortrait(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

    /** Locks the device window in actual screen mode. */
    public static void lockOrientation(Activity activity) {
        final int orientation = activity.getResources().getConfiguration().orientation;
        final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
                .getRotation();

        // Copied from Android docs, since we don't have these values in Froyo
        // 2.2
        int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
        int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;

        // Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO
        if (!(Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)) {
            SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
            SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
        }

        if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            }
        } else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) {
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
            } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
                activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
            }
        }
    }

    /** Unlocks the device window in user defined screen mode. */
    public static void unlockOrientation(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
    }

}


4

คุณต้องกำหนดทิศทางของแต่ละกิจกรรม

<activity
                android:name="com.example.SplashScreen2"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.Registration"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.Verification"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.WelcomeAlmostDone"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.PasswordRegistration"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>


4

หากคุณใช้Xamarin C # โซลูชันบางตัวจะไม่ทำงาน นี่คือวิธีแก้ปัญหาที่ฉันพบว่าทำงานได้

[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]

เหนือคลาสใช้งานได้ดีคล้ายกับโซลูชันอื่น ๆ ยังไม่สามารถใช้ได้ทั่วโลกและต้องอยู่ในส่วนหัวของกิจกรรมแต่ละรายการ


4

คุณสามารถบังคับให้กิจกรรมของคุณอยู่ในโหมดแนวตั้งได้ตลอดเวลาโดยเขียนสิ่งนี้ใน manifest.xml ของคุณ

 <activity android:name=".MainActivity"
        android:screenOrientation="portrait"></activity>

นอกจากนี้คุณยังสามารถบังคับให้กิจกรรมของคุณยังคงอยู่ในโหมด Postrait โดยการเขียนบรรทัดต่อไปนี้ในวิธีการ onCreate () ของกิจกรรม

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_layout);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

3
<android . . . >
    . . .
    <manifest . . . >
        . . .
        <application>
            <activity android:name=".MyActivity" 
                android:screenOrientation="portrait" 
                android:configChanges="keyboardHidden|orientation">
            </activity>
        </application>
    </manifest>
</android>

3

เพิ่มด้านล่างชื่นชมโครงการของคุณ

ติดตั้ง NPM

NPM ฉันตอบสนองพื้นเมืองตู้เก็บของ

จากนั้นคุณใช้รายการคลาสเช่น React_Native (โฟลเดอร์โครงการของคุณ) / android / app / src / main / AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

<application
  android:name=".MainApplication"
  android:label="@string/app_name"
  android:icon="@mipmap/ic_launcher"
  android:allowBackup="false"
  android:theme="@style/AppTheme">
  <activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:screenOrientation="landscape"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
    android:windowSoftInputMode="adjustResize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>
  <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>

ขอบคุณ!


2

ใน<apphome>/platform/androidไดเรกทอรีที่สร้างขึ้นAndroidManifest.xml(คัดลอกจากไดเรกทอรีที่สร้างขึ้น) จากนั้นเพิ่มandroid:screenOrientation=" portrait" ลงในองค์ประกอบกิจกรรมทั้งหมด


2
 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="in.co.nurture.bajajfinserv">
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>


    <application

        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity" android:screenOrientation="portrait">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

เราสามารถ จำกัด กิจกรรมในโหมดแนวตั้งหรือแนวนอนโดยใช้คุณลักษณะหรือ Android: screenOrientation

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


2

ไม่ว่าจะเป็นในระดับรายการ

<activity android:name=".yourActivity"
    ....
    android:screenOrientation="portrait" />

หรือโดยทางโปรแกรม

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

หมายเหตุ: คุณควรจะเรียกแบบนี้มาก่อนวิธีการสำหรับกิจกรรมของคุณในsetContentViewonCreate()



1

ด้วยความหวังว่าจะช่วยคนอื่นคุณลักษณะต่อไปนี้ใน ACTIVITY ใน AndroidManifest.xml คือสิ่งที่คุณต้องการ:

หุ่นยนต์: configChanges = "ปฐมนิเทศ"

ดังนั้นโหนดกิจกรรมแบบเต็ม:

<activity android:name="Activity1" 
    android:icon="@drawable/icon" 
    android:label="App Name" 
    android:configChanges="orientation">

มีคำตอบเหลืออยู่มากมายคุณควรให้ข้อมูลเพิ่มเติมทำไมจึงควรใช้ข้อมูลของคุณ โดยเฉพาะอย่างยิ่งเอกสารที่ไม่ได้ใช้ตัวเลือกนี้: "หมายเหตุ: การใช้แอททริบิวนี้ควรหลีกเลี่ยงและใช้เป็นทางเลือกสุดท้ายโปรดอ่านการจัดการการเปลี่ยนแปลงรันไทม์สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีจัดการรีสตาร์ทอย่างเหมาะสมเนื่องจากการเปลี่ยนแปลงการกำหนดค่า" developer.android.com/guide/topics/manifest/…
Murmel

1

ใน kotlin เดียวกันสามารถทำได้โดยใช้โปรแกรมด้านล่าง

requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

1

มันใช้งานได้สำหรับฉันลองเพิ่มรหัสนี้ในไฟล์ AndroidManifest

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme">
        ....
        ....
        </application>

ฉันจะเป็นทางออกที่ดีเพราะคุณไม่ต้องทำกิจกรรมต่อ น่าเสียดายที่ใช้งานไม่ได้ในแอพของฉัน
Myroslav Kolodii

1

ใส่ไว้ในรายการของคุณ

<activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="sensorPortrait" />

การวางแนวจะเป็นแนวตั้ง แต่ถ้าโทรศัพท์ของผู้ใช้คว่ำมันจะแสดงวิธีที่ถูกต้องเช่นกัน (ดังนั้นหน้าจอของคุณจะหมุนได้ 180 องศา)


ระบบละเว้นแอตทริบิวต์นี้ถ้ากิจกรรมที่กำลังทำงานใน โหมดหลายหน้าต่าง


0

หากกิจกรรมของคุณเกี่ยวข้องกับสถานะการวางแนวอุปกรณ์ครั้งแรกให้รับการวางแนวอุปกรณ์ปัจจุบันในonCreateวิธีการแล้วแก้ไขได้ตลอดไป:

        int deviceRotation = ((WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation();

        if(deviceRotation == Surface.ROTATION_0) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        else if(deviceRotation == Surface.ROTATION_180)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
        }
        else if(deviceRotation == Surface.ROTATION_90)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
        else if(deviceRotation == Surface.ROTATION_270)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
        }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.