21 activity横竖屏切换

2024-05-05 07:48
文章标签 21 切换 activity 横竖

本文主要是介绍21 activity横竖屏切换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目清单文件

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itheima.lifecycle"
    android:versionCode="1"
    android:versionName="1.0" >


    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />


    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity

            android:screenOrientation="portrait"  //    固定方向(竖)  这种情况下 activity不摧毁 重构

            android:configChanges="orientation|screenSize" //  横竖屏切换时   activity不摧毁 重构
            android:name="com.itheima.lifecycle.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>


</manifest>





package com.itheima.lifecycle;


import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;


public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {// 创建
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("onCreate");
}


@Override
protected void onStart() {// 可见
super.onStart();
System.out.println("onStart");
}

@Override
protected void onResume() {// 获得焦点
super.onResume();
System.out.println("onResume");
}

@Override
protected void onPause() {// 失去焦点
super.onPause();
System.out.println("onPause");
}

@Override
protected void onStop() {// 不可见
super.onStop();
System.out.println("onStop");
}

@Override
protected void onDestroy() {// 销毁
super.onDestroy();
System.out.println("onDestroy");
}

@Override
protected void onRestart() {// 从不可见恢复可见
super.onRestart();
System.out.println("onRestart");
}

public void play(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file:///mnt/sdcard/1.mp3"), "audio/*");
startActivity(intent);
}

@Override
protected void onSaveInstanceState(Bundle bundle) {// 摧毁的时候会自动执行
super.onSaveInstanceState(bundle);
System.out.println("onSaveInstanceState");
bundle.putString("data", "摧毁时保存的数据");
}

@Override
protected void onRestoreInstanceState(Bundle bundle) {// 恢复的时候会自动执行
super.onRestoreInstanceState(bundle);
System.out.println("onRestoreInstanceState: " + bundle.getString("data"));
}

public void change(View v) {//  代码实现横竖屏幕
switch (getResources().getConfiguration().orientation) {// 获取屏幕方向
case Configuration.ORIENTATION_LANDSCAPE:// 横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);// 改为竖屏
break;
case Configuration.ORIENTATION_PORTRAIT:// 竖屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 改为横屏
break;
}
}


}


.默认情况下, 横竖屏切换时会摧毁Activity重构, 因为要进行屏幕适配. 
可以使用onSaveInstanceState()保存数据, 用onRestoreInstanceState()恢复数据
onSaveInstanceState()在Activity失去焦点时(切换到后天)也会被调用, 如果Activity在后台被杀死了, 再次启动时会自动调用onRestoreInstanceState()
b.如果不需要屏幕适配, 那么可以通过定义属性控制Activity不摧毁重构
android:configChanges="orientation|screenSize"
这种情况下不执行任何生命周期方法, 也不会改变布局
c.固定Activity方向
android:screenOrientation="portrait"
在这种情况下, Activity不会摧毁重构, 也不会改变方向
d.相关代码
getResources().getConfiguration().orientation
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

这篇关于21 activity横竖屏切换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/961166

相关文章

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

Spring Boot实现多数据源连接和切换的解决方案

《SpringBoot实现多数据源连接和切换的解决方案》文章介绍了在SpringBoot中实现多数据源连接和切换的几种方案,并详细描述了一个使用AbstractRoutingDataSource的实... 目录前言一、多数据源配置与切换方案二、实现步骤总结前言在 Spring Boot 中实现多数据源连接

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等。通过DLL可以使用户很方便地调用C、C++、C#、VB等编程语言写的程序以及windows自带的大

MyBatis 切换不同的类型数据库方案

下属案例例当前结合SpringBoot 配置进行讲解。 背景: 实现一个工程里面在部署阶段支持切换不同类型数据库支持。 方案一 数据源配置 关键代码(是什么数据库,该怎么配就怎么配) spring:datasource:name: test# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSource# @需要修改 数据库连接及驱动u

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

【JavaScript】LeetCode:21-25

文章目录 21 最大子数组和22 合并区间23 轮转数组24 除自身以外数组的乘积25 缺失的第一个正数 21 最大子数组和 贪心 / 动态规划贪心:连续和(count)< 0时,放弃当前起点的连续和,将下一个数作为新起点,这里提供使用贪心算法解决本题的代码。动态规划:dp[i]:以nums[i]为结尾的最长连续子序列(子数组)和。 dp[i] = max(dp[i - 1]