我正在开发一款平板电脑应用。在设备锁定之前,一切正常。一旦设备被锁定并旋转,就会出现关闭力。
我强迫我的应用仅在 LANDSCAPE 模式下运行。所以我在清单中提到了这个许可。
<activity
android:name=".activity.LoginActivity"
android:screenOrientation="landscape"
android:windowSoftInputMode="adjustPan" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
因此,当我锁定我的设备并将其旋转时,方向会发生变化,此力会关闭。
要解决此问题,我在清单中添加了此权限。
android:configChanges="orientation"
在代码中:
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
Log.i("Log", "Configuration changes called");
int orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
// or = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
setRequestedOrientation(orientation);
}
我还在 onCreate()
中添加了这一行@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("Log", "OnCreate");
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.lyt_login_main);
........
}
但仍然没有得到解决。请帮我解决这个问题。
这是我得到的错误:
12-17 11:13:57.877: E/AndroidRuntime(10462): FATAL EXCEPTION: main
12-17 11:13:57.877: E/AndroidRuntime(10462): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.marico.icp/com.marico.icp.activity.LoginActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x7f03000f
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3365)
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.app.ActivityThread.access$700(ActivityThread.java:128)
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1165)
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.os.Handler.dispatchMessage(Handler.java:99)
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.os.Looper.loop(Looper.java:137)
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.app.ActivityThread.main(ActivityThread.java:4514)
12-17 11:13:57.877: E/AndroidRuntime(10462): at java.lang.reflect.Method.invokeNative(Native Method)
12-17 11:13:57.877: E/AndroidRuntime(10462): at java.lang.reflect.Method.invoke(Method.java:511)
12-17 11:13:57.877: E/AndroidRuntime(10462): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
12-17 11:13:57.877: E/AndroidRuntime(10462): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
12-17 11:13:57.877: E/AndroidRuntime(10462): at dalvik.system.NativeStart.main(Native Method)
12-17 11:13:57.877: E/AndroidRuntime(10462): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f03000f
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.content.res.Resources.getValue(Resources.java:1037)
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.content.res.Resources.loadXmlResourceParser(Resources.java:2144)
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.content.res.Resources.getLayout(Resources.java:870)
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
12-17 11:13:57.877: E/AndroidRuntime(10462): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:273)
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.app.Activity.setContentView(Activity.java:1835)
12-17 11:13:57.877: E/AndroidRuntime(10462): at com.marico.icp.activity.LoginActivity.onCreate(LoginActivity.java:77)
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.app.Activity.performCreate(Activity.java:4465)
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
12-17 11:13:57.877: E/AndroidRuntime(10462): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
12-17 11:13:57.877: E/AndroidRuntime(10462): ... 12 more
提前致谢。
答案 0 :(得分:1)
正如@kumar在评论中所说,
我在layout-large-land中保留了布局文件夹中的所有布局,更改了menifest权限
android:configChanges="orientation"
至android:configChanges="orientation|keyboardHidden"
对此方法onConfigurationChanged()
发表了评论,此行也setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
然后我运行代码。 这解决了力关闭的问题,但由于方向改变,onCreate()方法调用了,而且我将输入的数据丢失到editText中,
为此,我覆盖我的活动类的onSaveInstanceState(Bundle outState)
方法。并做了以下。
我将输入的数据保存在 hashmap 中,所以在onSavedInstanceState()
中,我这样做了。
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putSerializable("hashMap", hashMapSaveToDB);
super.onSaveInstanceState(outState);
}
在onCreate()
中检查了savedInstanceState,就像这样...
if(savedInstanceState != null)
{
hashMapSaveToDB = (HashMap<String, ArrayList<String>>) savedInstanceState.getSerializable("hashMap");
}
这解决了在 onCreate()时调用数据的问题。
感谢@kumar
答案 1 :(得分:0)
删除此行 机器人:configChanges = “取向”
正在发生的事情是,当方向改变时,它会尝试重新启动活动,并在每次改变后进行创建。
评论此方法 @覆盖 public void onConfigurationChanged(Configuration newConfig){
}
它是没用的
答案 2 :(得分:0)
在清单活动中使用它 -
android:configChanges="orientation|keyboardHidden"