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" ...
随机推荐
- alsa文章
http://blog.csdn.net/azloong/article/details/6140824 http://blog.csdn.net/tianshuai1111/article/deta ...
- JavaScript(DOM编程二)
文档加载完毕之后,在Window.onload方法中创建元素节点,添加到DOM文档中 代码演示: <html> <head lang="en"> <m ...
- CodeForcesGym 100548G The Problem to Slow Down You
The Problem to Slow Down You Time Limit: 20000ms Memory Limit: 524288KB This problem will be judged ...
- C# try-catch-return
正常执行try后才能执行finally,catch中的语句可能会影响finally的执行 使用 finally 块,可以清理在 Try 中分配的任何资源,而且,即使在 try 块中发生异常,您也可以运 ...
- Windows-hosts文件地址
C:\Windows\System32\drivers\etc # Copyright (c) - Microsoft Corp. # # This is a sample HOSTS file us ...
- Storm同时接收多个源(spout和bolt)
参考: http://blog.csdn.net/nyistzp/article/details/51483779
- Mina airQQ聊天 client篇(三)
开发工具 (FlashBuilder4.7) 程序类型(Adobe Air) Flex Air做的桌面程序,效果还挺好看的.最主要是Socket这一块,它也是异步的,而且在Flex中的事件机制比較强大 ...
- ES failed to notify ClusterStateListener java.lang.IllegalStateException: environment is not locked
ES出现异常: failed to notify ClusterStateListenerjava.lang.IllegalStateException: environment is not loc ...
- 2017-3-5 leetcode 442 531 533
今天莫名其妙睡到了中午,很难受... leetcode442 https://leetcode.com/problems/find-all-duplicates-in-an-array/?tab=De ...
- shell脚本创建和执行
shell脚本并不能作为正式的编程语言,因为它是在Linux的shell中运行的,所以称他为shell脚本. 事实上,shell脚本就是一些命令的集合. 我们不妨吧所有的操作都记录到一个文档中,然后去 ...