【发布时间】:2011-10-08 09:59:33
【问题描述】:
如何设置它以使应用程序仅以纵向模式运行?我希望在应用程序运行时禁用横向模式。如何以编程方式进行?
【问题讨论】:
标签: android
如何设置它以使应用程序仅以纵向模式运行?我希望在应用程序运行时禁用横向模式。如何以编程方式进行?
【问题讨论】:
标签: android
您可以为 manifest.xml 文件中的每个活动指定android:screenOrientation="portrait"。您不能在 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。例如:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
【讨论】:
用途:
android:screenOrientation="portrait"
只需在您希望仅以纵向模式显示的每个活动的应用程序清单文件中写下这一行。
【讨论】:
将此写入您的清单文件,用于每个活动:
android:screenOrientation="portrait"
【讨论】:
@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);
}
【讨论】:
来自 Android 开发者指南:
"orientation" 屏幕方向已经改变——用户有 旋转设备。注意:如果您的应用程序针对 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>
【讨论】:
在我的 config.xml 中的 <widget> 下添加 <preference name="orientation" value="portrait" /> 对我有用。
(其他解决方案要么在我的设备上不起作用,要么在构建过程中被覆盖,要么在构建过程中出现弃用错误。)
【讨论】:
在Manifest文件中"portrait"你要使用哪个activity,你必须在Activity标签中写下这些代码
android:screenOrientation="portrait"
喜欢这个
android:icon="@drawable/icon"
android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity"
android:screenOrientation="portrait" >
但如果你想横屏使用这样的代码
android:screenOrientation="landscape"
【讨论】:
如果有人想知道,如何为整个应用程序做到这一点,而不必让所有活动都扩展 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 的回答...但如果您不想要,您似乎不必创建 Application 类...只需在您的项目中创建一个 Base Activity
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
并在你想使用 Potrait 模式的地方扩展这个类而不是 AppCompatActivity
public class your_activity extends BaseActivity {}
【讨论】:
对于 Xamarin 用户:
如果您将所有活动扩展到BaseActivity,只需添加:
this.RequestedOrientation = ScreenOrientation.Portrait;
这将解决问题。如果您希望任何特定活动处于横向状态,请在 OnActivityCreated 中覆盖它。如:
this.Activity.RequestedOrientation = ScreenOrientation.Landscape;
【讨论】:
嗯, 我尝试了每个答案,但它在旧版本的android中不起作用。 因此,最终的解决方案是将此代码添加到 setContentView 上方的每个活动中:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
【讨论】:
在 kotlin 中 -->
在你的 Extends Application 类中使用它fun onCreate()...
registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
override fun onActivityCreated(p0: Activity, p1: Bundle?) {
p0.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
}
override fun onActivityStarted(p0: Activity) {
}
override fun onActivityResumed(p0: Activity) {
}
override fun onActivityPaused(p0: Activity) {
}
override fun onActivityStopped(p0: Activity) {
}
override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) {
}
override fun onActivityDestroyed(p0: Activity) {
}
}
)}
【讨论】:
在您的清单中输入:
<activity
android:screenOrientation="portrait"
<!--- Rest of your application information ---!>
</activity>
【讨论】: