Android开发之有效获取状态栏(StatusBar)高度

论坛 期权论坛     
选择匿名的用户   2021-5-22 22:16   59   0
<div class="blogpost-body" id="cnblogs_post_body">
<p style="color:#333333;font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;font-size:14px;line-height:28px;"> <span style="color:#333333;font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;font-size:14px;line-height:28px;"><strong>获取状态栏高度</strong></span><br></p>
<p style="color:#333333;font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;font-size:14px;line-height:28px;"> <span style="color:#333333;font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;font-size:14px;line-height:28px;"><strong>一、传统方式:有时获取为0,解决方法看  二</strong></span></p>
<p style="color:#333333;font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;font-size:14px;line-height:28px;"> </p>
<table class="highlighttable" style="border-style:solid;border-color:#cccccc;border-collapse:collapse;border-spacing:0px;color:#333333;font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;font-size:14px;line-height:28px;"><tbody><tr><td class="linenos" style="border-right-style:solid;border-right-color:#cccccc;width:25px;text-align:right;">
     <div class="linenodiv" style="font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;">
      <pre class="blockcode">1
2
3
4
</pre>
     </div> </td><td class="code">
     <div class="highlight" style="font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;">
      <pre class="blockcode"><span class="err" style="border:1px solid #ff0000;">代码</span>
<span class="n">Rect</span> <span class="n">frame</span> <span class="o" style="color:#666666;">&#61;</span> <span class="k" style="color:#008000;font-weight:bold;">new</span> <span class="n">Rect</span><span class="o" style="color:#666666;">();</span>   
<span class="n">getWindow</span><span class="o" style="color:#666666;">().</span><span class="na" style="color:#7d9029;">getDecorView</span><span class="o" style="color:#666666;">().</span><span class="na" style="color:#7d9029;">getWindowVisibleDisplayFrame</span><span class="o" style="color:#666666;">(</span><span class="n">frame</span><span class="o" style="color:#666666;">);</span>   
<span class="kt" style="color:#b00040;">int</span> <span class="n">statusBarHeight</span> <span class="o" style="color:#666666;">&#61;</span> <span class="n">frame</span><span class="o" style="color:#666666;">.</span><span class="na" style="color:#7d9029;">top</span><span class="o" style="color:#666666;">;</span>  </pre>
     </div> </td></tr></tbody></table>
<p> </p>
<p> </p>
<p style="font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;font-size:14px;line-height:28px;"><span style="font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;font-size:14px;line-height:28px;"><strong><span style="color:#ff0000;">二、4.0.3之后可能获取为0</span></strong></span></p>
<p style="color:#333333;font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;font-size:14px;line-height:28px;"> </p>
<table class="highlighttable" style="border-style:solid;border-color:#cccccc;border-collapse:collapse;border-spacing:0px;color:#333333;font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;font-size:14px;line-height:28px;"><tbody><tr><td class="linenos" style="border-right-style:solid;border-right-color:#cccccc;width:25px;text-align:right;"> </td><td class="code">
     <div class="highlight" style="font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;">
      <pre class="blockcode">public int getBarHeight(){
        Class&lt;?&gt; c &#61; null;
        Object obj &#61; null;
        Field field &#61; null;
        int x &#61; 0, sbar &#61; 38;//默认为38,貌似大部分是这样的

        try {
            c &#61; Class.forName(&#34;com.android.internal.R$dimen&#34;);
            obj &#61; c.newInstance();
            field &#61; c.getField(&#34;status_bar_height&#34;);
            x &#61; Integer.parseInt(field.get(obj).toString());
            sbar &#61; getResources().getDimensionPixelSize(x);

        } catch (Exception e1) {
            e1.printStackTrace();
        }
        return sbar;
    }</pre>
     </div> </td></tr></tbody></table>
<p> </p>
<p> </p>
<p style="color:#333333;font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;font-size:14px;line-height:28px;"> //---------------------------------------------</p>
<p style="color:#333333;font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;font-size:14px;line-height:28px;"> <br></p>
<p style="color:#333333;font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;font-size:14px;line-height:28px;"> 1.获取状态栏高度:</p>
<p style="color:#333333;font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;font-size:14px;line-height:28px;"> decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFrame方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏。<br style="line-height:0;"> 于是,我们就可以算出状态栏的高度了。</p>
<table class="highlighttable" style="border-collapse:collapse;border-spacing:0px;border:1px solid #cccccc;color:#333333;font-family:&#39;微软雅黑&#39;, Arial, Helvetica, sans-serif;font-size:14px;line-height:28px;"><tbody><tr><td class="linenos" style="width:25px;text-align:
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP