`

Android 禁止屏幕旋转 & 屏幕旋转不刷新 Activity & 动态更改屏幕方向

 
阅读更多

转自:http://gaebolg.blog.163.com/blog/static/19826906820134312050504/

余好读书,乐思善疑,有过目不忘之能,亦有掩卷即忘之病,故常撰文以记之……

 

一、禁止屏幕旋转:

 

打开工程中的 AndroidManifest.xml 文件,在 <activity> </activity> 中,添加一条属性信息:

android:screenOrientation="portrait" (强制竖屏)

android:screenOrientation="landscape" (强制横屏)

 

二、屏幕旋转不刷新 Activity:

 

当屏幕旋转时,会重新执行 Activity 中的 onCreate() 方法,即刷新了 Activity 的显示。若是不想刷新,可以用第一种方法锁屏,也可以用以下方法:

 

1、打开工程中的 AndroidManifest.xml 文件,在 <activity> </activity> 中,添加一条属性信息:

android:configChanges=”orientation|keyboardHidden”

注:这个属性指的是,当后边属性值代表的事件发生时,Activity 会执行某个函数,orientation 指的是当屏幕旋转时,keyboardHidden 指的是键盘辅助功能改变。“|”为或符号,指这两个中任意一个发生,就执行 Activity 某个函数。

注2:如果你的开发 API 等级等于或高于 13,你还需要设置 screenSize,因为 screenSize 会在屏幕旋转时改变。

 

2、在对应 Activity 中重写 onConfigurationChanged() 方法:

@Override
public voidonConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
if(newConfig.orientation== Configuration.ORIENTATION_LANDSCAPE) {
// 什么都不用写
}
else{
// 什么都不用写
}
}

注:如果在 if、else 中,使用了 setContentView(R.layout.xxxx) 函数,那么就可以实现:每次屏幕旋转时,调用不同的布局。

 

三、动态更改屏幕方向:

 

有些时候,我们不需要把程序写死,需要在程序中有需要的时候旋转屏幕,例如:在“设置”里添加一个 ListView 项,可通过点击选择横屏或竖屏。(比如:电子书软件)

假设有一个按钮,我们仅重写 OnClick() 函数:

@Override
public voidonClick(View v) {

// 如果是竖排,则改为横排
if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

// 如果是横排,则改为竖排
else if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}

}

重点就是:getRequestedOrientation() 函数、setRequestedOrientation() 函数的使用。

注意:使用这种方法,必须事先在 AndroidManifest.xml 的 <activity> </activity> 中,添加android:screenOrientation属性值,不然 getRequestedOrientation() 可能会出问题。

 

参考文档 1:http://weizhulin.blog.51cto.com/1556324/311469

参考文档 2:http://www.cnblogs.com/reaver21/archive/2012/03/20/2407711.html

分享到:
评论

相关推荐

    android 高仿IOS水滴版上下拉刷新Listview实例

    4. **刷新回调**:在用户触发刷新后,需要有一个接口或者回调方法供Activity或Fragment处理实际的刷新逻辑,例如更新数据源,然后通知Adapter数据已改变并刷新列表。 5. **状态管理**:刷新状态的管理也很重要,...

    下拉刷新的实现

    5. **自定义样式**:默认的刷新动画可以更改,你可以通过修改`SwipeRefreshLayout`的颜色资源来定制刷新指示器的样式。 以上就是Android中实现下拉刷新的基本流程。在实际项目中,你可能需要考虑更多细节,比如错误...

    模仿网易新闻下拉刷新

    当用户在屏幕顶部下拉时,SwipeRefreshLayout会显示一个刷新指示器,通常是旋转的菊花动画,表示正在加载新数据。一旦数据加载完成,动画会消失,视图恢复原状。 实现这个功能的步骤包括以下几个关键点: 1. **...

    android面试题整理70多条

    - **设置了配置更改**:通过在AndroidManifest.xml文件中为Activity设置`android:configChanges="orientation|keyboardHidden"`属性,可以让Activity在屏幕旋转时不重新创建,只执行`onConfigurationChanged()`方法...

    Android笔记之:onConfigurationChanged详解

    首先,`onConfigurationChanged` 方法是 `Activity` 类的一个回调方法,当设备的配置发生改变时,如屏幕方向的切换(横屏到竖屏或反之)、系统语言的更改、键盘的展开或收起等,系统会调用这个方法,而不是重新创建 ...

    安卓下拉上拉刷新相关-安卓自带刷新控件SwipeRefreshLayout上拉加载更多自动刷新.rar

    通过设置`setColorSchemeResources()`方法,可以更改旋转刷新指示器的颜色。 - 更高级的定制可以通过覆写SwipeRefreshLayout的子类并重写相关方法来实现,例如`setRefreshing()`和`onMeasure()`。 4. **注意事项与...

    VideoView视频播放

    在实际项目中,可能还需要处理其他细节,例如处理屏幕旋转时的状态保存与恢复,确保视频播放不会因屏幕旋转而中断。同时,为了提高用户体验,还可以添加动画效果,使得布局切换更加平滑。在自定义MediaController时...

    Android_SwipeRefreshLayout

    - **刷新动画**:虽然不能直接修改刷新动画,但可以通过自定义`SwipeRefreshLayout`的子类并覆盖`onRefresh()`方法来实现自定义的刷新逻辑。 - **触发距离**:可以通过设置`setProgressViewOffset()`方法调整触发...

    Android-使用Androidarchitecturecomponents的示例应用程序

    2. **ViewModel**: 用于保存UI状态的类,它不受配置变化影响,例如屏幕旋转。ViewModel可以在Activity或Fragment重建后继续存在,确保用户界面的状态得以保留。 3. **Repository**: 作为数据源的抽象层,Repository...

    Activity之间UI的另类\"更新\"

    3. **ViewModel**:ViewModel是另一种Architecture Component,它的生命周期比Activity和Fragment更长,可以在配置更改(如屏幕旋转)时保持数据。两个Activity可以共享同一个ViewModel,这样就可以在其中存储需要跨...

    Android-Recyclerview实现列表联动

    10. **状态保存与恢复**:在Activity或Fragment的onSaveInstanceState和onRestoreInstanceState方法中,保存和恢复RecyclerView的状态,以确保在配置更改(如屏幕旋转)时,列表联动的状态能够正确恢复。 总之,...

    Android异步任务处理之AsyncTaskLoader的使用

    AsyncTask是Android早期为解决短时间、小范围的后台任务而设计的,但它并不适合长时间运行或者需要在配置更改(如屏幕旋转)后恢复任务的场景。相比之下,Loader接口及其实现类,如CursorLoader和AsyncTaskLoader,...

    android基础知识

    当屏幕旋转时,系统默认会重启Activity,这会影响到Activity的生命周期,需要注意保存和恢复状态。 #### 29. 发布SQLite数据库 若想将SQLite数据库随应用一起发布,可以将数据库文件放在`assets`目录下,并在应用...

    google刷新

    5. **自定义行为**:虽然SwipeRefreshLayout提供了默认的刷新动画,但你也可以根据需要自定义刷新指示器,或者更改刷新触发的阈值。 谷歌刷新功能的引入,极大地提升了用户在移动设备上浏览和互动的体验。通过合理...

    android自学总结

    动态获取屏幕尺寸可以在主Activity中完成,SurfaceView由于拥有二级缓存,适合处理快速运动的游戏场景,能保证流畅性。若需要清除SurfaceView上的内容,可以使用canvas.drawColor()填充背景色。另外,Thread.yield()...

    Google_Android_SDK开发范例集锦

    - **5.22 动态更改屏幕方向** 说明如何在程序运行过程中动态更改屏幕的方向,适应不同的应用场景。 - **5.23 系统设置更改事件** 介绍如何监听系统的设置变化,例如语言、主题等,并做出相应的响应。 - **5.24 ...

    MVVMDemo--view和model之间的互相更改.rar

    ViewModel的生命周期比Activity和Fragment更长,即使屏幕旋转等导致重建,ViewModel中的数据也不会丢失。 3. **View层**:View主要包括Activity、Fragment和UI组件,如TextView、EditText等。在MVVM中,View仅负责...

    Android 异步加载显示 Loader 自定义Loader

    Loader的优势在于它可以自动处理配置更改(如屏幕旋转),无需重新加载数据。LoaderManager是负责管理和控制Loader的组件,它会保存Loader的状态,并在必要时重启Loader。 创建自定义Loader的步骤如下: 1. **创建...

    android使用fragment替代tabhost实现分页效果

    8. **测试和优化**:在实际应用中,需要注意Fragment之间的内存管理和状态保存,确保在配置变更(如屏幕旋转)时能正确恢复用户界面。 综上所述,使用Fragment替代TabHost可以提供更强大、灵活的分页效果,并且有助...

    面试整理题

    以上内容详细介绍了Android面试中常见的Activity相关知识点,包括其定义、生命周期、跳转逻辑、屏幕旋转处理以及状态保存。理解并熟练掌握这些知识对于成为一名合格的Android开发者至关重要。在面试中,能够清晰地...

Global site tag (gtag.js) - Google Analytics