unity 显示、隐藏Android导航栏
1、下面的返回、home栏可用Screen.fullScreen控制
2、导航栏的显示和隐藏用下面代码控制
private AndroidJavaObject currentActivity
{
get
{
return new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
}
} /// <summary>
/// 隐藏上方状态栏
/// </summary>
public void HideStatusBar()
{
#if UNITY_ANDROID
currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
{
currentActivity.Call<AndroidJavaObject>("getWindow").Call("clearFlags", 2048); }));
#endif
Debug.Log("hide status bar");
} /// <summary>
/// 显示上方状态栏
/// </summary>
public void ShowStatusBar()
{
#if UNITY_ANDROID
currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
{
currentActivity.Call<AndroidJavaObject>("getWindow").Call("addFlags", 2048);// WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN
}));
#endif
Debug.Log("show status bar");
}
3、
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class AndroidInterface
{ private static AndroidInterface instance;
public static AndroidInterface Instance {
get {
if (instance==null)
{
instance = new AndroidInterface();
}
return instance;
}
}
private AndroidInterface() { } private AndroidJavaObject currentActivity
{
get
{
return new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
}
} #region
/// <summary>
/// 设置全面屏
/// </summary>
/// <param name="isSetNotchScreen"></param>
public void SafeArea(bool isSetNotchScreen)
{
currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
{
AndroidJavaObject currentWindow = currentActivity.Call<AndroidJavaObject>("getWindow");//返回Window AndroidJavaObject lp = currentWindow.Call<AndroidJavaObject>("getAttributes");//返回WindowManager.LayoutParams
if (isSetNotchScreen)
{
//int WindowManager_LayoutParams_FLAG_LAYOUT_IN_OVERSCAN = 33554432;//允许窗口内容扩展到屏幕的过扫描区域(如果有)。窗口仍应正确定位其内容以考虑过扫描区域。
int WindowManager_LayoutParams_FLAG_TRANSLUCENT_STATUS = 67108864;//有透明的状态栏和导航栏,且屏幕延伸至状态栏内部
lp.Set("flags", WindowManager_LayoutParams_FLAG_TRANSLUCENT_STATUS);
}
else
{
int WindowManager_LayoutParams_FLAG_LAYOUT_IN_SCREEN = 256;
lp.Set("flags", WindowManager_LayoutParams_FLAG_LAYOUT_IN_SCREEN);
}
currentWindow.Call("setAttributes", lp);
}));
}
#endregion #region 标题栏
/// <summary>
/// 隐藏上方状态栏
/// </summary>
public void HideStatusBar()
{
#if UNITY_ANDROID&&!UNITY_EDITOR
//currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
//{
//currentActivity.Call<AndroidJavaObject>("getWindow").Call("clearFlags", 2048);
//}));
Screen.fullScreen = true;
#endif Debug.Log("hide status bar");
} /// <summary>
/// 显示上方状态栏
/// </summary>
public void ShowStatusBar()
{
#if UNITY_ANDROID&&!UNITY_EDITOR
//currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
//{
// currentActivity.Call<AndroidJavaObject>("getWindow").Call("addFlags", 2048);// WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN
//}));
Screen.fullScreen = false;
#endif
Debug.Log("show status bar");
}
#endregion 标题栏 #region 摄像头
AndroidJavaObject androidCamera; AndroidJavaObject CrazyFocusPocus()
{ // Get activity instance (standard way, solid)
var pl_class = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var currentActivity = pl_class.GetStatic<AndroidJavaObject>("currentActivity"); // Get instance of UnityPlayer (hacky but will live)
var pl_inst = currentActivity.Get<AndroidJavaObject>("mUnityPlayer"); // Get list of camera wrappers in UnityPlayer (very hacky, will die if D becomes C tomorrow)
//var list = pl_inst.Get<AndroidJavaObject>("D");
var list = pl_inst.Get<AndroidJavaObject>("m");
Debug.Log("--------" + list); int x = list.Call<int>("size");
Debug.Log("--------"+x);
if (x == 0) return null; // Get the first element of list (active camera wrapper)
var cam_holder = list.Call<AndroidJavaObject>("get", 0); // get camera (this is totally insane, again if "a" becomes not-"a" one day )
var cam = cam_holder.Get<AndroidJavaObject>("a"); //// Call my setup camera routine in Android plugin (will set params and call autoFocus)
//var jc = new AndroidJavaClass("org.example.ScriptBridge.JavaClass");
//jc.CallStatic("enableAutofocus", new[] { cam }); return cam;
} public void FlashCtrl(bool isOpenFlashOfthisCamera)
{
////AndroidJavaObject cameraManager = new AndroidJavaClass("android.hardware.camera2.CameraManager");
//AndroidJavaObject Camera2Wrapper_androidClass = currentActivity.Get<AndroidJavaObject>("mUnityPlayer").Get<AndroidJavaObject>("p");
//AndroidJavaObject a_androidClass = Camera2Wrapper_androidClass.Get<AndroidJavaObject>("b"); //AndroidJavaObject CameraManager_androidClass = a_androidClass.GetStatic<AndroidJavaObject>("b");
//string[] cameraName= a_androidClass.GetStatic<string[]>("c");
//Debug.Log(CameraManager_androidClass); //Debug.Log(cameraName);
//CameraManager_androidClass.Call("setTorchMode", cameraName[0], isOpenFlashOfthisCamera); AndroidJavaClass cameraManager = new AndroidJavaClass("android.os.IHardwareService");
cameraManager.Call("setFlashlightEnabled", isOpenFlashOfthisCamera);
} /// <summary>
/// 打开摄像头
/// </summary>
public void StartCamera(int cameraID,WebCamTexture webCamTexture)
{
if (androidCamera==null)
{
//androidCamera = new AndroidJavaClass("android.hardware.Camera").CallStatic<AndroidJavaObject>("open", cameraID);
androidCamera = CrazyFocusPocus();
}
AndroidJavaObject surfaceTexture = new AndroidJavaClass("android.graphics.SurfaceTexture");
AndroidJavaObject setPreviewTexture= androidCamera.Call<AndroidJavaObject>("setPreviewTexture", surfaceTexture);
Debug.Log("摄像头预览");
} public void StartFlash()
{
try
{
//AndroidJavaObject androidCamera = new AndroidJavaClass("android.hardware.Camera").CallStatic<AndroidJavaObject>("open");
if (androidCamera == null)
{
//androidCamera = CrazyFocusPocus();
androidCamera = new AndroidJavaClass("android.hardware.Camera").CallStatic<AndroidJavaObject>("open");
} AndroidJavaObject cameraParameter = androidCamera.Call<AndroidJavaObject>("getParameters");
cameraParameter.Call("setFlashMode", new AndroidJavaObject("java.lang.String", "torch"));
androidCamera.Call("setParameters", cameraParameter);
androidCamera.Call("startPreview "); // androidCamera.Call("release");//释放掉,不释放其他程序无法调用摄像头 }
catch (AndroidJavaException e)
{
Debug.LogError(e.StackTrace);
}
Debug.Log("打开闪光灯");
} public void StopFlash()
{
try
{
AndroidJavaObject androidCamera = new AndroidJavaClass("android.hardware.Camera").CallStatic<AndroidJavaObject>("open");
AndroidJavaObject cameraParameter = androidCamera.Call<AndroidJavaObject>("getParameters");
cameraParameter.Call("setFlashMode", new AndroidJavaObject("java.lang.String", "off"));
androidCamera.Call("setParameters", cameraParameter);
androidCamera.Call("release");//释放掉,不释放其他程序无法调用摄像头
}
catch (AndroidJavaException e)
{
Debug.LogError(e.StackTrace);
}
Debug.Log("关闭闪光灯");
}
#endregion 摄像头
}
unity 显示、隐藏Android导航栏的更多相关文章
- iOS UITableView表视图滚动隐藏UINavigationController导航栏
UITableView 继承于UIScrollView 所以UIScrollView 的代理方法相同适用于UITableView 中 隐藏导航栏的方法为: self.navigationControl ...
- phpcmsv9如何实现添加栏目时不在首页内容区显示只在导航栏显示
之前王晟璟一直使用PHPCMSV9系统建过自己的个人门户网站,同时也建立了一个其他类型的网站,感觉非常不错,我不得不说PHPCMSV9的功能非常齐全,非常强大. 但有一点时常让王晟璟感到很烦脑,那就是 ...
- 极简操作无需root隐藏S8导航栏和状态栏
距离三星Galaxy S8国行发布快一个礼拜了,相信论坛不少小同伴已经拿到手,许多人和我一样被那块全视曲面屏给诱惑剁手的,当拿到手把玩一段时间后却發现这么美的一块屏幕居然大部分应用上下都有一行碍眼的状 ...
- Dedecms丨显示指定的导航栏
代码实例: {dede:channelartlist type='top' typeid='9,12,10' row='3' orderby='sortrank'}<li><a hr ...
- 控制器全屏显示.不展示导航栏navigationbar
有些时候需要 让控制器全屏显示 ,不需要导航栏,或者说是在导航栏底部 基本情况: >控制器全屏 ``` if (@available(iOS 11.0, *)) { self.tableView ...
- react-native react-navigation StackNavigator android导航栏 标题下居中
navigationOptions:({ navigation }) => ({ , textAlign:'center' }}) 如上设置即可,如果有返回箭头,那么右边也要加一个 占位的或者设 ...
- Android导航栏ActionBar的具体分析
尊重原创:http://blog.csdn.net/yuanzeyao/article/details/39378825 关于ActionBar,相信大家并不陌生,可是真正能够熟练使用的也不是许多,这 ...
- ionic 进入多级目录以后隐藏底部导航栏(tabs)(完美解决方案)
公司开始使用ionic开发项目,在此记录下把遇到的问题,网上有大牛已经把解决方法整出来了,不过记录在自己这里方便查阅. 这篇记录在有tabs的项目里,进入子层级时,底部导航还一直存在,本人是要让他只在 ...
- js制作点击会自动隐藏的导航栏(固定在在头部的)
想必大家应该见过这样的特效,本来头部是固定在网页的最上方的,点一下缩进去,再点一下 又可以缩回来,这种效果怎么实现的呢,我今天就做了一个.菜鸟勿喷. @charset "utf-8" ...
随机推荐
- selenium+java解决富文本输入
方法一: Actions actions = new Actions(driver); actions.sendKeys(Keys.TAB).perform(); //鼠标通过tab要先移到富文本框中 ...
- ioremap映射函数
一.ioremap() 函数 Linux在io.h头文件中声明了函数ioremap(),用来将I/O内存资源的物理地址映射到核心虚地址空间(3GB-4GB)中(这里是内核空间),原型如下: 1.ior ...
- [SharePoint2010开发入门经典]一、SPS2010介绍
本章概要: 1.熟悉SPS基本特性 2.理解SPS基础架构 3.开发SPS工具
- Android接口和框架学习
Android接口和框架学习 缩写: HAL:HardwareAbstraction Layer.硬件抽象层 CTS:CompatibilityTest Suite,兼容性測试套件 Android让你 ...
- ym—— Android网络框架Volley(终极篇)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103).谢谢支持! 没看使用过Volley的同学能够,先看看Android网络框架Volley(体验篇)和 ...
- 淘宝数据库OceanBase SQL编译器部分 源代码阅读--生成逻辑计划
淘宝数据库OceanBase SQL编译器部分 源代码阅读--生成逻辑计划 SQL编译解析三部曲分为:构建语法树.生成逻辑计划.指定物理运行计划. 第一步骤,在我的上一篇博客淘宝数据库OceanBas ...
- Android Handler 具体解释
Android开发中常常使用Handler来实现"跨越线程(Activity)更新UI".本文将从源代码角度回答:为什么使用Handler可以跨线程更新UI?为什么跨线程更新UI一 ...
- Nginx系列(三)--管理进程、多工作进程设计
Nginx由一个master进程和多个worker进程组成,但master进程或者worker进程中并不会再创建线程. 一.master进程和worker进程的作用 master进程 不须要处理网络事 ...
- 机器学习 LR中的参数迭代公式推导——极大似然和梯度下降
Logistic本质上是一个基于条件概率的判别模型(DiscriminativeModel). 函数图像为: 通过sigma函数计算出最终结果,以0.5为分界线,最终结果大于0.5则属于正类(类别值为 ...
- webservice为什么不能用List参数,而只能用数组代替,我想是否因为List没有具体的类型信息,但用泛型的List(如:List<customer>)为什么也不行。如果用作参数的类中含有List<T>字段该如何处理?webservice参数是否支持
转自:https://social.microsoft.com/Forums/zh-CN/aded4301-b5f1-4aa6-aa46-16c46a60d05e/webservice20026201 ...