ฉันจะตั้งค่าอย่างไรเพื่อให้แอปพลิเคชันทำงานในโหมดแนวตั้งเท่านั้น? ฉันต้องการให้โหมดแนวนอนถูกปิดใช้งานในขณะที่แอปพลิเคชันทำงานอยู่ ฉันจะเขียนโปรแกรมได้อย่างไร
ฉันจะตั้งค่าอย่างไรเพื่อให้แอปพลิเคชันทำงานในโหมดแนวตั้งเท่านั้น? ฉันต้องการให้โหมดแนวนอนถูกปิดใช้งานในขณะที่แอปพลิเคชันทำงานอยู่ ฉันจะเขียนโปรแกรมได้อย่างไร
คำตอบ:
คุณสามารถระบุandroid:screenOrientation="portrait"
สำหรับแต่ละกิจกรรมในไฟล์ manifest.xml ของคุณ คุณไม่สามารถระบุตัวเลือกนี้บนapplication
แท็ก
ตัวเลือกอื่น ๆ คือการเขียนโปรแกรมตัวอย่างเช่นในActivity
คลาสฐาน:
@Override
public void onCreate(Bundle savedInstanceState) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
ตัวเลือกสุดท้ายคือทำด้วยฟังวงจรชีวิตของกิจกรรมซึ่งมีให้ตั้งแต่ Android 4.0 (API 14+) เท่านั้น ทุกอย่างเกิดขึ้นในApplication
คลาสที่กำหนดเอง:
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
@Override
public void onActivityCreated(Activity a, Bundle savedInstanceState) {
a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
});
}
ActivityLifecycleAdapter
เป็นเพียงคลาสผู้ช่วยที่คุณต้องสร้างซึ่งจะเป็นการใช้งานที่ว่างเปล่าของActivityLifecycleCallbacks
(ดังนั้นคุณไม่จำเป็นต้องแทนที่แต่ละวิธีของส่วนต่อประสานนั้นเมื่อคุณต้องการเพียงหนึ่งในนั้น)
ใช่คุณสามารถทำได้ทั้งแบบเป็นโปรแกรมและสำหรับกิจกรรมทั้งหมดของคุณที่ทำให้ AbstractActivity ที่กิจกรรมทั้งหมดของคุณขยายออกไป
public abstract class AbstractActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
กิจกรรมที่เป็นนามธรรมนี้ยังสามารถใช้สำหรับเมนูส่วนกลาง
ActivityInfo.SCREEN_ORIENTATION_NOSENSOR
ควรเป็นคำตอบที่ดีกว่าเพราะมีวัตถุประสงค์เพื่อปล่อยให้อุปกรณ์อยู่ในสถานะเริ่มต้นเนื่องจากอุปกรณ์บางอย่างไม่มีแนวตั้ง อย่างไรก็ตาม 'nosensor' ใช้งานไม่ได้สำหรับฉันดังนั้นคำตอบของ @ arcone จึงเหมาะสำหรับฉัน
คุณสามารถทำสิ่งนี้กับแอปพลิเคชันทั้งหมดของคุณโดยไม่ต้องทำให้กิจกรรมทั้งหมดของคุณขยายคลาสพื้นฐานทั่วไป
เคล็ดลับคือก่อนเพื่อให้แน่ใจว่าคุณรวมApplication
คลาสย่อยในโครงการของคุณ ในที่onCreate()
เรียกว่าเมื่อแอปเริ่มขึ้นเป็นครั้งแรกคุณลงทะเบียนActivityLifecycleCallbacks
วัตถุ (ระดับ API 14+) เพื่อรับการแจ้งเตือนของกิจกรรมระยะเวลากิจกรรม
สิ่งนี้จะให้โอกาสคุณในการรันโค้ดของคุณเองเมื่อใดก็ตามที่กิจกรรมใดๆ ในแอปของคุณเริ่มต้น (หรือหยุดหรือกลับมาทำงานต่อหรืออะไรก็ตาม) ณ จุดนี้คุณสามารถโทรหาsetRequestedOrientation()
กิจกรรมที่สร้างขึ้นใหม่
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);
}
....
});
}
}
คุณสามารถตั้งค่านี้ในไฟล์รายการของคุณ ..
android:name=".your launching activity name"
android:screenOrientation="portrait"
และคุณยังสามารถบรรลุผลเดียวกันโดยการเขียนรหัสในไฟล์คลาสของคุณเช่น:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
เพิ่ม android: screenOrientation = "portrait" ให้กับกิจกรรมใน AndroidManifest.xml ตัวอย่างเช่น:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
ใช้:
android:screenOrientation="portrait"
เพียงเขียนบรรทัดนี้ในไฟล์รายการแอปพลิเคชันของคุณในแต่ละกิจกรรมที่คุณต้องการแสดงในโหมดแนวตั้งเท่านั้น
เขียนสิ่งนี้ลงในไฟล์ manifest ของคุณสำหรับทุกกิจกรรม:
android:screenOrientation="portrait"
จากคู่มือนักพัฒนา Android:
"การวางแนว" การวางแนวหน้าจอมีการเปลี่ยนแปลง - ผู้ใช้หมุนอุปกรณ์ หมายเหตุ: หากแอปพลิเคชันของคุณกำหนดเป้าหมาย API ระดับ 13 ขึ้นไป (ตามที่ประกาศโดยแอ็ตทริบิวต์ minSdkVersion และ targetSdkVersion) ดังนั้นคุณควรประกาศการกำหนดค่า "screenSize" เนื่องจากจะเปลี่ยนเมื่ออุปกรณ์สลับระหว่างแนวตั้งและแนวนอน
"screenSize" ขนาดหน้าจอที่มีอยู่ในปัจจุบันมีการเปลี่ยนแปลง สิ่งนี้แสดงถึงการเปลี่ยนแปลงในขนาดที่มีอยู่ในปัจจุบันซึ่งสัมพันธ์กับอัตราส่วนภาพปัจจุบันดังนั้นจะเปลี่ยนเมื่อผู้ใช้สลับระหว่างแนวนอนและแนวตั้ง อย่างไรก็ตามหากแอปพลิเคชันของคุณกำหนดเป้าหมาย API ระดับ 12 หรือต่ำกว่ากิจกรรมของคุณจะจัดการกับการเปลี่ยนแปลงการกำหนดค่านี้เสมอ (การเปลี่ยนแปลงการกำหนดค่านี้จะไม่เริ่มกิจกรรมของคุณใหม่แม้ว่าจะทำงานบนอุปกรณ์ Android 3.2 หรือสูงกว่า) เพิ่มใน API ระดับ 13
ดังนั้นในไฟล์ AndroidManifest.xml เราสามารถใส่:
<activity
android:name=".activities.role_activity.GeneralViewPagerActivity"
android:label="@string/title_activity_general_view_pager"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|screenSize"
>
</activity>
การเพิ่ม<preference name="orientation" value="portrait" />
ภายใต้<widget>
ใน config.xml ทำงานได้สำหรับฉัน
(โซลูชันอื่นไม่ทำงานบนอุปกรณ์ของฉันถูกเขียนทับในระหว่างการสร้างหรือให้ข้อผิดพลาดในระหว่างกระบวนการสร้าง)
ในไฟล์มานิเฟสต์ที่กิจกรรมที่คุณต้องการใช้ใน"แนวตั้ง"คุณต้องเขียนโค้ดเหล่านี้ในแท็กกิจกรรม
android:screenOrientation="portrait"
แบบนี้
android:icon="@drawable/icon"
android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity"
android:screenOrientation="portrait" >
แต่ถ้าหากคุณต้องการหน้าจอแนวนอนให้ใช้รหัสนี้เช่นนี้
android:screenOrientation="landscape"
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//setting screen orientation locked so it will be acting as potrait
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}
หากมีคนสงสัยว่าคุณจะทำสิ่งนี้กับแอปพลิเคชันทั้งหมดได้อย่างไรโดยไม่ต้องทำให้กิจกรรมทั้งหมดของคุณขยายคลาสพื้นฐานทั่วไปในKotlinดูตัวอย่างด้านล่าง:
class InteractiveStoryApplication: Application() {
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
override fun onActivityPaused(activity: Activity?) {
}
override fun onActivityResumed(activity: Activity?) {
}
override fun onActivityDestroyed(activity: Activity?) {
}
override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
}
override fun onActivityStarted(activity: Activity?) {
}
override fun onActivityStopped(activity: Activity?) {
}
})
}
}
และจากนั้นคุณต้องเพิ่มคลาสพื้นฐานของคุณใน AndroidManifest ดังนี้:
<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"
คุณสามารถทำได้สองวิธี
android:screenOrientation="portrait"
ไฟล์รายการของคุณไปยังกิจกรรมที่เกี่ยวข้องsetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
ในกิจกรรมของคุณในวิธี `onCreate ()คล้ายกับคำตอบของ Graham Borland ... แต่ดูเหมือนว่าคุณไม่จำเป็นต้องสร้างคลาสแอปพลิเคชันหากคุณไม่ต้องการ ... เพียงแค่สร้างกิจกรรมพื้นฐานในโครงการของคุณ
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
และขยายคลาสนี้แทน AppCompatActivity ซึ่งคุณต้องการใช้โหมด Potrait
public class your_activity extends BaseActivity {}
สำหรับผู้ใช้ Xamarin:
หากคุณขยายกิจกรรมทั้งหมดของคุณเป็นBaseActivity
เพียงเพิ่ม:
this.RequestedOrientation = ScreenOrientation.Portrait;
วิธีนี้จะช่วยแก้ปัญหาได้ หากคุณต้องการกิจกรรมใด ๆ OnActivityCreated
ที่จะอยู่ในการแทนที่ภูมิทัศน์นี้ เช่น:
this.Activity.RequestedOrientation = ScreenOrientation.Landscape;
ในรายการของคุณพิมพ์สิ่งนี้:
<activity
android:screenOrientation="portrait"
<!--- Rest of your application information ---!>
</activity>