Answers:
您可以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"
只需在要仅以纵向模式显示的每个活动中,将这一行写到应用程序的清单文件中即可。
根据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>
在我的config.xml中添加<preference name="orientation" value="portrait" />
下<widget>
对我有用。
(其他解决方案在我的设备上不起作用,在构建过程中被覆盖,或者在构建过程中出现了弃用错误。)
@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"
与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 {}
在清单中输入:
<activity
android:screenOrientation="portrait"
<!--- Rest of your application information ---!>
</activity>