Android 底部导航栏-极致简单版

Android13手势导航优化:彻底隐藏SystemUI底部白线 本文详细解析了在Android 13系统中彻底隐藏SystemUI底部导航白线的实现方法。通过定位并修改SystemUI的navigation_bar.xml布局文件,将导航栏背景设置为@null,即可在保留完整手势功能的前提下,实现桌面底部的视觉隐藏,打造沉浸式全面屏体验。 阅读详情

   底部导航栏是常用的一个工具,大多数的APP都带有底部导航栏,底部导航栏可以方便用户一只手操作,切占用内存比常规的Activity少,底部导航栏使用Fragment+RadioGroup方法来实现,示意图如下:


1.准备8张导航栏的切换图(4张未选中状态,4张选中状态)

          ID:radio_msg_0,radio_friend_0,radio_look_0,radio_my_0

                  radio_msg_1,radio_friend_1,radio_look_1,radio_my_1

2.设置ActivityLayout.xml

(1)放置1个RadioGroup

          ID:radiogroup

(2)放置4个RadioButton(根据自己的需要放置RadioButton,一般不超过5个)

          ID:btn_0,btn_1,btn_2,btn_3

(3)放置4个Fragment(RadioButton对应的数量)

          ID:fragment_msg,fragment_friend,fragment_look,fragment_my

<RelativeLayout     
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"	
    tools:context="com.example.mytest.MainActivity"> 
    
       <fragment
           android:id="@+id/fragment_msg"
           android:name="com.example.MyFragment.MsgFragment"
           android:layout_width="match_parent"
           android:layout_height="80dp"
           android:layout_above="@+id/radiogroup"
           android:layout_alignParentTop="true" />
       <fragment
           android:id="@+id/fragment_friend"
           android:name="com.example.MyFragment.FriendFragment"
           android:layout_width="match_parent"
           android:layout_height="80dp"
           android:layout_above="@+id/radiogroup"
           android:layout_alignParentTop="true" />
       <fragment
           android:id="@+id/fragment_look"
           android:name="com.example.MyFragment.LookFragment"
           android:layout_width="match_parent"
           android:layout_height="80dp"
           android:layout_above="@+id/radiogroup"
           android:layout_alignParentTop="true" />
        <fragment
           android:id="@+id/fragment_my"
           android:name="com.example.MyFragment.MyFragment"
           android:layout_width="match_parent"
           android:layout_height="80dp"
           android:layout_above="@+id/radiogroup"
           android:layout_alignParentTop="true" />

    <RadioGroup
        android:id="@+id/radiogroup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:text="female" >

        <RadioButton
            android:id="@+id/btn_0"
            android:layout_width="fill_parent"
            android:layout_height="54dp"
            android:layout_alignParentLeft="true"
            android:layout_weight="1"
            android:background="@drawable/radio_msg"
            android:button="@null"
            android:checked="true"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:textSize="17.0sp" />
        <RadioButton
            android:id="@+id/btn_1"
            android:layout_width="fill_parent"
            android:layout_height="54dp"
            android:layout_weight="1"
            android:background="@drawable/radio_friend"
            android:button="@null"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:textSize="17.0sp" />
        <RadioButton
            android:id="@+id/btn_2"
            android:layout_width="fill_parent"
            android:layout_height="54dp"
            android:layout_weight="1"
            android:background="@drawable/radio_look"
            android:button="@null"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:textSize="17.0sp" />
        <RadioButton
            android:id="@+id/btn_3"
            android:layout_width="fill_parent"
            android:layout_height="54dp"
            android:layout_weight="1"
            android:background="@drawable/radio_my"
            android:button="@null"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:textSize="17.0sp" />
    </RadioGroup>

</RelativeLayout>

3.设置每个Radio的xml布局

         XML ID:radio_msg,radio_friend,radio_look,radio_my

<?xml version="1.0" encoding="utf-8"?>   
<selector xmlns:android="http://schemas.android.com/apk/res/android">   
    <item   
    android:state_checked="false"   
    android:drawable="@drawable/radio_msg_0" />   
    <item   
    android:state_checked="true"   
    android:drawable="@drawable/radio_msg_1" />   
</selector>  
<?xml version="1.0" encoding="utf-8"?>   
<selector xmlns:android="http://schemas.android.com/apk/res/android">   
    <item   
    android:state_checked="false"   
    android:drawable="@drawable/radio_friend_0" />   
    <item   
    android:state_checked="true"   
    android:drawable="@drawable/radio_friend_1" />   
</selector>  
<?xml version="1.0" encoding="utf-8"?>   
<selector xmlns:android="http://schemas.android.com/apk/res/android">   
    <item   
    android:state_checked="false"   
    android:drawable="@drawable/radio_look_0" />   
    <item   
    android:state_checked="true"   
    android:drawable="@drawable/radio_look_1" />   
</selector>  
<?xml version="1.0" encoding="utf-8"?>   
<selector xmlns:android="http://schemas.android.com/apk/res/android">   
    <item   
    android:state_checked="false"   
    android:drawable="@drawable/radio_my_0" />   
    <item   
    android:state_checked="true"   
    android:drawable="@drawable/radio_my_1" />   
</selector>  

4.设置每个Fragment的xml布局

        XML ID:fragment_msg,fragment_friend,fragment_friend,fragment_friend

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <TextView
        android:id="@+id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="这是聊天" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="这是好友" />
    
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <TextView
        android:id="@+id/text4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="这是看点" />
    
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <TextView
        android:id="@+id/text3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="这是我的" />
    
</RelativeLayout>

5.建立继承Fragment类 新建一个package用来存放4个Fragment类

ID:MsgFragment,FriendFragment,LookFragment,MyFragment

package com.example.MyFragment;

import com.example.mytest.R;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class MsgFragment extends Fragment
{

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
	{
		//mxl文件
		return inflater.inflate(R.drawable.fragment_msg, container, false);
	}

}
package com.example.MyFragment;

import com.example.mytest.R;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FriendFragment extends Fragment
{

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
	{
		//mxl文件
		return inflater.inflate(R.drawable.fragment_friend, container, false);
	}

}
package com.example.MyFragment;

import com.example.mytest.R;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class LookFragment extends Fragment
{

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
	{
		//mxl文件
		return inflater.inflate(R.drawable.fragment_look, container, false);
	}

}
package com.example.MyFragment;

import com.example.mytest.R;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class MyFragment extends Fragment
{

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
	{
		//mxl文件
		return inflater.inflate(R.drawable.fragment_my, container, false);
	}

}

6.在Activity里设置Activity

package com.example.mytest;

import com.example.MyFragment.FriendFragment;
import com.example.MyFragment.MsgFragment;
import com.example.MyFragment.MyFragment;
import com.example.mytest.R;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.RadioButton;
import android.widget.RadioGroup;

public class MainActivity extends Activity 
{
	private MsgFragment    fragment1;
	private FriendFragment fragment2;
	private MyFragment     fragment3;
	private RadioGroup  radioGroup;
	private RadioButton radioButton;
	//private FragmentManager manager;
	//private FragmentTransaction transaction;
    
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		//全屏显示,显示时间和电量
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);

		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

	
		//开启事务管理,主要处理Fragment
		 //manager = getFragmentManager();
		// transaction = manager.beginTransaction();

		//设置切换Fragment
		radioGroup = (RadioGroup)findViewById(R.id.radiogroup);
		RadioGroupList radigGroupList = new RadioGroupList();
		radioGroup.setOnCheckedChangeListener(radigGroupList);

		//设置默认按钮为选中状态
		radioButton =(RadioButton) findViewById(R.id.btn_0);
		radioButton.setChecked(true);

		
		//开始处理Fragment
		fragment1 = new MsgFragment();
		fragment2 = new FriendFragment();
		fragment3 = new MyFragment();
		
		findViewById(R.id.fragment_msg).setVisibility(View.INVISIBLE);
		findViewById(R.id.fragment_friend).setVisibility(View.INVISIBLE);
		findViewById(R.id.fragment_look).setVisibility(View.INVISIBLE);
		findViewById(R.id.fragment_my).setVisibility(View.INVISIBLE);

	}
		@Override
	public boolean onCreateOptionsMenu(Menu menu) 
	{
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) 
	{
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) 
		{
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
	public class RadioGroupList implements RadioGroup.OnCheckedChangeListener
	{

		@Override
		public void onCheckedChanged(RadioGroup group, int checkedId) 
		{
			if(group.getId() == R.id.radiogroup)
			{
			switch (checkedId)
			{
			case R.id.btn_0:
				findViewById(R.id.fragment_msg).setVisibility(View.VISIBLE);
				findViewById(R.id.fragment_friend).setVisibility(View.INVISIBLE);
				findViewById(R.id.fragment_look).setVisibility(View.INVISIBLE);
				findViewById(R.id.fragment_my).setVisibility(View.INVISIBLE);
				Log.d("消息", "提示");
				break;
			case R.id.btn_1:
				findViewById(R.id.fragment_msg).setVisibility(View.INVISIBLE);
				findViewById(R.id.fragment_friend).setVisibility(View.VISIBLE );
				findViewById(R.id.fragment_look).setVisibility(View.INVISIBLE);
				findViewById(R.id.fragment_my).setVisibility(View.INVISIBLE);
				Log.d("好友", "提示");
				break;
			case R.id.btn_2:
				findViewById(R.id.fragment_msg).setVisibility(View.INVISIBLE);
				findViewById(R.id.fragment_friend).setVisibility(View.INVISIBLE);
				findViewById(R.id.fragment_look).setVisibility(View.VISIBLE);
				findViewById(R.id.fragment_my).setVisibility(View.INVISIBLE );
				Log.d("看点", "提示");
				break;
			case R.id.btn_3:
				findViewById(R.id.fragment_msg).setVisibility(View.INVISIBLE);
				findViewById(R.id.fragment_friend).setVisibility(View.INVISIBLE);
				findViewById(R.id.fragment_look).setVisibility(View.INVISIBLE);
				findViewById(R.id.fragment_my).setVisibility(View.VISIBLE );
				
				Log.d("我的", "提示");
				break;
			default :
				break;
			}
			}
		}	
	}
}


        这就是最简单的底部导航栏实现方法,原理非常简单,只要学过一周Android开发的朋友都可以使用,但是这个程序有一个特点是不能实现滑动,ViewPage的实现方法,可以到我的博客看下。

Demo下载地址:https://download.youkuaiyun.com/download/nonecode/10625735

无需Root!5分钟隐藏Android 13底部导航白线的三种方案对比 本文详细介绍了三种无需Root即可隐藏Android 13底部导航白线的方案,包括ADB命令、第三方工具和开发者选项。这些方法各具特色,适合不同用户需求,帮助用户在不破解系统的前提下实现极致视觉体验。文章还对比了各方案的操作难度、效果持久性和机型适配性,为用户提供个性化选择指南。 阅读详情

相关推荐

uniapp自定义底部导航栏实战:手写view替代custom-tab-bar的完整方案

本文详细介绍了在uniapp中,通过完全手写view组件替代官方custom-tab-bar,以解决其在安卓App、微信小程序等平台兼容性不足的问题。该方案实现了全平台一致的底部导航栏,尤其适用于需要在非TabBar页面(如详情页、表单页)中稳定展示导航的场景,提供了高度可定制和灵活集成的完整实现路径。

weixin_29248653的博客 170

Android之官方导航栏ActionBar

ActionBar是android3.0以后新增的组件,主要用于标示应用程序以及用户所处的位置并提供相关操作以及全局的导航功能。下面我们就看看如何使用ActionBar,真正使用之前,我们应该首先了解一下ActionBar的结构。

无名 1139

告别Android 13底部白线!无需root的ADB调试方案(支持所有Launcher)

本文提供了一份无需Root权限的详细指南,教你如何通过ADB调试命令隐藏Android 13手势导航底部的白线。该方案直接修改SystemUI的全局设置,适用于所有品牌手机和Launcher,操作安全且可逆,能有效提升视觉沉浸感而不影响手势功能。

gpu4optimizer的博客 523

android 自定义标签导航栏,自定义导航栏app下载-自定义导航栏(Custom Navigation Bar) 安卓版v0.4.3-PC6安卓网...

自定义导航栏(Custom Navigation Bar)app是款非常好用的实用工具,自定义导航栏能让你自己设置个性的导航栏,再也不用为单调的导航栏而发愁,独特且唯一,感兴趣的朋友就来下载自定义导航栏app吧!软件介绍自定义导航栏(Custom Navigation Bar)app是一款免费的安卓自定义导航栏软件,现在的安卓智能机导航栏基本都是大同小异,有时候我们也需要加入一些个人需求的快捷功能...

weixin_36035585的博客 2389

Android 13手势导航隐藏底部白线终极指南(附SystemUI修改代码)

本文深入解析了在Android 13系统中彻底隐藏手势导航底部白线的原理与实战方法。通过剖析SystemUI架构,提供了修改布局文件、Java控制逻辑及资源文件等多种方案,并附上详细的代码修改步骤与编译指南,帮助开发者及ROM定制爱好者实现沉浸式界面体验。

joy55的博客 657

UI导航栏设计规范及注意事项有哪些?

UI导航栏设计规范及注意事项有哪些?设计不仅凸显了产品的主次,并引导用户行为,就拿文章来说,标题显得很重要,UI设计也是一样,有了导航栏之后才有灵魂,这样用户在使用的过程中就会更加明确。所以我们今天就来说说UI导航栏设计规范及注意事项有哪些?希望对大家有帮助。 设计好导航栏不仅仅是视觉上的工作,表现的方式、承载的按钮与组件、滚屏时的组合操作还能给用户带来极大的体验增益。接下来带你一起学习导航栏UI设计规范及注意事项: 一、导航栏位置 导航栏 Navigation Bar,也简称为Navbar。有不少刚入门的

weixin_48575991的博客 1918

android14 下新增导航栏/状态栏 显示开关功能

3.在SystemUi下增加接收广播设置,按照广播带的参数,动态隐藏/显示导航栏/状态栏。1.在设置界面里面新增导航栏/状态栏 显示开关,并按照设置发送广播。3.接收广播设置,按照广播带的参数,动态隐藏/显示导航栏/状态栏,1.设置界面里面新增导航栏/状态栏 显示开关,并按照设置发送广播。2.在launcher3里面关闭taskbar创建。还有为了保存新增设置 的修改,否则重启后设置会丢失。2,关闭taskbar的创建。

chenxy80的博客 1743

UI培训分享:导航栏UI设计规范及注意事项有哪些?

  UI设计学习起来要注意的东西还是有很多的,例如导航栏,导航栏UI设计规范及注意事项有哪些呢?今天小编为大家详细的介绍一下关于导航栏的设计注意事项,希望能够帮助到今后工作的你。      UI培训分享:导航栏UI设计规范及注意事项有哪些?设计好导航栏不仅仅是视觉上的工作,表现的方式、承载的按钮与组件、滚屏时的组合操作还能给用户带来极大的体验增益。   一、导航栏位置   导航栏 Navigation Bar,也简称为Navbar。有不少刚入门的UI新人在诸多的Bar控件中,难以区分它所指代

qinge_Crazy的博客 1108

后台管理系统导航栏总结

一般后台的管理界面结构如下: 顶部+左侧导航+内容区域+底部  主要实现以下功能: 顶部导航模块添加class效果,给点击的元素添加背景颜色同时改变宽度,其他元素移除样式 点击顶部导航显示对应的左侧导航; 左侧导航的伸展收缩,同时改变图标的方向 隐藏/显示导航,同时更改文字内容   知识点: 1.$().addClass()    $().removeClass() 2.使用...

Naughty_Fairy的博客 7108

微信小程序自定义导航栏高度适配:动态计算状态栏与胶囊按钮位置

在移动端开发中,UI适配是保证应用在不同设备上呈现一致体验的基础技术。其核心原理在于动态获取设备屏幕信息与系统UI参数,而非使用固定数值。这项技术的价值在于能够应对市场上纷繁复杂的设备型号、屏幕形态(如刘海屏、挖孔屏)和操作系统差异,确保界面元素不被遮挡、交互区域准确。在微信小程序开发场景下,自定义导航栏是实现品牌个性化UI的常见需求,而精准计算其高度正是适配的关键。通过调用微信API获取胶囊按钮的边界信息,开发者可以推导出状态栏高度和导航栏高度,从而解决因适配不当导致的内容重叠或布局错位问题,提升小程序的

axfcjwkbi259888707的博客 336

OpenMV模块视觉测距(避障)+颜色识别+TFT-LCD显示(实现原理与代码分析)

上图所示代码实际运行的帧率比较低,主要原因有以下两个:1.硬件问题,博主使用的版本比较低,可以尝试使用高版本OpenMV2.图像滤波问题。之前加入图像滤波是想提高色块识别的准确性,但是相应的运算速度也会下降。

ediykk的博客 1万+

Android开发----生成Android底部导航栏

Android 新建带有底部导航栏的activity,并更改导航栏图标和标题。

Qingshan_z的博客 8723

银河麒麟V10搭建vsftpd

1、查看是否有安装过2、安装3、服务启动步骤设置开机启动并此次立即启动启动重启停止查看状态4、系统防火墙放行ftp服务如果没有重要的数据在服务器里面,或者在本地虚拟机中外网无法访问的情况下,建议直接关闭防火墙即可省略以上繁琐的步骤。

hhq850741642的博客 6485

Android实现导航栏的几种方式 (附带源码)

Android实现导航栏的几种方式 (附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 3034

基于Codex平台构建AI技能:抖音爆款分析与带货视频生成实战

这次我们来看一个基于 Codex 平台构建 AI 技能(Skill)的实战项目。核心目标很直接:利用 AI 能力,自动化分析抖音平台的爆款内容,并生成可用于带货的视频。这听起来像是内容创作领域的“自动化流水线”,它解决的核心痛点是:人工分析爆款、撰写脚本、制作视频的效率瓶颈。 对于技术开发者和内容创作者而言,这个项目的价值在于将“内容策略分析”和“视频内容生成”两个环节通过 Codex 的 Skill 机制串联起来,形成一个可定制、可批量执行的自动化工作流。我们最关心的几个问题包括:这个方案的技术门槛高不高

weixin_29054399的博客 487

推荐开源项目:SmoothBottomBar - 打造丝滑的安卓底部导航栏

在追求极致用户体验的今天,一个既美观又功能强大的导航组件对于移动应用至关重要。如果你正在寻找一款能够为你的Android应用增添一抹优雅的底部导航解决方案,那么【SmoothBottomBar】绝对是不容错过的选择。 ## 项目介绍 **SmoothBottomBar** 是一个轻量级的Android材料设计底部导航栏库,由Ibrahım Şen开发并维护。它提供了一个简洁而高效的API来实现

gitblog_01141的博客 478

FPGA以太网开发实战:YT8511 PHY芯片MDIO接口配置全流程(附Verilog代码)

本文详细介绍了FPGA以太网开发中YT8511 PHY芯片MDIO接口的配置全流程,包括MDIO接口技术解析、Verilog状态机设计、核心代码实现细节及实战调试经验。通过提供经过验证的Verilog代码和优化策略,帮助开发者快速掌握以太网PHY芯片配置技术,提升通信系统性能。

weixin_29184371的博客 233

打造丝滑折叠体验:Android Material Design导航栏终极实现指南

想要为你的Android应用打造令人惊艳的折叠屏导航体验吗?Material Design导航栏正是你需要的解决方案!这份完整指南将带你从基础概念到高级实现,轻松掌握最前沿的Android界面设计技术。 ## 🌟 Material Design导航栏的核心优势 Material Design导航栏不仅仅是美观的界面元素,它代表了现代Android应用设计的黄金标准。通过精心设计的导航结构,你

gitblog_00920的博客 516

adb详细教程(四)-使用adb启动应用、关闭应用、清空应用数据、获取设备已安装应用列表

adb对于安卓移动端来说,是个非常重要的调试工具。通过ADB可以操作、管理设备上的应用。

公众号|软件测试老吴 3万+

实战指南:CentOS 7下VOS3000 8.0从零部署到授权激活全流程

本文提供了一份详尽的CentOS 7系统下部署VOS3000 8.0的实战指南。从环境准备、使用FileZilla上传安装包、执行自动化安装脚本,到获取软件码、利用注册机生成授权文件并激活,手把手带领用户完成从零部署到投入商用的全流程,确保系统稳定运行。

zero1的博客 897

Android 12 在工业场景的应用:如何定制屏蔽导航栏的 kiosk 模式 (RK3588 源码解析)

上实现工业级 Kiosk 模式,既可以通过 APP 层的 API 调用实现软锁定,也可以利用电鱼开放的 BSP 源码进行 Framework 层面的彻底裁剪。方案,配合电鱼的工业级宽温硬件 ,打造真正“关不掉、退不出、死不了”的智能工控终端。这是最“无痛”的修改方式,通过覆盖 config.xml 禁用导航栏。利用 Android 原生的 startLockTask() 方法。适用于不想修改系统源码,仅做应用层开发的场景。如果您没有 BSP 源码开发团队,电鱼提供的。进行系统裁剪,打造专用工控系统的场景。

1089

vue3+vite:引入tailwindcss不生效的原因,详细解决Tailwind配置没问题但就是不生效的情况,配置正确无报错但样式没有生效(包括tailwindcss在Vue2使用不生效解决方案)

vue3 tailwind使用教程以及tailwind不生效的问题,vue3+vite引入tailwindcss不生效的原因,tailwindcss配之后不生效怎么办,如何解决tailwinscss不生效的原因,Vue3项目使用tailwindcss在Vue2使用,不生效解决,如何解决使用 Tailwind CSS 后出现的样式不生效的问题?tailwindcss配之后不生效 tailwindcss不生效,为什么我的 Tailwind css 类没生效,解决使用 Tailwind 时样式不生效的问题,配置没

✅ 精选推荐文章 4128

uni-app跨端开发:实现凸起式底部导航栏的三种方案与实战详解

在移动应用开发中,底部导航栏是核心的导航组件,其设计直接影响用户体验。其实现原理通常基于原生组件或前端框架的视图层渲染机制,通过管理页面路由和状态切换来引导用户。从技术价值看,一个优秀的导航栏方案需兼顾视觉美观、交互流畅与多端兼容性,尤其在追求设计感的社交、电商类应用中,凸起式导航栏能有效提升关键操作的点击率与界面层次。应用场景广泛覆盖短视频、社交平台及工具类App。本文聚焦uni-app框架,深入解析实现凸起式TabBar的三种主流技术路径:完全自定义导航栏、基于原生TabBar的悬浮按钮叠加以及条件编译

weixin_33966095的博客 431

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

流体底部导航:优雅的交互新体验

流体底部导航:优雅的交互新体验 在移动应用设计中,导航组件的重要性不言而喻,它不仅关乎用户体验的流畅度,也是应用界面视觉美感的关键所在。今天,我们来探索一款名为“Fluid Bottom Navigation”的开源库,它以创新的设计理念和高度可定制性,为开发者提供了一个全新的选择。 1. 项目介绍 Fluid Bottom Navigation是一款专为Android平台打造的流体效果底部导航栏...

gitblog_00010的博客 328

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android 手机的高级终端 Termux 安装使用、busybox、安卓 手机 web

手机已经 root安装 tsu,这是一个 su 的 Termux 版本,是一个真正的 root 权限,用来在 Termux上替代su,操作不慎可能对手机有安全风险,因为官方封装了,所以安装也很简单:安装 tsu:pkg install tsu -y切换到 root:tsu退出 root:exittsu切换 root 用户时会弹出 root 授权提示,给予其 root 权限即可。在管理员身份下输入 exit 可回到普通用户身份。

freeking101的博客 10万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: Android 给EditText更换光标颜色
下一篇: Android ListView控件&自定义ListView
Big Joker
博客等级 码龄14年 92粉丝 63原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值