导航:首页 > 操作系统 > android沉浸式菜单

android沉浸式菜单

发布时间:2022-05-28 12:12:26

㈠ 为什么国内android应用都不适配沉浸式状态栏

  1. 4.4及其以上都是可以实现沉浸式状态栏效果的,5.0及其以上可以直接在主题中设置颜色,也可以调用Window类中的setStatusBarColor(int color)来实现,这两种方式在5.0上都比较简单。

  2. 图片背景的页面让状态栏透明及半透明。

    ㈡ Android QQ沉浸式状态栏效果是怎么实现的

    首先是两个开启沉浸模式和关闭沉浸模式的函数
    ?
    @SuppressLint("NewApi")
    public static void hideSystemUI(View view) {
    view.setSystemUiVisibility(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
    | View.SYSTEM_UI_FLAG_FULLSCREEN
    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
    @SuppressLint("NewApi")
    public static void showSystemUI(View view) {
    view.setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    }
    这些代码可以在google的开发者文档中找到,可以看这里Using Immersive Full-Screen Mode,上面的代码是在Android 4.4中才会生效,对应的Android版本兼容的判断请自行处理。
    此外还需要一个辅助函数,用于获得状态栏高度,使用反射获得。
    ?
    /**
    * 获状态栏高度
    *
    * @param context 上下文
    * @return 通知栏高度
    */
    public int getStatusBarHeight(Context context) {
    int statusBarHeight = 0;
    try {
    Class<?> clazz = Class.forName("com.android.internal.R$dimen");
    Object obj = clazz.newInstance();
    Field field = clazz.getField("status_bar_height");
    int temp = Integer.parseInt(field.get(obj).toString());
    statusBarHeight = context.getResources().getDimensionPixelSize(temp);
    } catch (Exception e) {
    e.printStackTrace();
    }
    return statusBarHeight;
    }

    点击hide按钮进入沉浸模式,也就是隐藏状态栏,隐藏状态栏的同时我们需要修改Toolbar的上内边距,否则会显得很难看,这里注册一个监听,当进入沉浸模式后我们改变Toolbar的上内边距
    ?
    hide.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    View view = getWindow().getDecorView();
    hideSystemUI(view);
    mToolbar.set(new View.() {
    @Override
    public void onSystemUiVisibilityChange(int visibility) {
    mToolbar.setPadding(mToolbar.getPaddingLeft(), 0,mToolbar.getPaddingRight(), mToolbar.getPaddingBottom());
    }
    });
    }
    });
    进入沉浸模式后,手指从屏幕顶部向下划,状态栏就出现了,过2秒左右它又会自动消失。
    点击show按钮退出沉浸模式,同时Toolbar的内边距也要增加到状态栏的高度。
    ?
    show.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    View view = getWindow().getDecorView();
    showSystemUI(view);
    mToolbar.set(new View.() {
    @Override
    public void onSystemUiVisibilityChange(int visibility) {
    mToolbar.setPadding(mToolbar.getPaddingLeft(), getStatusBarHeight(MainActivity.this),mToolbar.getPaddingRight(), mToolbar.getPaddingBottom());
    }
    });
    }
    });
    如果使用的是SystemBarTintManager这个类进行的状态栏的着色,除上方的操作外,还要在对应的监听里增加状态栏着色的禁止和启动的功能。
    进入沉浸模式,要禁用
    ?
    tintManager.setStatusBarTintEnabled(false);

    退出沉浸模式,要启动
    ?
    tintManager.setStatusBarTintEnabled(true);

    如果你想更加平滑,则可以对padding的改成增加动画,具体动画效果自行添加。

    ㈢ android中怎么实现沉浸式状态栏

    styles.xml设置如下:
    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>

    <style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="android:actionModeBackground">@drawable/context_menu</item>
    </style>

    <style name="TranslucentTheme" parent="AppTheme.NoActionBar">
    </style>

    V21的styles.xml设置如下:
    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

    <style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:">true</item>
    <item name="android:windowContentTransitions">true</item>
    <item name="android:statusBarColor">@color/colorPrimary</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="android:actionModeBackground">@drawable/context_menu</item>
    </style>

    <style name="TranslucentTheme" parent="AppTheme.NoActionBar">
    <item name="android:windowTranslucentStatus">false</item>
    <item name="android:windowTranslucentNavigation">false</item>
    </style>

    再在要显示的toolbar里加上属性:
    android:fitsSystemWindows="true"

    主题的属性设置为:

    <style name="TranslucentTheme" parent="AppTheme.NoActionBar">

    ㈣ android studio怎么做沉浸式状态栏

    studio,中引入沉浸式兼容库
    compile ‘com.readystatesoftware.systembartint:systembartint:1.0.3’
    eclipse,可以导入相应的那个类。
    第一类,兼容actionbar
    第一步:设置activity主题android:theme=”@style/ActionBarTheme”
    <style name="ActionBarTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <!-- API 14 theme customizations can go here. -->
    <item name="android:actionBarStyle">@style/ActionBarStyle</item>
    </style>
    <style name="ActionBarStyle" parent="android:Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/actionbar_bg</item>
    </style>

    第二步:设置状态栏透明,然后设置状态栏沉浸的颜色
    @TargetApi(19)
    private void setTranslucentStatus(boolean on) {
    Window win = getWindow();
    WindowManager.LayoutParams winParams = win.getAttributes();
    final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
    if (on) {
    winParams.flags |= bits;
    } else {
    winParams.flags &= ~bits;
    }
    win.setAttributes(winParams);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    setTranslucentStatus(true);
    }

    SystemBarTintManager tintManager = new SystemBarTintManager(this);
    tintManager.setStatusBarTintEnabled(true);
    //设置沉浸的颜色 tintManager.setStatusBarTintResource(R.color.statusbar_bg);}

    第三步:设置适应windows,在布局文件设置
    android:fitsSystemWindows=”true”
    如果不设置,应用的ui会顶上去,顶进system ui
    ok
    第二类 没有actionbar的activity
    第一步,设置主题,android:theme=”@style/FullBleedTheme”
    <style name="FullBleedTheme" parent="android:Theme.Holo.Light.NoActionBar">
    <!-- API 14 theme customizations can go here. -->
    </style>
    <style name="FullBleedTheme" parent="android:Theme.Holo.Light.NoActionBar.TranslucentDecor">
    <!-- API 19 theme customizations can go here. -->
    </style>

    或者
    用toolbar只能设置Theme.AppCompat.NoActionBar主题
    <style name="AppThemeToolbar" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">#2196F3</item>
    <item name="colorPrimaryDark">#2196F3</item>
    <!--<item name="colorPrimaryDark">#1565C0</item>-->
    <item name="colorAccent">#E91E63</item>
    </style>

    第二步:同上一个第二步。
    设置状态栏透明+颜色
    mTintManager = new SystemBarTintManager(this);
    mTintManager.setStatusBarTintEnabled(true);
    mTintManager.setNavigationBarTintEnabled(true); mTintManager.setStatusBarTintResource(R.color.statusbar_bg);

    ㈤ android 怎么做带标题栏的沉浸式状态栏

    您可以尝试着将AppTheme设置成没有标题栏的样式,在res->values->styles中进行修改:,希望能帮到您,谢谢。

    ㈥ android 沉浸式状态栏和透明状态栏的区别

    注意!两种方法的区别:
    第一种:为顶部栏跟随当前activity的布局文件的背景的颜色,使用方便,不过也有点问题就是,如果有底部虚拟导航键的话,导航键的背景跟顶部的颜色一样,比如:

    第二种:是通过设置顶部栏的颜色来显示的,可以解决第一种的不足,比如:

    第一种使用方法:

    第一、首先在values、values-v19、values-v21文件夹下的styles.xml都设置一个 Translucent System Bar 风格的Theme,如下图:

    values/style.xml:
    <style name="TranslucentTheme" parent="AppTheme">
    <!--在Android 4.4之前的版本上运行,直接跟随系统主题-->
    </style>123

    values-v19/style.xml:
    <style name="TranslucentTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>
    </style>1234

    values-v21/style.xml:
    <style name="TranslucentTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowTranslucentStatus">false</item>
    <item name="android:windowTranslucentNavigation">true</item>
    <!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色-->
    <item name="android:statusBarColor">@android:color/transparent</item>
    </style>123456

    第二、在清单文件中配置需要沉浸式状态栏的activity加入theme
    <activity android:name=".ImageActivity" android:theme="@style/TranslucentTheme" />
    <activity android:name=".ColorActivity" android:theme="@style/TranslucentTheme" />12

    第三、在Activity的布局文件中的跟布局加入“android:fitsSystemWindows=”true””,但是,这里需要区分一下,就是背景是图片还是纯色:

    1.当背景为图片时,布局可以这么写:
    <?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"
    android:background="@drawable/imgs_bj"
    android:fitsSystemWindows="true">

    </RelativeLayout>12345678

    效果:

    2.当背景为纯色,我们需要对布局划分一下,标题布局与内容布局,先把根布局背景设置成标题布局的背景色,然后标题背景色可以不用设置直接使用根布局的背景色,最后内容布局背景色设置为白色
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary" //根布局背景设置成“标题布局”想要的颜色
    android:fitsSystemWindows="true"
    android:orientation="vertical">

    <!--标题布局-->
    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="55dp"
    android:background="@color/color_31c27c">

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:text="这是标题"
    android:textColor="@android:color/white"
    android:textSize="20sp" />

    </RelativeLayout>

    <!--内容布局-->
    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white" //内容区域背景设置成白色
    android:gravity="center"
    android:orientation="vertical">

    <Button
    android:layout_marginTop="120dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="8dp"
    android:text="显示信息"
    android:onClick="showMsg"
    />
    </LinearLayout>

    </LinearLayout>

阅读全文

与android沉浸式菜单相关的资料

热点内容
自己购买云主服务器推荐 浏览:422
个人所得税java 浏览:761
多余的服务器滑道还有什么用 浏览:192
pdf劈开合并 浏览:28
不能修改的pdf 浏览:752
同城公众源码 浏览:489
一个服务器2个端口怎么映射 浏览:298
java字符串ascii码 浏览:79
台湾云服务器怎么租服务器 浏览:475
旅游手机网站源码 浏览:332
android关联表 浏览:946
安卓导航无声音怎么维修 浏览:333
app怎么装视频 浏览:431
安卓系统下的软件怎么移到桌面 浏览:96
windows拷贝到linux 浏览:772
mdr软件解压和别人不一样 浏览:904
单片机串行通信有什么好处 浏览:340
游戏开发程序员书籍 浏览:860
pdf中图片修改 浏览:288
汇编编译后 浏览:491