Android中windowTranslucentStatus與windowTranslucentNavigation的一些設定(轉)

來源:互聯網
上載者:User

標籤:article   qemu   tag   效果   預設   開始   tle   展開   androi   

在iOS中,你可能發現頁面會整體拉升到狀態列,整個頁面效果就會顯得更加的高端大氣上檔次,在Android4.4以後其實也有這種效果的實現,下面我就說一下在進行這種效果實現時碰到的一些坑,希望對大家有一些協助吧。

首先來說一下關於這種效果的一些額外設定:

windowActionBar:這個應該大家都知道,在自訂的Theme中設定成false,就沒有系統預設的那個菜單選項了。

windowNotTitle: 設定這個屬性為true則不顯示標題了

 

colorPrimary:這個屬性是你的actiinbar的屬性顏色

colorPrimaryDark:這個屬性則是你的標題列的顏色,你可以設定和你自訂的標題列一個顏色,就可以達到以下這種效果

接下來我們看看windowTranslucentStatus屬性與windowTranslucentNavigation屬性的設定,首先,我們要知道,Android版本到4.4才會有個屬性,所以說不管你是在代碼中進行實現或者是在資源檔style中進行實現,
你都需要進行版本的控制。首先在資源檔中進行實現,你要建立一個新的檔案夾,value-v19,在這個檔案夾中建立
style檔案進行編輯,在其中設定主題,定義屬性
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
然後給你的activity設定這個style,第一個屬性很明顯就是可以拉升到頂部狀態列,並且定義頂部狀態列透明,這樣你的頁面就是一整張了,沒有上面電池背景條之類的了,整個頁面看上去會好很多,】
第二個屬性,是設定你的虛擬鍵透明,這個虛擬鍵就是返回和菜單鍵等,現在有的手機會放到螢幕上,而有的是沒有的。到這個時候,如果你的手機有虛擬鍵的話,你會發現問題來了,你會發現你的頁面展開到了虛擬鍵的下面,
也就是頁面填充了整個螢幕,不留一點空間了,如果你是列表的話,那麼無所謂,並不影響操作和頁面效果,如果你的是最下面有按鈕的頁面的話,你會發現這玩意就是一個坑啊,
因為你的按鈕填充到了下面,你根本按不到,而且如果你設定了透明屬性的話,你會發現虛擬鍵和你最下面的按鈕都重合在一起,具體效果
圖如所示:


然後你開始在style裡改變兩個屬性的所有制測試,發現都沒有什麼卵用,我不知道還有沒有其他的解決辦法,反正當我做到這裡的時候,認定了它就是一個巨坑。
在你的布局檔案中設定fitsSystemWindows這個屬性其實也不會拉升到最下面,但是這樣的話。。。。連上面都不展開了,有什麼意義,而且好像設定了以後,你設定的
colorPrimaryDark也會無效,也可能是我的水平不行,反正被這個地方坑了好久。
但是不要急,辦法總是人想出來,在xml檔案中進行設定既然不方便,不靈活,那麼我們就試試去Java代碼中設定這個屬性。
根絕前面說的那個坑,我們先判斷一下你的手機是否含有NavigationBar這個東西,就是虛擬鍵,判斷代碼如下

public static boolean isHaveNavigationBar(Context context) {    boolean isHave = false;    Resources rs = context.getResources();    int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");    if (id > 0) {        hasNavigationBar = rs.getBoolean(id);    }    try {        Class systemPropertiesClass = Class.forName("android.os.SystemProperties");        Method m = systemPropertiesClass.getMethod("get", String.class);        String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");        if ("1".equals(navBarOverride)) {            isHave = false;        } else if ("0".equals(navBarOverride)) {            isHave = true;        }    } catch (Exception e) {        Log.w("TAG", e);    }    return isHave;}
返回為true的話就不給他設定,反之設定,具體代碼如下:

public static void transportStatus(Activity context){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        if (!isHaveNavigationBar(context))
            context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        }
}

這樣就可以達到想要的效果了.

52606980

Android中windowTranslucentStatus與windowTranslucentNavigation的一些設定(轉)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.