我知道有两种方法可以通过编程方式设置Activity
的横向方向
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
或在清单中:
android:orientation="landscape"
目前,我在超类中使用第一个,因为我有许多(孩子)活动,我都希望永远在风景中。但是,这样做
onCreate
被调用两次,导致其他问题。当使用Manifest-route时,我必须将它分别应用于所有活动,这无疑会导致将来错过一个(更不用说所有的代码复制)。
有没有办法将android:orientation="landscape"
应用于我的应用中的所有活动?
答案 0 :(得分:1)
在清单中,为您的所有活动设置此项:
<activity android:name=".YourActivity"
android:configChanges="orientation"
android:screenOrientation="portrait"/>
让我解释一下:
使用android:configChanges =&#34; orientation&#34;你告诉Android你将负责方向的变化。 机器人:screenOrientation =&#34;肖像&#34;您设置默认方向模式。
答案 1 :(得分:1)
或者您可以尝试为所有活动制作“超类”,并从“超类”扩展。
public abstract class SuperActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
答案 2 :(得分:0)
OnCreate 将被调用。设置代码时
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
活动会重新创建,所以你无法阻止它。 (也许你可以尝试一下,当你得到一个解决方案试试发布..)
你必须以那种方式处理你的东西
可能的解决方案
机器人:configChanges =&#34; keyboardHidden |取向|屏幕尺寸&#34; 最明显的标签
或强>
直接在清单中添加方向属性
答案 3 :(得分:0)
我为应用程序类中的所有活动设置了屏幕方向。
import android.app.Application
import android.os.Bundle
import android.app.Activity
import android.content.pm.ActivityInfo
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
setListenerToCheckActivitySettings()
}
private fun setListenerToCheckActivitySettings() {
registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
override fun onActivityStarted(activity: Activity) {}
override fun onActivityResumed(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle?) {}
override fun onActivityPaused(activity: Activity) {}
override fun onActivityStopped(activity: Activity) {}
override fun onActivityDestroyed(activity: Activity) {}
})
}
}