ฉันจะปิดใช้งานโหมดแนวนอนสำหรับบางมุมมองในแอพ Android ของฉันได้อย่างไร
ฉันจะปิดใช้งานโหมดแนวนอนสำหรับบางมุมมองในแอพ Android ของฉันได้อย่างไร
คำตอบ:
เพิ่มandroid:screenOrientation="portrait"
ไปยังกิจกรรมใน AndroidManifest.xml ตัวอย่างเช่น:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
แก้ไข: ตั้งแต่นี้ได้กลายเป็นคำตอบที่ได้รับความนิยมสูงสุดฉันรู้สึกผิดมากเพราะการบังคับให้บุคคลนั้นเป็นวิธีแก้ปัญหาที่ถูกต้องสำหรับปัญหาที่นำมาใช้บ่อยๆ
caveats สำคัญกับแนวตั้งบังคับ:
retainInstance
ชิ้นส่วนดังนั้นแอพส่วนใหญ่ควรปล่อยให้เซ็นเซอร์โทรศัพท์ซอฟต์แวร์และการกำหนดค่าทางกายภาพตัดสินใจเองเกี่ยวกับวิธีที่ผู้ใช้ต้องการโต้ตอบกับแอพของคุณ บางกรณีที่คุณอาจยังต้องการคิดถึงถ้าคุณไม่พอใจกับพฤติกรรมเริ่มต้นของsensor
การวางแนวในกรณีที่คุณใช้:
nosensor
สำหรับการวางแนว สิ่งนี้บังคับให้ใช้แนวนอนบนแท็บเล็ตและแนวตั้งส่วนใหญ่บนโทรศัพท์ส่วนใหญ่ แต่ฉันยังคงไม่แนะนำสำหรับแอพ "ปกติ" ส่วนใหญ่ (ผู้ใช้บางคนชอบพิมพ์ softkeyboard แนวนอนบนโทรศัพท์ของพวกเขาและผู้ใช้แท็บเล็ตจำนวนมาก คุณควรปล่อยให้พวกเขา)sensorPortrait
อาจดีกว่าportrait
สำหรับ Android 2.3+ ทำให้สามารถถ่ายภาพกลับหัวได้ซึ่งเป็นเรื่องธรรมดาในการใช้แท็บเล็ตฉันไม่ทราบถึงการAndroidManifest.xml
สลับไฟล์จนกว่าจะอ่านโพสต์นี้ดังนั้นในแอพของฉันฉันได้ใช้สิ่งนี้แทน:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed Portrait orientation
เพิ่มสิ่งนี้android:screenOrientation="portrait"
ในไฟล์รายการที่คุณประกาศกิจกรรมของคุณเช่นนี้
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
หากคุณต้องการใช้รหัส java ลอง
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
ก่อนที่คุณจะเรียกวิธีการสำหรับกิจกรรมของคุณในsetContentView
onCreate()
หวังว่าความช่วยเหลือนี้และเข้าใจได้ง่ายสำหรับทุกคน ...
คำตอบมากมายที่นี่แนะนำให้ใช้"portrait"
ในไฟล์ AndroidManifest.xml ของคุณ นี่อาจดูเหมือนเป็นทางออกที่ดี - แต่ดังที่ระบุไว้ในเอกสารคุณกำลังแยกแยะอุปกรณ์ที่อาจมีแนวนอนเท่านั้น นอกจากนี้คุณยังบังคับให้อุปกรณ์บางอย่าง (ซึ่งทำงานได้ดีที่สุดในแนวนอน) เพื่อให้เข้ากับแนวตั้งไม่ใช่การวางแนวที่เหมาะสม
ข้อเสนอแนะของฉันคือการใช้"nosensor"
แทน การดำเนินการนี้จะทำให้อุปกรณ์ใช้การวางแนวที่เป็นค่าเริ่มต้นที่ต้องการจะไม่บล็อกการซื้อ / ดาวน์โหลดใด ๆ บน Google Play และจะตรวจสอบให้แน่ใจว่าเซ็นเซอร์ไม่รบกวนเกม (NDK ของคุณในกรณีของฉัน)
เพียงเพิ่ม 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>
หากคุณต้องการตั้งค่าผู้ใช้
แล้วฉันจะแนะนำ setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
คุณสามารถเปลี่ยนการตั้งค่าได้จากเมนูการตั้งค่า
ฉันต้องการสิ่งนี้เพราะตัวจับเวลาของฉันจะต้องสอดคล้องกับสิ่งที่อยู่บนหน้าจอและการหมุนหน้าจอจะทำลายกิจกรรมปัจจุบัน
คุณสามารถทำสิ่งนี้กับแอปพลิเคชันทั้งหมดของคุณโดยไม่ต้องทำให้กิจกรรมทั้งหมดของคุณขยายคลาสพื้นฐานทั่วไป
เคล็ดลับคือก่อนเพื่อให้แน่ใจว่าคุณรวมคลาสย่อยของแอปพลิเคชันในโครงการของคุณ ใน 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);
}
....
});
}
}
ใช้สิ่งนี้ใน onCreate () ของกิจกรรม
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
คุณควรเปลี่ยนandroid:screenOrientation="sensorPortrait"
ใน AndroidManifest.xml
เพียงเพิ่มคุณสมบัตินี้ในแท็กกิจกรรมของคุณ
android:screenOrientation="portrait"
หากคุณไม่ต้องการให้ยุ่งยากในการเพิ่มการวางแนวในรายการกิจกรรมแต่ละรายการให้ดีขึ้นให้สร้างคลาส BaseActivity (สืบทอด 'กิจกรรม' หรือ 'AppCompatActivity') ซึ่งจะได้รับการสืบทอดจากทุกกิจกรรมในแอปพลิเคชันของคุณแทน 'กิจกรรม 'หรือ' AppCompatActivity 'และเพิ่มรหัสต่อไปนี้ใน BaseActivity ของคุณ:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// rest of your code......
}
เพิ่มandroid:screenOrientation="portrait"
ในกิจกรรมที่คุณต้องการปิดใช้งานโหมดแนวนอน
หากคุณต้องการปิดการใช้งาน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);
ฉันหวังว่ามันจะช่วยให้คุณสำหรับรายละเอียดเพิ่มเติมคุณสามารถเยี่ยมชมที่นี่ป้อนคำอธิบายการเชื่อมโยงที่นี่
android:screenOrientation="nosensor">
วิธีเปลี่ยนการวางแนวในบางมุมมอง
แทนที่จะล็อคการวางแนวของกิจกรรมทั้งหมดคุณสามารถใช้คลาสนี้เพื่อล็อคการวางแนวแบบไดนามิกจากมุมมองใด ๆ ของคุณในทางปฏิบัติ: -
ทำให้มุมมองของคุณภูมิทัศน์
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);
}
}
ใช้
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
คุณต้องกำหนดทิศทางของแต่ละกิจกรรม
<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>
เพิ่มคลาสภายในเมธอด oncreate ()
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
หากคุณใช้Xamarin C # โซลูชันบางตัวจะไม่ทำงาน นี่คือวิธีแก้ปัญหาที่ฉันพบว่าทำงานได้
[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]
เหนือคลาสใช้งานได้ดีคล้ายกับโซลูชันอื่น ๆ ยังไม่สามารถใช้ได้ทั่วโลกและต้องอยู่ในส่วนหัวของกิจกรรมแต่ละรายการ
คุณสามารถบังคับให้กิจกรรมของคุณอยู่ในโหมดแนวตั้งได้ตลอดเวลาโดยเขียนสิ่งนี้ใน 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);
}
<android . . . >
. . .
<manifest . . . >
. . .
<application>
<activity android:name=".MyActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation">
</activity>
</application>
</manifest>
</android>
เพิ่มด้านล่างชื่นชมโครงการของคุณ
ติดตั้ง 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>
ขอบคุณ!
ใน<apphome>/platform/android
ไดเรกทอรีที่สร้างขึ้นAndroidManifest.xml
(คัดลอกจากไดเรกทอรีที่สร้างขึ้น) จากนั้นเพิ่มandroid:screenOrientation=
" portrait
" ลงในองค์ประกอบกิจกรรมทั้งหมด
<?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
หากเรามีกิจกรรมมากกว่าหนึ่งรายการในโปรแกรมของฉันคุณมีอิสระที่จะ จำกัด กิจกรรมใดกิจกรรมหนึ่งในโหมดใดกิจกรรมหนึ่งและจะไม่มีผลกระทบต่อกิจกรรมอื่น ๆ ที่คุณไม่ต้องการ
ไม่ว่าจะเป็นในระดับรายการ
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
หรือโดยทางโปรแกรม
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
หมายเหตุ: คุณควรจะเรียกแบบนี้มาก่อนวิธีการสำหรับกิจกรรมของคุณในsetContentView
onCreate()
เพิ่มandroid:screenOrientation="portrait"
ในไฟล์AndroidManifest.xml
ตัวอย่างเช่น :
<activity android:name=".MapScreen"
android:screenOrientation="portrait"></activity>
ด้วยความหวังว่าจะช่วยคนอื่นคุณลักษณะต่อไปนี้ใน ACTIVITY ใน AndroidManifest.xml คือสิ่งที่คุณต้องการ:
หุ่นยนต์: configChanges = "ปฐมนิเทศ"
ดังนั้นโหนดกิจกรรมแบบเต็ม:
<activity android:name="Activity1"
android:icon="@drawable/icon"
android:label="App Name"
android:configChanges="orientation">
ใน kotlin เดียวกันสามารถทำได้โดยใช้โปรแกรมด้านล่าง
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
มันใช้งานได้สำหรับฉันลองเพิ่มรหัสนี้ในไฟล์ 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>
ใส่ไว้ในรายการของคุณ
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait" />
การวางแนวจะเป็นแนวตั้ง แต่ถ้าโทรศัพท์ของผู้ใช้คว่ำมันจะแสดงวิธีที่ถูกต้องเช่นกัน (ดังนั้นหน้าจอของคุณจะหมุนได้ 180 องศา)
ระบบละเว้นแอตทริบิวต์นี้ถ้ากิจกรรมที่กำลังทำงานใน โหมดหลายหน้าต่าง
หากกิจกรรมของคุณเกี่ยวข้องกับสถานะการวางแนวอุปกรณ์ครั้งแรกให้รับการวางแนวอุปกรณ์ปัจจุบันใน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);
}