技术标签: android navigationbar 半透明
文章目录
使用方法
注意:如果轮子死活下载不下来,说明maven地址有毛病,你需要找到jitpack的官网首页,查看最新的官网地址
注意:记得去gayhub查看最新版本,最新版本最niubility
首先创建全局theme继承Theme.AppCompat.Light.NoActionBar
然后继承StatusNavigationActivity
系统StatusBar填充界面,自定义背景颜色(文字、icon颜色根据StatusBar颜色亮度设置为黑色)
2.系统StatusBar填充界面,自定义背景颜色(文字、icon颜色根据StatusBar颜色亮度设置为白色)
3.系统StatusBar不填充界面,布局添加StatusBarView实现半透明
4.系统StatusBar不填充界面,且半透明于图片之上
5.系统StatusBar不填充界面,且全透明于图片之上
6.系统navigationbar填充界面,自定义颜色
7.系统navigationbar不填充界面,且全透明
8.隐藏statusbar
9.隐藏navigationbar
10.隐藏statusbar、navigationbar,全屏
11.图片预览,切换statusbar、navigationbar的显示
StatusNavigationUtils工具类
StatusNavigationActivity
StatusBarView和系统StatusBar高度一致
NavigationBarView系统NavigationBarView高度一致
ScreenUtils
欢迎联系、指正、批评
使用方法
1.工程目录下的build.gradle中添加代码:
注意:如果轮子死活下载不下来,说明maven地址有毛病,你需要找到jitpack的官网首页,查看最新的官网地址
allprojects {
repositories {
maven { url 'https://www.jitpack.io' }
}
}
2.直接在需要使用的模块的build.gradle中添加代码:
注意:记得去gayhub查看最新版本,最新版本最niubility
dependencies {
implementation 'com.github.AnJiaoDe:StatusNavigationTransparent:V1.2.4'
}
首先创建全局theme继承Theme.AppCompat.Light.NoActionBar
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
然后继承StatusNavigationActivity
注意:不一定非要继承StatusNavActivity ,可以使用StatusNavigationUtils工具类、StatusBarView和NavigationBarView
总之,方法多样灵活
1. 系统StatusBar填充界面,自定义背景颜色(文字、icon颜色根据StatusBar颜色亮度设置为黑色)
public class Status00Activity extends StatusNavigationActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_status00);
//此行可不写,默认就是0xfff2f2f2
setStatusBarColor(getStatusBarColorDefault());
}
@Override
public void onClick(View v) {
}
}
2.系统StatusBar填充界面,自定义背景颜色(文字、icon颜色根据StatusBar颜色亮度设置为白色)
public class Status0Activity extends StatusNavigationActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_status0);
setStatusBarColor(getResources().getColor(R.color.theme));
}
@Override
public void onClick(View v) {
}
}
3.系统StatusBar不填充界面,布局添加StatusBarView实现半透明
public class Status2Activity extends StatusNavigationActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_status2);
setStatusBarNoFillAndTransParentHalf();
}
@Override
public void onClick(View v) {
}
}
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
android:orientation="vertical">
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@color/colorPrimary">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="StatusBar半透明"
android:textColor="#ffffff" />
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
4.系统StatusBar不填充界面,且半透明于图片之上
public class Status5Activity extends StatusNavigationActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_status5);
setStatusBarNoFillAndTransParentHalf();
//或者写2行
// setStatusBarNoFill();
// setStatusBarColor(0x33000000);
}
@Override
public void onClick(View v) {
}
}
5.系统StatusBar不填充界面,且全透明于图片之上
public class Status6Activity extends StatusNavigationActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_status6);
setStatusBarNoFillAndTransParent();
}
@Override
public void onClick(View v) {
}
}
6.系统navigationbar填充界面,自定义颜色
public class Navigation0Activity extends StatusNavigationActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation0);
setNavigationBarColor(0xffff0000);
}
@Override
public void onClick(View v) {
}
}
7.系统navigationbar不填充界面,且全透明
模拟器上看起来是半透明,有些手机会有阴影,不必强求,随缘即可
public class Navigation2Activity extends StatusNavigationActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nav2);
setNavigationBarTransparent();
}
@Override
public void onClick(View v) {
}
}
8.隐藏statusbar
public class HideStatusBarActivity extends StatusNavigationActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hide_status_bar);
setHideStatusBar();
}
@Override
public void onClick(View v) {
}
}
9.隐藏navigationbar
public class HideNavigationBarActivity extends StatusNavigationActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hide_navigation_bar);
setHideNavigationBar();
}
@Override
public void onClick(View v) {
}
}
10.隐藏statusbar、navigationbar,全屏
public class FullScreenActivity extends StatusNavigationActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_full_screen);
setFullScreen();
}
@Override
public void onClick(View v) {
}
}
11.图片预览,切换statusbar、navigationbar的显示
public class StatusNavigationSwitchActivity extends StatusNavigationActivity {
private boolean fullScreen=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_status_navigation_switch);
final ViewGroup rl1=findViewById(R.id.rl1);
final ViewGroup rl2=findViewById(R.id.rl2);
findViewById(R.id.iv).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fullScreen=!fullScreen;
if(fullScreen){
rl1.setVisibility(View.GONE);
rl2.setVisibility(View.GONE);
setHideStatusBar();
setNavigationBarTransparent();
}else {
rl1.setVisibility(View.VISIBLE);
rl2.setVisibility(View.VISIBLE);
setClearHideStatusBar();
setStatusBarColor(getStatusBarColorDefault());
setNavigationBarColor(getNavigationBarColorDefault());
}
}
});
}
@Override
public void onClick(View v) {
}
}
小编提供了贼多工具方便你的使用
StatusNavigationUtils工具类
package com.cy.translucentparent;
import android.app.Activity;
import android.graphics.Color;
import android.os.Build;
import android.os.ParcelUuid;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
/**
* Created by lenovo on 2017/4/25.
*/
public class StatusNavigationUtils {
/**
* 状态栏自定义背景颜色,6.0以上可修改状态栏字体颜色,icon颜色
*
* @param activity
* @param color
*/
public static void setStatusBarColor(Activity activity, int color) {
Window window = activity.getWindow();
//去除statusbar不填充的标志
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
int ui = window.getDecorView().getSystemUiVisibility();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (isLightColor(color)) {
ui |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; //设置状态栏中字体的颜色为黑色
} else {
ui &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; //设置状态栏中字体颜色为白色
}
}
window.getDecorView().setSystemUiVisibility(ui);
window.setStatusBarColor(color);
}
/**
* 判断颜色是否为亮色
* @param color
* @return
*/
public static boolean isLightColor(int color) {
double darkness = 1 - (0.299 * Color.red(color) + 0.587 * Color.green(color) + 0.114 * Color.blue(color)) / 255;
if (darkness < 0.5) {
return true; // It's a light color
} else {
return false; // It's a dark color
}
}
/**
* * 状态栏不填充,布局会填充到状态栏底部,有些手机有阴影
*
* @param activity
*/
public static void setStatusBarNoFill(Activity activity) {
Window window = activity.getWindow();
int ui = window.getDecorView().getSystemUiVisibility();
ui |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
window.getDecorView().setSystemUiVisibility(ui);
}
/**
* * 导航栏全透明,布局会填充到导航栏底部,有些手机有阴影
*
* @param activity
*/
public static void setNavigationBarTransparent(Activity activity) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
/**设置导航栏颜色,和setNavigationBarTransparent互斥,要么选择自定义导航栏颜色,要么选择导航栏全透明
* @param activity
* @param color
*/
public static void setNavigationBarColor(Activity activity, int color) {
Window window = activity.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
int ui = window.getDecorView().getSystemUiVisibility();
window.getDecorView().setSystemUiVisibility(ui);
window.setNavigationBarColor(color);
}
/**
* 隐藏状态栏、导航栏,全屏
* @param activity
*/
public static void setFullScreen(Activity activity) {
View decorView = activity.getWindow().getDecorView();
int ui = decorView.getSystemUiVisibility();
ui |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(ui);
}
/**
* 去除隐藏状态栏、导航栏,全屏的标志
* @param activity
*/
public static void setClearFullScreen(Activity activity) {
View decorView = activity.getWindow().getDecorView();
int ui = decorView.getSystemUiVisibility();
ui &= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
& View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
& View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
& View.SYSTEM_UI_FLAG_FULLSCREEN
& View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(ui);
}
/**
* 隐藏状态栏
* @param activity
*/
public static void setHideStatusBar(Activity activity) {
View decorView = activity.getWindow().getDecorView();
int ui = decorView.getSystemUiVisibility();
ui |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(ui);
}
/**
* 去除隐藏状态栏的标志
* @param activity
*/
public static void setClearHideStatusBar(Activity activity) {
View decorView = activity.getWindow().getDecorView();
int ui = decorView.getSystemUiVisibility();
ui &= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
& View.SYSTEM_UI_FLAG_FULLSCREEN
& View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(ui);
}
/**
* 隐藏导航栏
* @param activity
*/
public static void setHideNavigationBar(Activity activity) {
View decorView = activity.getWindow().getDecorView();
int ui = decorView.getSystemUiVisibility();
ui |=View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(ui);
}
/**
* 去除隐藏导航栏的标志
* @param activity
*/
public static void setClearHideNavigationBar(Activity activity) {
View decorView = activity.getWindow().getDecorView();
int ui = decorView.getSystemUiVisibility();
ui &=View.SYSTEM_UI_FLAG_HIDE_NAVIGATION & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(ui);
}
}
StatusNavigationActivity
package com.cy.translucentparent;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
/**
* Created by lenovo on 2017/4/25.
*/
public abstract class StatusNavigationActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
StatusNavigationUtils.setStatusBarColor(this, getStatusBarColorDefault());
StatusNavigationUtils.setNavigationBarColor(this, getNavigationBarColorDefault());
}
public int getStatusBarColorDefault(){
return 0xfff2f2f2;
}
public int getNavigationBarColorDefault(){
return 0xff000000;
}
public void setStatusBarColor(int color) {
StatusNavigationUtils.setStatusBarColor(this, color);
}
public void setNavigationBarColor(int color) {
StatusNavigationUtils.setNavigationBarColor(this, color);
}
public void setFullScreen() {
StatusNavigationUtils.setFullScreen(this);
}
public void setClearFullScreen() {
StatusNavigationUtils.setClearFullScreen(this);
}
public void setHideStatusBar() {
StatusNavigationUtils.setHideStatusBar(this);
}
public void setClearHideStatusBar() {
StatusNavigationUtils.setClearHideStatusBar(this);
}
public void setHideNavigationBar() {
StatusNavigationUtils.setHideNavigationBar(this);
}
public void setClearHideNavigationBar() {
StatusNavigationUtils.setClearHideNavigationBar(this);
}
public void setStatusBarNoFill() {
StatusNavigationUtils.setStatusBarNoFill(this);
}
public void setStatusBarNoFillAndTransParent() {
setStatusBarNoFill();
setStatusBarColor(0x00000000);
}
public void setStatusBarNoFillAndTransParentHalf() {
setStatusBarNoFill();
setStatusBarColor(0x33000000);
}
public void setNavigationBarTransparent() {
StatusNavigationUtils.setNavigationBarTransparent(this);
}
}
StatusBarView和系统StatusBar高度一致
package com.cy.translucentparent;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
/**
* Created by lenovo on 2017/7/4.
*/
public class StatusBarView extends View {
private Context context;
public StatusBarView(Context context) {
this(context,null);
}
public StatusBarView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context=context;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(ScreenUtils.getStatusBarHeight(context), MeasureSpec.EXACTLY));
}
}
NavigationBarView系统NavigationBarView高度一致
package com.cy.translucentparent;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
/**
* Created by lenovo on 2017/7/4.
*/
public class NavigationBarView extends View {
private Context context;
public NavigationBarView(Context context) {
this(context,null);
}
public NavigationBarView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context=context;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(ScreenUtils.getNavigationBarHeight(context), MeasureSpec.EXACTLY));
}
}
ScreenUtils
package com.cy.translucentparent;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Build;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import java.lang.reflect.Method;
/**
* Created by Administrator on 2018/11/20 0020.
*/
public class ScreenUtils {
public static int getStatusBarHeight(Context context) {
Resources resources = context.getResources();
int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
return resources.getDimensionPixelSize(resourceId);
}
public static int getNavigationBarHeight(Context context) {
Resources resources = context.getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
return resources.getDimensionPixelSize(resourceId);
}
public static int getScreenWidth(Context context) {
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager wm = (WindowManager) context.getSystemService("window");
if (Build.VERSION.SDK_INT <= 17) {
wm.getDefaultDisplay().getMetrics(displayMetrics);
} else {
wm.getDefaultDisplay().getRealMetrics(displayMetrics);
}
return displayMetrics.widthPixels;
}
public static int getScreenHeight(Context context) {
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager wm = (WindowManager) context.getSystemService("window");
if (Build.VERSION.SDK_INT <= 17) {
wm.getDefaultDisplay().getMetrics(displayMetrics);
} else {
wm.getDefaultDisplay().getRealMetrics(displayMetrics);
}
return displayMetrics.heightPixels;
}
public static int setYStart(Context context, float y) {
// if (isGroove(context)) {
return (int) (y * getScreenHeight(context)) + getStatusBarHeight(context);
// } else {
// return (int) (y * getScreenHeight(context));
//
//
// }
}
/**
* 获取当前界面可视区域的高度
*
* @param activity
* @return
*/
public static int getVisibleFrameHeight(Activity activity) {
Rect r = new Rect();
//获取当前界面可视部分
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
// if (isGroove(activity)) {
// return r.bottom - r.top - getStatusBarHeight(activity);
// } else {
return r.bottom - r.top;
//
// }
}
/**
* 获取当前界面可视区域的宽度
*
* @param activity
* @return
*/
public static int getVisibleFrameWidth(Activity activity) {
Rect r = new Rect();
//获取当前界面可视部分
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
return r.right - r.left;
}
}
欢迎联系、指正、批评
微信公众号
QQ群
最近在搭建的虚拟环境中启动ros节点出现如下的错误,一开始很纳闷我不是已经安装好ros了吗,而且当时已经测试通过了。然后当时就没想通,当我退出虚拟环境再次启动ros节点的时候,发现能正常启动。于是才恍然发现是虚拟环境的问题,在虚拟环境中,由于没有添加一些库文件的搜索路径,所以就会发生如下图所示的报错。既然弄清了原由,接下来我们就开始着手解决这个问题。上图在虚拟环境中启动ros节点出现 er...
一、前言书接上回,话说在 doc(Word) 复合文件中,已经解决了保存 xls(Excel) 数据的问题了。那么,接下来又要解决另一个问题:当 WORD 程序读取复合文件,遇到了 xls 数据的时候,它该如何启动 Excel 呢?启动后,又如何让 Excel 自己去读入、解析、显示 xls 数据呢?二、CLSID 概念有一个非常简单的解决方案,那就是在对象数据的前...
适配器在getview()中重复使用[被移除屏幕的item,即不可见的项] 会造成被选中的checkbox重新出现,显示异常,故需要记录checkbox的状态!CheckBox抢占Item焦点,导致Item点击无效!方法一:CheckBox设置android:clickable="false" 方法二:在Item根布局或ListView布局设置android:descendantFocusa
Linux下QT编写一个与视频播放的程序,出现/usr/bin/ld: 找不到 -lpulse-mainloop-glib,/usr/bin/ld: 找不到 -lpulse解决办法:首先find / -name libpulse.so*然后cp /usr/lib/x86_64-linux-gnu/libpulse.so. /usr/lib/libpulse.so
这题真繁琐,昨晚上我写到了两点,以为把炮的、将的模块都写对了,只剩下马和车的了,但是今天下午头脑清醒了,才发现这俩模块都写错了,于是我相当于全重写的,最后输入输出也改了。但是基本的架构还是没改。算法是这样的:开一个二维字符数组,存放对应棋子到坐标上,记录两个将的位置。最开始先判定“飞将”,如果飞将,就输出“No”,continue。没有飞将,则从遍历整个棋盘,对每个红方棋子,按照它的游...
引入cglib-nodep-2.1_3.ja包cglib产生的代理类是目标类的子类定义接口,让切面都继承它,方便加入到动态代理方法 的那个类中使用在SalaryInterceptor类中使用private List<Interceptor> interceptors;1 package cn.itcast.cglibproxy.salary;2 ...
文章目录前言实现方法总结前言 上一篇文章我们留了个不大不小的问题:如何获取当前播放视频时长,进而视频播放完毕后自动翻页?现在我们通过快手极速版App进行探讨和实现。 众所周知,Android播放视频依赖播放组件类,而播放组件会有一些通用方法,比如开始、暂停、循环播放、设置播放位置、获取视频播放进度等,如果我们能Hook这些方法,就会获取当前播放组件的实例,通过实例再获取当前视频的时长。实现方法继续使用Frida神器,启动快手极速版的命令如下:frida -U -f com.
2019独角兽企业重金招聘Python工程师标准>>> ...
1、登陆后台老是自动退出是怎么回事?解决方法:用ftp上線下載文件下在跟目錄/config/config_global.php把$_config[‘admincp‘][‘checkip‘]= 1;把1改成0原因:网络的问题,尤其是几条电话线组成的软路由,出现IP的随机切换!2、Discuz! X3.* 后台 UCenter 用户管理中心验证码错误无法登录解决方法:根据目录找到文件: UCent...
程序员这个职业究竟可以干多少年?大多数程序员都认为程序员是个吃青春饭的职业,编程这个事只能干到30岁,最多35岁吧。每每听到这样的言论,都让人感到相当的无语……今天,我们又来谈这个老话题……首先,我们先来看一篇论文《Is Programming Knowledge Related to Age?》(英文版),这篇论文是两个北卡罗纳州立大学计算机科学系的两个人对StackOverflow.com上的用户做了相关的数据挖掘得出来的一些数据。(StackOverflow.com上的数据是公开的,任何人都可以
题意: 给出n1 n2 两个数字 给出TAG表示下个数字标定的是第一个还是第二个,radix表示这个数字拿radix进制表示询问是否有一个数字可以使其另外一个数字用这个给定的进制表示 的值与标定的值相等看了看网上代码说什么也不明白为啥用二分, 用不是二分的代码有一个测试点超时非二分:#include #include #include #include #includ
48-PHP5.3的垃圾回收机制垃圾回收机制是一种动态存储分配方案。它会自动释放程序不再需要的已分配的内存块。 自动回收内存的过程叫垃圾收集。垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻辑。 在现在的流行各种语言当中,垃圾回收机制是新一代语言所共有的特征,如Python、PHP、Eiffel、C#、Ruby等都使用了垃圾回收机制。 虽然垃圾回收是现在比较流行的做法,