Unity Android(八) Unity Android获取键盘高度

需要的脚本:

package com.你的包名;

import android.app.Activity;
import android.graphics.Rect;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;


public class SoftKeyBoardListener {
    private View rootView;//activity的根视图
    int rootViewVisibleHeight;//纪录根视图的显示高度
    private OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener;

    public SoftKeyBoardListener(Activity activity) {
        //获取activity的根视图
        rootView = activity.getWindow().getDecorView();

        //监听视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变
        rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                //获取当前根视图在屏幕上显示的大小
                Rect r = new Rect();
                rootView.getWindowVisibleDisplayFrame(r);
                int visibleHeight = r.height();
                if (rootViewVisibleHeight == 0) {
                    rootViewVisibleHeight = visibleHeight;
                    return;
                }

                //根视图显示高度没有变化,可以看作软键盘显示/隐藏状态没有改变
                if (rootViewVisibleHeight == visibleHeight) {
                    return;
                }

                //根视图显示高度变小超过200,可以看作软键盘显示了
                if (rootViewVisibleHeight - visibleHeight > 200) {
                    if (onSoftKeyBoardChangeListener != null) {
                        onSoftKeyBoardChangeListener.keyBoardShow(rootViewVisibleHeight - visibleHeight);
                    }
                    rootViewVisibleHeight = visibleHeight;
                    return;
                }

                //根视图显示高度变大超过200,可以看作软键盘隐藏了
                if (visibleHeight - rootViewVisibleHeight > 200) {
                    if (onSoftKeyBoardChangeListener != null) {
                        onSoftKeyBoardChangeListener.keyBoardHide(visibleHeight - rootViewVisibleHeight);
                    }
                    rootViewVisibleHeight = visibleHeight;
                    return;
                }

            }
        });
    }

    private void setOnSoftKeyBoardChangeListener(OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {
        this.onSoftKeyBoardChangeListener = onSoftKeyBoardChangeListener;
    }

    public interface OnSoftKeyBoardChangeListener {
        void keyBoardShow(int height);

        void keyBoardHide(int height);
    }

    public static void setListener(Activity activity, OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {
        
        SoftKeyBoardListener softKeyBoardListener = new SoftKeyBoardListener(activity);
        softKeyBoardListener.setOnSoftKeyBoardChangeListener(onSoftKeyBoardChangeListener);
    }
}

在MainActivity里注册listener

public class MainActivity extends UnityPlayerActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SoftKeyBoardListener.setListener(MainActivity.this, new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() {
            @Override
            public void keyBoardShow(int height) {
                Log.d("lck","show height:"+height);
                Toast.makeText(MainActivity.this, "键盘显示 高度" + height, Toast.LENGTH_SHORT).show();

            }

            @Override
            public void keyBoardHide(int height) {
                Log.d("lck","hide height:"+height);
                Toast.makeText(MainActivity.this, "键盘隐藏 高度" + height, Toast.LENGTH_SHORT).show();
            }
        });
    }

最后可以回调给Unity

//给Unity发送消息  object  UnityMethod  content
public void  UnitySendMessage(String s,String s1,String s2)
{
    UnityPlayer.UnitySendMessage(s,s1,s2);
}

//或者通过AndroidJavaProxy回调给Unity

亲测可用!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Unity获取Android设备的Wi-Fi信息,你需要使用Android的Java API。以下是一个简单的例子: 1. 首先,在Unity中创建一个C#脚本。 2. 在脚本中编写一个获取Wi-Fi信息的函数,并使用Android Java API来实现它。代码如下: ``` using UnityEngine; using System.Collections; public class WifiManager : MonoBehaviour { AndroidJavaObject wifiManager; void Start () { AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = activityClass.GetStatic<AndroidJavaObject>("currentActivity"); wifiManager = activity.Call<AndroidJavaObject>("getSystemService", "wifi"); } public string[] GetWifiList() { AndroidJavaObject wifiList = wifiManager.Call<AndroidJavaObject>("getScanResults"); int count = wifiList.Call<int>("size"); string[] wifiArray = new string[count]; for (int i = 0; i < count; i++) { AndroidJavaObject wifiScanResult = wifiList.Call<AndroidJavaObject>("get", i); string wifiName = wifiScanResult.Call<string>("SSID"); wifiArray[i] = wifiName; } return wifiArray; } } ``` 3. 在Unity中创建一个空物体,并将脚本添加到它上面。 4. 在脚本中调用GetWifiList()函数,以获取Wi-Fi列表。例如: ``` WifiManager wifiManager = GetComponent<WifiManager>(); string[] wifiList = wifiManager.GetWifiList(); ``` 5. 编译并在Android设备上运行程序,以获取Wi-Fi列表。 需要注意的是,这个例子只是获取Wi-Fi列表中的SSID信息。如果你需要更多的Wi-Fi信息,你可以查阅Android的Java API文档,并根据需要修改代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值