安卓基础之《(25)—竖屏与横屏切换》

张开发
2026/4/10 4:49:36 15 分钟阅读

分享文章

安卓基础之《(25)—竖屏与横屏切换》
一、竖屏与横屏1、手机有竖屏与横屏两种模式两种屏幕方向不但造成App界面的展示差异而且竖屏和横屏切换之际甚至会打乱App的生命周期2、日志竖屏2026-04-09 13:37:59.756 9363-9363 sam com.example.chapter09 D onCreate 2026-04-09 13:37:59.960 9363-9363 sam com.example.chapter09 D onStart 2026-04-09 13:38:00.092 9363-9363 sam com.example.chapter09 D onResume切换到横屏2026-04-09 13:38:10.225 9363-9363 sam com.example.chapter09 D onPause 2026-04-09 13:38:10.228 9363-9363 sam com.example.chapter09 D onStop 2026-04-09 13:38:10.234 9363-9363 sam com.example.chapter09 D onDestroy 2026-04-09 13:38:10.582 9363-9363 sam com.example.chapter09 D onCreate 2026-04-09 13:38:10.594 9363-9363 sam com.example.chapter09 D onStart 2026-04-09 13:38:10.597 9363-9363 sam com.example.chapter09 D onResume原来的activity是销毁了切换到横屏后又创建了一个activity二、系统配置变更的处理机制1、为了用同一个activity去切换避免横竖屏切换时重新加载界面的情况android设计了一种配置变更机制在指定的环境配置发生变更之时无需重启活动页面只需执行特定的变更行为2、实现步骤1修改AndroidManifest.xml给activity节点增加android:configChanges属性2修改活动页面的Java代码重写活动页面onConfigurationChanged方法补充对应的代码处理逻辑3、配置变更的豁免情况configChanges属性的取值说明orientation屏幕方向发生改变screenLayout屏幕的显示发生改变例如在全屏和分屏之间切换screenSize屏幕大小发生改变例如在竖屏与横屏之间切换keyboard键盘发生改变例如使用了外部键盘keyboardHidden软键盘弹出或隐藏navigation导航方式发生改变例如采用了轨迹球导航fontScale字体比例发生改变例如在系统设置中调整默认字体locale设备的本地位置发生改变例如切换了系统语言uiMode用户界面的模式发生改变例如开启了夜间模式4、例子ChangeDirectionActivity.javapackage com.example.chapter09; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.content.res.Configuration; import android.os.Bundle; import android.widget.TextView; public class ChangeDirectionActivity extends AppCompatActivity { private TextView tv_monitor; Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_change_direction); tv_monitor findViewById(R.id.tv_monitor); } // 在配置项变更时触发比如屏幕方向发生变更等 Override public void onConfigurationChanged(NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); switch (newConfig.orientation) { case Configuration.ORIENTATION_PORTRAIT: tv_monitor.setText(当前屏幕为竖屏方向); break; case Configuration.ORIENTATION_LANDSCAPE: tv_monitor.setText(当前屏幕为横屏方向); break; default: break; } } }布局文件activity_change_direction.xml?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android xmlns:apphttp://schemas.android.com/apk/res-auto xmlns:toolshttp://schemas.android.com/tools android:layout_widthmatch_parent android:layout_heightmatch_parent android:orientationvertical tools:context.ChangeDirectionActivity TextView android:idid/tv_monitor android:layout_widthmatch_parent android:layout_heightwrap_content android:text请旋转手机使屏幕在竖屏和横屏之间切换 android:textColorcolor/black android:textSize17sp/ /LinearLayoutAndroidManifest.xml清单文件修改activity android:name.ChangeDirectionActivity android:exportedtrue android:configChangesorientation|screenLayout|screenSize intent-filter action android:nameandroid.intent.action.MAIN / category android:nameandroid.intent.category.LAUNCHER / /intent-filter /activity5、限定屏幕方向android:screenOrientationportrait

更多文章