android开发做全屏界面时的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android开发做全屏界面时的问题相关的知识,希望对你有一定的参考价值。

用普通的Activity改成界面全屏,log就一直在跳Unexpected value from nativeGetEnabledTags: 0提示,循环地跳不停。
我新建了一个fullscreamActivity,运行log就不会跳那个提示。
但是fullscreamActivity的程序fullscreamActivity.java自带了一堆代码
我不懂具体是做什么的,想修改不知道从何下手,英语注释是硬伤。
谁能给一份中文讲解资料或中文注释

  两种全屏设置方法:
  方法一:在androidManifest.xml中的Application节点中修改android:theme属性
  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
  方法二:
  在onCreate方法中的setContentView调用前添加
  this.requestWindowFeature(Window.FEATURE_NO_TITLE);// 去标题栏
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);// 去掉Activity上面的状态栏
  此二法在网络上有很多介绍,运行后,我发现全屏功能不好用,经仔细查看,发现我在eclipse中创建工程时选的是4.0.3,模拟器在创建AVD 时选的是4.0.3(但看“关于...”中显示的Android版本为4.0.4),貌似模拟器版本比工程版本高呀,很是奇怪,最后把AVD删除重新创 建,这时我选择的是4.2.2,结果功能好用了,具体原因不明呀,留后续研究,这里把问题与解决方法写出来与大家分享!
  最后结论:工程用的SDK版本比Android模拟器要高(最好能高多一点),可以解决Android程序开发中关于设置全屏无效问题!
参考技术A 下个有道词典吧,英语渣必备神器啊,我现在8成都能看懂了。 参考技术B 1. 在Java代码中设置

[java] view plaincopy
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE); //无title
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN); //全屏
setContentView(R.layout.main);

在这里需要注意的是这两段Java代码必须放在setContentView( ); 之前,不然会报错,错误显示如下。

[plain] view plaincopy
01-14 05:25:41.429: E/AndroidRuntime(7405): Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content

2. 在Manifest文件中修改
http://www.ijiami.cn/Channels
在默认启动的Activity里添加 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 即可

[html] view plaincopy
<activity android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
参考技术C 这个是sdk的一个bug,不影响!追问

好吧,好像都是这么说的。但是看着一直跳,不知道会不会消耗太多资源~!

本回答被提问者采纳

画中画和全屏 - API 只能由用户手势启动

【中文标题】画中画和全屏 - API 只能由用户手势启动【英文标题】:Picture in picture and FullScreen together - API can only be initiated by a user gesture 【发布时间】:2020-04-23 20:08:41 【问题描述】:

我正在播放两个视频,就像这张照片一样:

有一个名为“进入全屏”的按钮。当有人点击那个按钮时,我想做两件事。

    视频播放器 2 将设置为画中画和 视频播放器 1 将设置为全屏。

我可以做全屏或画中画,但不能同时做全屏和画中画。错误抛出如下:

无法在“元素”上执行“请求全屏”:API 只能通过用户手势启动。 未捕获(承诺中)TypeError:全屏错误

我正在使用 jQuery,这是我的示例代码:

$('.enter-full-screen').click(event => 
  event.stopImmediatePropagation();
  event.stopPropagation();

  let pipResponse = $('#video-player-2')[0].requestPictueInPicture();

  pipResponse.then(() => 
    $('#video-player-1')[0].requestFullscreen() // Note: I am using a browser prefixes
      .then(/* ... */)
      .catch(/* ... */);
  )
);

更新:07.01.2020:我同时尝试了两个请求,但它也不起作用。它只适用于我首先要求的一个。

let pipResponse = $('#video-player-2')[0].requestPictueInPicture();
let fullscreenResponse = $('#video-player-1')[0].requestFullscreen();

Promise.all([pipResponse, fullscreenResponse])
    .then(/* code */)
    .catch(/* code */);

在这种情况下,只有 pip 有效,全屏请求会引发错误。如果我首先请求全屏,那么只有全屏有效 - pip 会引发错误。

我尝试使用 jQuery trigger('click') 自动触发另一个点击事件。仅适用于一个(点子或全屏),但不能同时使用!

非常感谢您的帮助。

【问题讨论】:

奇怪的是,鉴于您在用户调用的点击处理程序中调用该函数,您会收到该错误。代码是在 iframe 中运行,还是在您单独加载的另一个 DOM 中运行? 你用的是哪个 polyfill? .requestFullscreen() 在承诺中被调用,所以我猜浏览器不会跟踪该代码是否最初是由用户来宾触发的。难道你不能同时请求全屏和画中画,如果另一个失败则反转一个? @RoryMcCrossan 抱歉,这是一个错字 - 不是 polyfill,w3schools 建议的前缀。 w3schools.com/jsref/met_element_requestfullscreen.asp @AxelKöhler ,我尝试同时请求两者 - 不起作用。只适用于我首先要求的一个。 【参考方案1】:

我不确定picture-in-picture (PiP) API 是否适合这项工作 - 在这种情况下,全屏和画中画行为似乎是相互排斥的。

由于您已经在模拟 PiP 行为(如图所示),因此您应该能够在全屏时采用相同的方法。

不要尝试使单个视频元素全屏/画中画,而是使两个视频的单个公共父元素全屏。然后您可以将小视频放在大视频的顶部(就像您已经在做的那样)以提供画中画效果。

<!-- 1. Give the video players a common ancestor -->
<div id="video-group">
    <div id="video-player-1">...</div>
    <div id="video-player-2">...</div>
</div>


$('.enter-full-screen').click(event => 
    event.stopImmediatePropagation();
    event.stopPropagation();

    // 2. Make the ancestor element fullscreen, not the videos themselves
    $('#video-group')[0].requestFullscreen()
        .then(/* ... */)
        .catch(/* ... */);
);

这是一个用两个 YouTube 视频做“画中画”的简单粗暴的例子:

<button type="button"
    onclick="document.querySelector('#video-group').requestFullscreen();">
    Enter fullscreen
</button>

<div id="video-group">
    <iframe style="position: absolute"
      
    src="https://www.youtube.com/embed/9bZkp7q19f0" frameborder="0"
    allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

    <iframe style="position: absolute; bottom: 0; right: 0;"
     
    src="https://www.youtube.com/embed/dQw4w9WgXcQ" frameborder="0" 
    allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>

【讨论】:

谢谢,问题解决了——现在我可以弄清楚在我的情况下该怎么做。

以上是关于android开发做全屏界面时的问题的主要内容,如果未能解决你的问题,请参考以下文章

求解 android 图片点击一下就放大到全屏,再点一下就回到原界面,这个android源码谁有呢?

android 中如何点击一个图标实现另一个界面不是充满全屏的

Android fragment 中控制某一个界面全屏与否

android4.4上全屏界面实现禁止状态栏下拉

android的全屏设置的问题

Android Studio基础项目-布局XML设置的实战-全屏显示登录界面,去除按钮深颜色