如何在我的Android应用中禁用某些视图的横向模式?
我在后台线程(我使用AsyncTask)下载了一些来自互联网的数据,并在下载时显示进度对话框.方向更改,Activity重新启动,然后我的AsyncTask完成 - 我想关闭progess对话框并启动一个新的Activity.但是调用dismissDialog有时会抛出一个异常(可能是因为Activity被销毁而且还没有启动新的Activity).
处理此类问题的最佳方法是什么(从后台线程更新UI即使用户更改方向也能正常工作)?谷歌有人提供了一些"官方解决方案"吗?
有没有办法在运行时锁定方向?例如,如果用户当前处于横向状态并切换菜单选项,我想允许用户将屏幕锁定为横向.
是否有可靠的方法来锁定所有Android设备上的屏幕方向?以下代码适用于我的Nexus S和其他手机,但出于某种原因,ROTATION_90对应于Xoom上的SCREEN_ORIENTATION_REVERSE_PORTRAIT.
有没有办法可靠地将旋转映射到方向?
private void lockScreenOrientation() {
if (!mScreenOrientationLocked) {
final int orientation = getResources().getConfiguration().orientation;
final int rotation = getWindowManager().getDefaultDisplay().getOrientation();
if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
}
else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
}
mScreenOrientationLocked = true;
}
}
private void unlockScreenOrientation() { …Run Code Online (Sandbox Code Playgroud) 我有一个注册屏幕,用户输入所有注册详细信息,当用户点击"注册"按钮时,我显示进度条(进度条开始旋转),然后将用户带到主屏幕.如果用户旋转当进度条旋转时,进度条被取消.我希望方向不会从potrait变为横向,反之亦然,当进度条可见时(意味着它正在旋转).进度条如何停止方向改变旋转?任何帮助将不胜感激.
我正在开发一个Android应用程序,它应该只在纵向模式下运行,因为布局不适合手机的横向屏幕.但是,在平板电脑和上网本上,我希望该应用仅以横向模式运行.
我现在尝试检查应用程序是否在平板电脑设备上运行,并通过setRequestedOrientation设置相应的请求方向.
问题是,当设备尚未处于我正在请求的方向时,应用程序崩溃了,因为我在调用setRequestedOrientation之后不久显示了progressDialog,这似乎泄漏了一个窗口.
Logcat说:
10-18 21:15:30.698: E/WindowManager(653): Activity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41991418 that was originally added here
10-18 21:15:30.698: E/WindowManager(653): android.view.WindowLeaked: Activity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41991418 that was originally added here
10-18 21:15:30.698: E/WindowManager(653): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:279)
10-18 21:15:30.698: E/WindowManager(653): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
10-18 21:15:30.698: E/WindowManager(653): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140)
10-18 21:15:30.698: E/WindowManager(653): at android.view.Window$LocalWindowManager.addView(Window.java:537)
10-18 21:15:31.888: E/WindowManager(653): Activity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41588040 that was originally added here
10-18 21:15:31.888: E/WindowManager(653): android.view.WindowLeaked: Activity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41588040 that was originally added here
10-18 21:15:31.888: …Run Code Online (Sandbox Code Playgroud) 我正在使用:
setRequestedOrientation(getResources().getConfiguration().orientation);
Run Code Online (Sandbox Code Playgroud)
后来:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
Run Code Online (Sandbox Code Playgroud)
它会阻止方向更改,直到任务完成,但它只适用于纵向,当应用程序在横向上时,它不会停止更改方向.
有什么建议?
OIM〜
可能重复:
Android:暂时禁用活动中的方向更改
我在三星Galaxy选项卡中测试.在那里,我为ORIENTATION_LANDSCAPE和ORIENTATION_PORTRAIT制作了两个布局文件夹,其中包含特定的布局xml.
在那个布局中我有一个按钮,然后在点击它时启动一个进度对话框(使用AsyncTask做一些事情,然后转到新意图)
但是当进度对话框工作时旋转设备时,该对话框和AsyncTask停止和新布局已加载.如果我理解正确的话,我认为onCreate当设备旋转时会调用它如何在我的AsyncTask启动时旋转设备时阻止调用onCreate?
IN SHOT
我如何通过代码锁定设备的方向,例如按钮上的锁定方向单击
谢谢
android ×10
orientation ×4
dynamic ×1
java ×1
locking ×1
progress-bar ×1
rotation ×1
screen ×1