我在一个活动中设置了一个ViewPager和FragmentPagerAdapter,其中包含3个片段.所有片段同时加载并使用保存在内存中
mPager.setOffscreenPageLimit(2);
Run Code Online (Sandbox Code Playgroud)
其中一个片段包含我想要全屏显示的相机预览,没有状态栏或操作栏.其他片段要求显示操作栏.
如何在保持其他两个片段正常的同时,仅将相机预览片段全屏制作?我尝试过使用主题,这意味着打破了操作栏.
以编程方式调用以下内容没有帮助,因为它强制整个活动全屏(因此其他两个片段随之而来):
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
Run Code Online (Sandbox Code Playgroud)
我也尝试过实现ViewPager.OnPageChangeListener:
public void onPageSelected(int position) {
if(position == 1)
getActionBar().hide();
else
getActionBar().show();
}
Run Code Online (Sandbox Code Playgroud)
这确实隐藏了操作栏,但它没有隐藏系统状态栏(我正在谈论通知,状态图标和时间的位置),并且操作栏隐藏/显示动画在滑动时也非常不连贯.
有关我想要做的事情的一个例子,请参阅Snapchat - 他们设法完美地完成相机和其他片段之间的滑动.
编辑:
所以我将onPageSelected更改为:
public void onPageSelected(int position) {
if(position == 1) {
MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
MainActivity.this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
} else {
MainActivity.this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
}
}
Run Code Online (Sandbox Code Playgroud)
这使我可以更改状态栏是否显示.但是,它会引起大量的猛击.操作栏的问题相同.
我注意到在Snapchat中状态栏在标签更改完成后上下滑动.我不确定如何实现这一点,所以有关这方面的任何建议将不胜感激.
目前,当您将外接显示器连接到支持镜像的 Android 手机时,手机会假设外接显示器设置为横向。因此,当手机垂直(在本例中为 Galaxy S III)纵向握持时,显示屏上的视频输出是纵向的,但在两侧以黑条居中。当然,当手机水平握持时,输出会填满外接显示器。
我正在寻找的是一种强制 Galaxy S III 镜像其屏幕的方法,这样当它以纵向放置时,输出将填满外部显示器。它必须在 Android 上运行 - 我不是特别在谈论特定的应用程序,它需要在所有应用程序中一致地运行。
外部显示器将垂直安装,因此 Galaxy S III 在纵向时的输出必须完全填满外部显示器并具有正确的方向。
谁能给我任何关于从哪里开始的建议?我已经查看了 S III 的源代码,但找不到任何线索(我没有在 Android 上编写自己的驱动程序的经验)。这将适用于美国变体(特别是 Verizon,尽管视频硬件 - Adreno 225 GPU 和 SiI9234 MHL 控制器芯片 - 在所有美国变体中都是相同的)。也许在该领域更有经验的人可以对此有所了解。