android 强制横屏布局,Activity强制横竖屏和全屏的方法
废话不多说,直接上代码,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强制横竖屏和全屏的方法相关推荐
- android某个活动全屏,android – 重新组合活动布局,以便在旋转屏幕时全屏播放视频...
我终于找到了做到这一点的好方法. 在 Android文档中,指定当您需要处理修改(方向,键盘--)而不重新创建新Activity时,您应该通过覆盖Activity类的onConfigurationCh ...
- Android 强制设置横屏或竖屏 设置全屏
Android 强制设置横屏或竖屏 设置全屏 全屏 在Activity的onCreate方法中的setContentView(myview)调用之前添加下面代码 requestWindowFeatur ...
- Android 切换全屏,取消全屏
切换全屏,取消全屏 /*** 切换全屏,取消全屏** @param isChecked*/ private void switchFullScreen(boolean isChecked) {if ( ...
- android dialog 横向全屏,Dialog全屏,去掉状态栏的方式
dialog即使设置全屏了,但还是有状态栏占用高度这: 直接将下面这行代码放到你的dialog中即可 @Override protected void onStart() { super.onStar ...
- 在android studio下 如何去掉任务栏以及显示全屏
比较详细的从新建开始(末尾有比较粗暴的使用代码的方法) 1.首先建立一个新的的布局文件 2.新建一个java文件,并关联之前建立的布局文件. import android.os.Bundle; imp ...
- android播放器竖屏,Android 巧用DecorView实现列表或详情视频播放器竖屏及全屏切换...
在平时开发过程中,如果使用到视频播放器的功能,那就一定会涉及到全屏切换的操作 以往常规操作基本如下 设置全屏播放步骤 1.横屏 2.视频播放器尺寸调整 3.隐藏其他多余控件 恢复小屏播放 1.竖屏 2 ...
- Android端App开发之刘海屏手机全屏设置实践
笔者最近开发一款视频同步演示产品,主要功能是:多台手机设备在手机专卖店展台区同步播放宣传视频,即在任何时间打开任一台设备都要同步播放视频,达到宣传产品和整体化一的用户体验,原理即在服务器打开网页播放展 ...
- 手机投屏不是全屏怎么办_手机、电脑投屏怎么全屏
原标题:手机.电脑投屏怎么全屏 手机.电脑投屏怎么全屏 为什么我们将手机.电脑投屏在大屏幕上经常会出现不是满屏的情况.主要原因是因为投屏端(手机.电脑)和显示端的长宽比例不一致导致的. Windows ...
- 视频全屏非全屏切换,状态栏动态显示隐藏兼容性解决
列表中视频全屏/非全屏切换时,需要动态显示/隐藏状态栏 View类提供了setSystemUiVisibility和getSystemUiVisibility方法,这两个方法实现对状态栏的动态显示或隐 ...
- 远程桌面退出全屏/不能全屏/全屏切换的技巧
远程桌面退出全屏/不能全屏/全屏切换的技巧退出全屏 问:我的电脑远程登录到服务器上并且切换到了全屏状态,全屏后发现桌面顶部没有浮动工具栏了,想退出全屏状态,不知如何退出了,最后,只有重启电脑.想知道如 ...
最新文章
- 区块链技术之以太坊ETH白皮书
- 数据绑定控件导出到excel
- 线性Transformer应该不是你要等的那个模型
- linux awk数组使用
- Oracle RMAN备份与还原
- UA PHYS515A 电磁理论IV 时变电磁场理论4 电磁场的动量与麦克斯韦压缩能张量
- python读取文件的时候去重_对python读写文件去重、RE、set的使用详解
- 使用C++实现FC红白机模拟器 概述
- mac mini php开发,mac mini主要用来干嘛
- javaweb_util_excel模板横向纵向循环
- python转换整数_在Python中将数字转换为整数列表
- 【汇编】微机原理与接口技术课程设计
- 红米note3照相数据丢失
- GEE报错Tile error: Error in map(ID=198102T01):Element.copyProperties: The source parameter is require
- 关于return返回
- Delphi导出word
- Dockerfile 中的 VOLUME 与 docker -v 区别
- Python的reduce
- 程序员你伤不起(二)
- c++面试常见问题汇总
热门文章
- 职场纵横:IT职位全面解析(计算机类要找工作的朋友多看看)
- java通过反射调用有参数的方法
- 用python爬取堆糖图片-小白级
- win7系统激活最简单方法
- 共话新基建,墨天轮数据库大咖讲坛第一期圆满成功!(附第二批中奖名单)...
- 爬虫爬出来的数据不全_Web Scraper教程(二)爬虫入门之当当畅销书爬取
- 5G的落地现状与未来变局
- 打开计算机读取硬盘慢,机械硬盘读写速度慢几招优化方法提升!
- 电影院订票选座小程序,电影购票小程序,微信小程序电影院订票系统毕设作品
- 6python项目 体脂率计算优化2