android虚拟键影响布局,解决Android 全屏虚拟按键弹出挤压布局问题!

本文介绍了如何处理Android设备上的全屏应用在虚拟按键弹出时导致的布局挤压问题。提供了隐藏和显示虚拟按键的方法,并给出判断设备是否具有虚拟按键的代码,以及设置虚拟按键背景颜色的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

隐藏虚拟按键

public static void hideBottomUIMenu(Activity activity) {

if (!checkDeviceHasNavigationBar(activity))

return;

if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {

View v = activity.getWindow().getDecorView();

v.setSystemUiVisibility(View.GONE);

} else if (Build.VERSION.SDK_INT >= 19) {

View decorView = activity.getWindow().getDecorView();

int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE

| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar

| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar

| View.SYSTEM_UI_FLAG_IMMERSIVE;

decorView.setSystemUiVisibility(uiOptions);

}

}

显示虚拟按键

public static void showBottomUIMenu(Activity activity) {

if (!checkDeviceHasNavigationBar(activity))

return;

if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {

//低版本sdk

View v = activity.getWindow().getDecorView();

v.setSystemUiVisibility(View.VISIBLE);

} else if (Build.VERSION.SDK_INT >= 19) {

View decorView = activity.getWindow().getDecorView();

int uiOptions =

View.SYSTEM_UI_FLAG_LAYOUT_STABLE

//下面这一句是关键,不加这一句,虚拟键盘弹出时将挤压布局

| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;

decorView.setSystemUiVisibility(uiOptions);

}

}

获取是否有虚拟按键

public static boolean checkDeviceHasNavigationBar(Context context) {

boolean hasMenuKey = ViewConfiguration.get(context)

.hasPermanentMenuKey();

boolean hasBackKey = KeyCharacterMap

.deviceHasKey(KeyEvent.KEYCODE_BACK);

if (!hasMenuKey & !hasBackKey) {

// 做任何你需要做的,这个设备有一个导航栏

return true;

}

return false;

}

设置虚拟按键背景颜色

public static void setNavigationColor(Activity activity, int color) {

if (!checkDeviceHasNavigationBar(activity))

return;

if (Build.VERSION.SDK_INT > 21) {

activity.getWindow().setNavigationBarColor(color);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值