我有一个注册屏幕,用户输入所有注册细节,当用户点击"注册"按钮时,我显示进度条(进度条开始旋转),然后将用户带到主屏幕。如果用户在进度条旋转时旋转手机,进度条就会消失。我希望方向不要从纵向到横向改变,反之亦然,当一个进度条是可见的(意味着它正在旋转)。如何停止方向变化时,进度条旋转?
这是因为当屏幕方向旋转时,Activity会重新启动。在这种情况下,你可以在AndroidManifest文件的标签中添加configChanges
属性来阻止Activity的重新创建。
<activity android:name=".Activity_name"
android:configChanges="orientation|keyboardHidden">
这样,你的方向可以在进度条工作时改变,而且它不会因为方向改变而停止。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
setContentView(R.layout.login_landscape);
}
else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
setContentView(R.layout.login);
}
}
正如这里所解释的,调用
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
和
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
真的很有魅力…在真实设备上!
在模拟器上测试时不要认为它坏了,ctrl+F11快捷键总是改变屏幕方向,而不模拟传感器的移动。
其他参考文献:
- 在Android中编程启用/禁用屏幕旋转
- Android child activity and orientation lock
这里是Activityinfo
***************** 编辑 ********************************
我认为你不能处理屏幕旋转上的进度条。我对吗?
所以对于这个解决方案,您不需要停止旋转。您应该处理进度条。这里有一些教程,对这个目的很有用。- 如何处理屏幕方向改变时,进度对话框和后台线程活动?
- 处理进度对话框和方向变化 Android屏幕方向旋转中的线程和进度对话框
- Android Persistent ProgressDialog Done Right
**************编辑2 *****************
有时方向改变会丢失数据。所以你可以试试这些教程
- 处理运行时更改
- 快速改变屏幕方向
- 处理Android方向变化
在Activity类中使用setRequestOrientation方法
继承ProgressDialog类,并重写方法。
下面是示例代码。
class myDialog extends ProgressDialog
{
Activity mActivity;
public myDialog(Activity context) {
super(context);
this.mActivity = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
}
@Override
public void dismiss() {
super.dismiss();
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}
}