• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 状态栏一体化及其带来的软键盘自适应问题

状态栏一体化及其带来的软键盘自适应问题

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了状态栏,状态栏怎么还原,沉浸式状态栏,cad状态栏怎么调出来,状态栏在哪里等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

状态栏一体化及其带来的软键盘自适应问题


状态栏一体化及其带来的软键盘自适应问题
应项目需求才开始了解状态栏一体化的问题,作为一个android新手,之前从未接触过。第一反应是网上搜索,不得不说网络确实给我带来很大的帮助,但是对于类似小白的我来说,还不够,不够详细。
几经周折,最终完成效果。代码专不专业,不清楚,但是解决了我遇到的问题。在此记录一下我的学习成果,也给像我一样需要的人提供一些帮助。

首先状态栏一体化是android4.4以上版本才有的。

先上效果图:
这里写图片描述 这里写图片描述

实现:
上图第一张:自定义标题栏
布局:activity_main.xml




    

自定义标题栏title_layout.xml





    

        
    


    

activity实现:MainActivity.java

import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.RelativeLayout;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RelativeLayout rlTitle = (RelativeLayout)findViewById(R.id.title);
        //4.4版本以上
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window win = getWindow();
            WindowManager.LayoutParams winParams = win.getAttributes();
            final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
            winParams.flags |= bits;
            win.setAttributes(winParams);

            ViewGroup.LayoutParams params = rlTitle.getLayoutParams();
            params.height = params.height + getStatusBarHeight();
            rlTitle.setLayoutParams(params);
        }
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this,NewActivity.class));
            }
        });
    }

    /**
     * 获取状态栏的高度
     * @return
     */
    private int getStatusBarHeight() {
        int result = 0;
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }
}

是不是很简单呢~~
接着第二张图片一体化
布局activity_new.xml




    

NewActivity.java

public class NewActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);
        //4.4版本以上 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window win = getWindow();
            WindowManager.LayoutParams winParams = win.getAttributes();
            final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
            winParams.flags |= bits;
            win.setAttributes(winParams);

        }
    }

}

OK,接着来说一下我探索中遇到的一些问题:
1.//4.4版本以上
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
winParams.flags |= bits;
win.setAttributes(winParams);
}

这段代码主要是使状态栏透明化
2.android:fitsSystemWindows="true"
android:clipToPadding="true"

fitSystemWindows属性:
官方描述:

    Boolean internal attribute to adjust view layout based on system windows such as the status bar. If true, adjusts the padding of this view to leave space for the system windows. Will only take effect if this view is in a non-embedded activity.
    当status bar状态栏为透明或半透明时(4.4以上),系统会设置窗口view的paddingTop值为一个适合的值(status bar的高度)让view的内容不被上拉到状态栏,当在不占据status bar的情况下(4.4以下)会设置paddingTop值为0(因为没有占据status bar所以不用留出空间)。

3.ViewGroup.LayoutParams params = rlTitle.getLayoutParams();
params.height = params.height + getStatusBarHeight();
rlTitle.setLayoutParams(params);

调整标题栏的高度,在原有高度上再加上状态栏的高度。

问题来了:
上述3段代码在具体实现中的作用,只有 1 时,会出现这样的效果
这里写图片描述
状态栏消失了,看上去一体化了,但是效果是标题栏整体上移了,占据了状态栏的位置,文字 图片都和状态栏重叠了,显然不是我们要的效果
这是在加上第 2 段代码,在布局文件中,注意这段代码是要加在 你希望一体化的那个控件布局中,就如现在我们希望状态栏的颜色和我们自定义的标题栏title_layout的颜色一样,那么我们就把代码 2 加在title_layout的根布局中,加上后效果图:
这里写图片描述
与上张图比效果好点,至少文字没有上升到状态栏,但是我们的标题栏高度呢,没。。有。。了。。。 怎么可以这样,这不是我们想要的啊。。。所以我们我们把标题栏的高度调一下,就是把代码 3 加上,在标题栏原有高度上加上状态栏高度。然后 Ok
这里写图片描述

看,这就是最终效果,完美实现。。。。

然后是图片的问题。从上述问题中,我想已经看出来,我们第一步的效果,完全就可以用来解决图片一体化啊,对 ,就是这样,加图片时,我们只需要一步,

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 菜鸟新闻2--设置沉浸式状态栏,新闻2--沉浸状态栏
  • 沉浸式状态栏与导航条,状态栏导航条
  • Android通知栏沉浸式/透明化完整解决方案,root不完整解决方法
  • Android设置透明状态栏和透明导航栏,android导航栏
  • Android中的沉浸式状态栏效果,android沉浸状态栏
  • Android中隐藏顶部状态栏的那些坑,android顶部状态栏
  • 状态栏一体化及其带来的软键盘自适应问题
  • 对沉浸式状态栏的理解,沉浸式状态栏理解
  • android沉浸式状态栏、变色状态栏、透明状态栏、修改状态栏颜色及透明
  • Android最佳实践之SystemBar状态栏全版本适配方案

相关文章

  • 2017-05-26谈谈Android中的Divider,AndroidDivider
  • 2017-05-26android OrmLite,androidormlite
  • 2017-05-26安开发卓之Notification(一)代码直接能用,安开发notification
  • 2017-05-26linux文件系统的规模与瓶颈
  • 2017-05-26android launchmode 使用场景
  • 2017-05-26Android框架设计模式(四)——Adapter Method
  • 2017-05-26说说Android6.0动态申请权限的那些坑,android6.0动态权限
  • 2017-05-26getDrawingCache()和Android中的截图方法简介
  • 2017-05-26SharedPreferences详解,sharedpreferences
  • 2017-05-26Android开发:优化ListView实践解析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android 框架启动流程
    • 安卓开源项目周报1214,安卓开源项目1214
    • Android ShareSDK快速实现分享功能,androidsharesdk
    • 自定义控件详解(二):Path类 相关用法,详解path
    • Adroid: getExternalStorageDirectory 不一定是你想要的外部存储SdCard,adroidsdcard
    • Android中的属性动画(Property Animation)——Android开发艺术探索笔记
    • 【React Native开发】React Native控件之ToolbarAndroid工具栏控件讲解以及使用(15)
    • Android4.4访问外部存储,android4.4访问存储
    • ButterKnife注解框架详解,butterknife注解框架
    • redis使用内存调整及优化

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有