废话不多说,直接上代码,xml布局如下:

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

android:id="@+id/tvText"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="#cccccc"

android:padding="8dp"

android:text="开始切换"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintRight_toRightOf="parent"

app:layout_constraintTop_toTopOf="parent" />

布局里面就一个TextView,其他的什么都没有,Activity里面的代码如下:

import android.app.Activity;

import android.content.pm.ActivityInfo;

import android.content.res.Configuration;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.Window;

import android.view.WindowManager;

import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

private final String TAG = MainActivity.class.getSimpleName();

private Activity context;

private TextView tvText;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

this.context = MainActivity.this;

setContentView(R.layout.activity_main);

this.tvText = this.findViewById(R.id.tvText);

tvText.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// 如果当前是横屏

if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {

// 强制竖屏

context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

// 取消全屏操作

setFullscreen(context, false);

}

// 如果当前是竖屏

else if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {

// 强制横屏

context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

// 执行全屏操作

setFullscreen(context, true);

}

}

});

}

/**

* 如果需要针对刘海屏执行特殊操作,比如横屏的时候将刘海部分执行黑屏,那么下面的代码可以实现操作(如果并不需要针对刘海屏执行操作,那么不需要配置)

* @param newConfig

*/

@Override

public void onConfigurationChanged(Configuration newConfig) {

super.onConfigurationChanged(newConfig);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {

// 横屏的时候隐藏刘海屏的刘海部分

if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

WindowManager.LayoutParams lp = getWindow().getAttributes();

lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;

getWindow().setAttributes(lp);

}

// 竖屏的时候展示刘海屏的刘海部分

else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {

WindowManager.LayoutParams lp = getWindow().getAttributes();

lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;

getWindow().setAttributes(lp);

}

}

}

// 执行全屏和取消全屏的方法

private static void setFullscreen(Activity context, boolean fullscreen) {

Window window = context.getWindow();

WindowManager.LayoutParams winParams = window.getAttributes();

final int bits = WindowManager.LayoutParams.FLAG_FULLSCREEN;

if (fullscreen) {

winParams.flags |= bits;

} else {

winParams.flags &= ~bits;

}

window.setAttributes(winParams);

}

}

其中,执行横竖屏操作的 setRequestedOrientation 方法来自于Activity,强制全屏和取消全屏的操作需要修改Window的相关参数,这个Activity在Manifest.xml中的配置如下:

android:name="android.max_aspect"

android:value="2.4" />

android:name="android.notch_support"

android:value="true" />

android:name="notch.config"

android:value="portrait|landscape" />

android:name=".MainActivity"

android:configChanges="keyboardHidden|orientation|screenSize"

android:screenOrientation="portrait">

android 强制横屏布局,Activity强制横竖屏和全屏的方法相关推荐

  1. android某个活动全屏,android – 重新组合活动布局,以便在旋转屏幕时全屏播放视频...

    我终于找到了做到这一点的好方法. 在 Android文档中,指定当您需要处理修改(方向,键盘--)而不重新创建新Activity时,您应该通过覆盖Activity类的onConfigurationCh ...

  2. Android 强制设置横屏或竖屏 设置全屏

    Android 强制设置横屏或竖屏 设置全屏 全屏 在Activity的onCreate方法中的setContentView(myview)调用之前添加下面代码 requestWindowFeatur ...

  3. Android 切换全屏,取消全屏

    切换全屏,取消全屏 /*** 切换全屏,取消全屏** @param isChecked*/ private void switchFullScreen(boolean isChecked) {if ( ...

  4. android dialog 横向全屏,Dialog全屏,去掉状态栏的方式

    dialog即使设置全屏了,但还是有状态栏占用高度这: 直接将下面这行代码放到你的dialog中即可 @Override protected void onStart() { super.onStar ...

  5. 在android studio下 如何去掉任务栏以及显示全屏

    比较详细的从新建开始(末尾有比较粗暴的使用代码的方法) 1.首先建立一个新的的布局文件 2.新建一个java文件,并关联之前建立的布局文件. import android.os.Bundle; imp ...

  6. android播放器竖屏,Android 巧用DecorView实现列表或详情视频播放器竖屏及全屏切换...

    在平时开发过程中,如果使用到视频播放器的功能,那就一定会涉及到全屏切换的操作 以往常规操作基本如下 设置全屏播放步骤 1.横屏 2.视频播放器尺寸调整 3.隐藏其他多余控件 恢复小屏播放 1.竖屏 2 ...

  7. Android端App开发之刘海屏手机全屏设置实践

    笔者最近开发一款视频同步演示产品,主要功能是:多台手机设备在手机专卖店展台区同步播放宣传视频,即在任何时间打开任一台设备都要同步播放视频,达到宣传产品和整体化一的用户体验,原理即在服务器打开网页播放展 ...

  8. 手机投屏不是全屏怎么办_手机、电脑投屏怎么全屏

    原标题:手机.电脑投屏怎么全屏 手机.电脑投屏怎么全屏 为什么我们将手机.电脑投屏在大屏幕上经常会出现不是满屏的情况.主要原因是因为投屏端(手机.电脑)和显示端的长宽比例不一致导致的. Windows ...

  9. 视频全屏非全屏切换,状态栏动态显示隐藏兼容性解决

    列表中视频全屏/非全屏切换时,需要动态显示/隐藏状态栏 View类提供了setSystemUiVisibility和getSystemUiVisibility方法,这两个方法实现对状态栏的动态显示或隐 ...

  10. 远程桌面退出全屏/不能全屏/全屏切换的技巧

    远程桌面退出全屏/不能全屏/全屏切换的技巧退出全屏 问:我的电脑远程登录到服务器上并且切换到了全屏状态,全屏后发现桌面顶部没有浮动工具栏了,想退出全屏状态,不知如何退出了,最后,只有重启电脑.想知道如 ...

最新文章

  1. 区块链技术之以太坊ETH白皮书
  2. 数据绑定控件导出到excel
  3. 线性Transformer应该不是你要等的那个模型
  4. linux awk数组使用
  5. Oracle RMAN备份与还原
  6. UA PHYS515A 电磁理论IV 时变电磁场理论4 电磁场的动量与麦克斯韦压缩能张量
  7. python读取文件的时候去重_对python读写文件去重、RE、set的使用详解
  8. 使用C++实现FC红白机模拟器 概述
  9. mac mini php开发,mac mini主要用来干嘛
  10. javaweb_util_excel模板横向纵向循环
  11. python转换整数_在Python中将数字转换为整数列表
  12. 【汇编】微机原理与接口技术课程设计
  13. 红米note3照相数据丢失
  14. GEE报错Tile error: Error in map(ID=198102T01):Element.copyProperties: The source parameter is require
  15. 关于return返回
  16. Delphi导出word
  17. Dockerfile 中的 VOLUME 与 docker -v 区别
  18. Python的reduce
  19. 程序员你伤不起(二)
  20. c++面试常见问题汇总

热门文章

  1. 职场纵横:IT职位全面解析(计算机类要找工作的朋友多看看)
  2. java通过反射调用有参数的方法
  3. 用python爬取堆糖图片-小白级
  4. win7系统激活最简单方法
  5. 共话新基建,墨天轮数据库大咖讲坛第一期圆满成功!(附第二批中奖名单)...
  6. 爬虫爬出来的数据不全_Web Scraper教程(二)爬虫入门之当当畅销书爬取
  7. 5G的落地现状与未来变局
  8. 打开计算机读取硬盘慢,机械硬盘读写速度慢几招优化方法提升!
  9. 电影院订票选座小程序,电影购票小程序,微信小程序电影院订票系统毕设作品
  10. 6python项目 体脂率计算优化2