ใน AndroidManifest: คาดหวัง android: screenOrientation =“ ไม่ได้ระบุ”


44

Android Studio 3.6

ฉันต้องการให้แอปของฉันอยู่ในportraitโหมดเสมอ ดังนั้นในของฉันAndroidMainfest.xml:

<activity
   android:name=".activity.SplashActivity"
   android:screenOrientation="portrait">
   <intent-filter>
      <action android:name="android.intent.action.MAIN" />

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

ฉันเรียกใช้แอพและSplashActivityแสดงในportraitโหมด ดี แต่ตัวแก้ไขแสดงข้อผิดพลาดต่อไปนี้:

Expecting android:screenOrientation="unspecified"

ทำไม?

คำตอบ:


67

ในแท็กรายการของคุณ (ใต้xmlns:android="http://schemas.android.com/apk/res/android") ให้ใส่

xmlns:tools="http://schemas.android.com/tools"

จากนั้นภายในแท็กแอปพลิเคชันใส่

tools:ignore="LockedOrientationActivity"

หรือหากคุณมีเครื่องมืออยู่แล้ว: ละเว้นในแท็กแอปพลิเคชันจากนั้นตั้งเป็นเครื่องมือ: ละเว้น = "GoogleAppIndexingWarning, LockedOrientationActivity"
Mystery

20

มันมีผลกับ Android Studio 3.6+ เท่านั้น

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

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

มันอาจมีการเปลี่ยนแปลงในอนาคต => ในปัจจุบันมันไม่ได้ส่งผลกระทบต่อกระบวนการสร้างของเรา แต่มันอาจมีการเปลี่ยนแปลงในอนาคต


9

ใน Android studio 3.6.0 ฉันเดาว่าพวกเขาต้องการให้ผู้ใช้จัดการกับการวางแนวและกระตุ้นให้นักพัฒนาใช้สิ่งต่างๆของViewModel ให้ฉันอธิบาย screenOrientation อย่างละเอียด

android:screenOrientation="portrait"

จะให้ข้อผิดพลาดที่คุณต้องระบุ

android:screenOrientation="fullSensor" or android:screenOrientation="unspecified"

เซ็นเซอร์เต็มหมายความว่าคุณมีใน "หมุนออก" หรือไม่มันจะเปลี่ยนทิศทางตามที่คุณย้ายโทรศัพท์

ไม่ได้ระบุวิธีการถ้าคุณมีการหมุนปิดแล้วมันจะยังคงอยู่ในทิศทางนั้นและหากไม่ได้มันจะเปลี่ยนทิศทางตามที่คุณย้ายโทรศัพท์



2

ฉันได้ใช้ขั้นตอนด้านล่าง มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน ใน Android studio 3.6.0 ฉันคิดว่าพวกเขาต้องการให้ผู้ใช้จัดการการวางแนวและกระตุ้นให้นักพัฒนาใช้เนื้อหาของ ViewModel ใช้ขั้นตอนด้านล่างเพื่อเพิกเฉย

ประการแรกเพิ่ม:

xmlns:android="http://schemas.android.com/apk/res/android"

ในแท็กรายการ

ประการที่สองเพิ่ม

tools:ignore="LockedOrientationActivity" 

ในแอปพลิเคชันแท็ก Happy Coding


1

ฉันพบวิธีแก้ปัญหานี้ 2 วิธี

ครั้งแรก

Android Studio -> Preferences (or settings in Windows)
-> search "chrome" 
-> Uncheck "Activity is locked to an orientation" 
-> apply and ok 
-> Sync Project with Gradle flie

ประการที่สอง `

Select "Run" from the main menu 
-> Edit Configurations.
-> Launch options - Launch
-> select Nothing or Specified Activity
-> Sync Project with Gradle file

1

เพิ่มบรรทัดต่อไปนี้หลังจาก android:screenOrientation="portrait"

tools:ignore="LockedOrientationActivity"

จากนั้นคลิกAlt+Enter

ป้อนคำอธิบายรูปภาพที่นี่


0

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

กรณีที่ 1: -เพื่อล็อคการวางแนว

ขั้นตอนที่ 1: โปรดเพิ่มแท็กแอปพลิเคชันบรรทัดต่อไปนี้ใน AndroidManifest.xml

เครื่องมือ: ละเว้น = "LockedOrientationActivity"

<application
android:name=".activity.MyApplication"
tools:ignore="LockedOrientationActivity">

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

android: screenOrientation = "แนวตั้ง" หรือ "แนวนอน"

กรณีที่ 2: -สมมติว่าหากคุณต้องการอนุญาตการวางแนวในกิจกรรมเฉพาะและมีการออกแบบเฉพาะสำหรับภูมิทัศน์

ขั้นตอนที่ 1: ลบค่าการวางแนวในการกำหนดค่าและลบการวางแนวหน้าจอหากมีอยู่จากแท็กกิจกรรมและการใช้คำแนะนำส่วนตัวของฉัน (LifecycleObserver) ในกิจกรรมโดยไม่สูญเสียค่าในขณะที่เปลี่ยนการวางแนว

android: configChanges = "การวางแนว"
android: screenOrientation = "portrait" หรือ "Landscape"

นี่คือวิธีที่ฉันแก้ไขปัญหานี้หวังว่าจะช่วยได้ขอบคุณ & การเข้ารหัสที่มีความสุข


0

ลองใช้วิธีนี้:

AndroidMainfest:

<activity
    android:name="com.ui.activity.SplashActivity"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustPan">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

หวังว่านี่จะช่วยได้!


คำตอบนี้ไม่ได้ทำงานใน Android 3.6
Pedro Henrique

0

คุณสามารถใช้รหัสนี้:

if(MainActivity.this.getResources().getConfiguration().orientation== Configuration.ORIENTATION_PORTRAIT){
        MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
    }

1
โปรดเพิ่มคำอธิบายลงในคำตอบของคุณเพื่อให้คนอื่นสามารถเรียนรู้จากมัน
Nico Haase

ถ้าแนวตั้งวางแนวล็อคแนวของกิจกรรมนั้น ซึ่งหมายความว่าการวางแนวไม่เคยเปลี่ยนเป็นแนวนอน
Abu Baker Nawaz

โปรดแก้ไขคำตอบของคุณเพื่อให้มีคำอธิบายทั้งหมด
Nico Haase

-1

ลองใส่สิ่งต่อไปนี้ในแท็กกิจกรรม

android:configChanges="orientation"
android:screenOrientation="portrait" 

ไม่ช่วย มันเป็นโหมดแนวตั้งและแนวนอน
a_subscriber

อัปเดตคำตอบที่คุณจะต้องเพิ่มทั้งสอง
Swayangjit

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