2014-05-25 7 views
15

मैं Android 4.4+ पर पारदर्शी स्थिति पट्टी बनाने के लिए कोशिश कर रहा हूँ बनाने के लिए : https://stackoverflow.com/a/20573595/2633630एंड्रॉयड, मुझे कैसे पता चलेगा कि मेरे खुद की शैली को परिभाषित करते हुए यह पारदर्शी बनाने के लिए एक पारदर्शी स्थिति पट्टी को सही ढंग से

समस्या यह है कि जब स्थिति पट्टी पारदर्शी है, यह कार्यवाही बार के रंग और पृष्ठभूमि में गतिविधि से मेल नहीं खाता देखा जाता है: transparent status bar error

तो मैंने पाया कि मैं एंड्रॉयड का उपयोग कर सकते हैं: fitsSystemWindows = "true" और एंड्रॉयड: clipToPadding = "false" मेरी लेआउट में कि मैं यहाँ http://mindofaandroiddev.wordpress.com/2013/12/28/making-the-status-bar-and-navigation-bar-transparent-with-a-listview-on-android-4-4-kitkat/

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/background_darkRed" 
android:fitsSystemWindows="true" 
android:clipToPadding="false"  
tools:context="com.sandak......."> 

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
.... 

कि पारदर्शी स्थिति पट्टी और दिखता है के साथ शीर्ष समस्या का हल मिल गया ठीक है .. दुर्भाग्य से सिस्टम बटन के साथ "एनएवी बार" पर नीचे की समस्या है, जो लाल है और पारदर्शी नहीं है जैसा कि मैं चाहता हूं: enter image description here

मैं कामकाजी परिणाम प्राप्त करने के लिए सभी संभावित रूपों का प्रयास कर रहा था, लेकिन मैं यह हल नहीं कर सकता कि इसे कैसे हल किया जाए। मेरा एकमात्र कामकाजी समाधान रूट तत्व के लिए 60 डीपी के बारे में शीर्ष पैडिंग सेट किया गया है। लेकिन यह समाधान बदसूरत है और विभिन्न उपकरणों पर अलग दिख सकता है और काम नहीं कर सकता है।

मुझे Google Play पर कुछ एप्लिकेशन मिले जो पारदर्शी पृष्ठभूमि के साथ ठीक काम कर रहे हैं, इसलिए मैं उत्सुक हूं कि वे इसे कैसे काम करते हैं।

उदाहरण के लिए: https://play.google.com/store/apps/details?id=com.trello और कुछ अन्य लोगों के

+0

जब मैं 'एंड्रॉइड सेट करता हूं: windowTranslucentStatus/Navigation' आपके जैसा सच है, पृष्ठभूमि केवल अर्ध-पारदर्शी हैं। क्या आपने अपने स्क्रीनशॉट में उस अच्छे काले ढाल प्रभाव को पाने के लिए कुछ अलग किया है? – JMRboosties

उत्तर

12

// अद्यतन:
ठीक है, यह काफी पुराना जवाब है। अब आप इसे संभालने के लिए सामग्री विषय का उपयोग कर सकते हैं और यह बहुत आसान है। बस 21+ करने के लिए लक्ष्य एपीआई सेट, समर्थन लाइब्रेरी का उपयोग करता है, तो आप की जरूरत है और सामग्री के विषय के साथ विषय बनाने जहां स्थिति पट्टी रंग सीधे

<style name="AppTheme" 
     parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- colorPrimary is used for the default action bar background --> 
     <item name="colorPrimary">@color/color_primary</item> 

     <!-- colorPrimaryDark is used for the status bar --> 
     <item name="colorPrimaryDark">@color/color_primary_dark</item> 

     <!-- colorAccent is used as the default value for colorControlActivated 
      which is used to tint widgets --> 
     <item name="colorAccent">@color/accent_orange</item> 
    </style> 

निर्दिष्ट कर सकते हैं ============== ================================================== =======

पुराने उत्तर:

ठीक है, ऐसा लगता है कि मैं अपने समस्या का समाधान। यह सबसे अच्छा और स्पष्ट समाधान नहीं है, लेकिन यह समाधान समाधान है। यदि भविष्य में कोई भी व्यक्ति बेहतर और अधिक स्पष्ट समाधान प्राप्त करेगा, तो कृपया मुझे बताएं और मैं अपना उत्तर अपडेट करूंगा/या अपने उत्तर को सही के रूप में चिह्नित करूंगा। लेकिन अभी के लिए, मेरे पास इस छोटे हैक की तुलना में कोई बेहतर समाधान नहीं है:

लेआउट का मूल तत्व सापेक्ष लयआउट होना चाहिए। स्क्रॉलव्यू या किसी अन्य प्रकार के लेआउट जैसे आपके मुख्य लेआउट का पालन करना चाहिए, इससे कोई फर्क नहीं पड़ता। सापेक्ष लेआउट टैग को बंद करने से पहले अंत में लाइनरलायआउट खाली होता है जिसने आपके एक्शन बार और निश्चित ऊंचाई (स्टेटस बार की ऊंचाई) के समान पृष्ठभूमि सेट की है।

private void setStatusBarBackground(View rootView) { 
     setStatusBarLayout(rootView); 
     statusBarHeight = getStatusBarHeight(); 
     setStatusBarLayoutHeight(statusBarHeight); 
    } 

    private void setStatusBarLayout(View rootView){ 
     statusBarBackgroundLinearLayout = (LinearLayout) rootView.findViewById(R.id.statusBarBackgroundLinearLayout); 
     if (isPreKitkatDevice()) { 
      hideStatusBarLayout(); 
     } 
    } 

    private int getStatusBarHeight() { 
     int statusBarHeight = 0; 
     int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); 
     if (resourceId > 0) { 
      statusBarHeight = getResources().getDimensionPixelSize(resourceId); 
     } 
     return statusBarHeight; 
    } 

    private boolean isPreKitkatDevice(){ 
     return Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT; 
    } 

    private void hideStatusBarLayout(){ 
     statusBarBackgroundLinearLayout.setVisibility(View.INVISIBLE); 
    }   

    private void setStatusBarLayoutHeight(int height){ 
     RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) statusBarBackgroundLinearLayout.getLayoutParams(); 
     layoutParams.height = height; 
    } 

और फिर बस अपने OnCreate() विधि में setStatusBarBackground फोन:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.sandak...."> 
<ScrollView 
    android:fitsSystemWindows="true" 
    android:clipToPadding="false" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
.... all your main views etc.. 
</ScrollView> 
<LinearLayout 
     android:id="@+id/statusBarBackgroundLinearLayout" 
     android:layout_width="match_parent" 
     android:orientation="horizontal" 
     android:layout_height="30dp" 
     android:background="@color/background_darkRed" 
     android:clickable="false" 
     android:focusable="false"> 
    </LinearLayout> 
</RelativeLayout> 

ठीक है तो आप कोड में एक ही रैखिक लेआउट ऊंचाई निर्धारित करने के लिए के रूप में स्थिति पट्टी है की है।यह सभी अलग-अलग प्रकार के उपकरणों के लिए समाधान समाधान है। प्री किटकैट उपकरणों के लिए जहां पारदर्शी पृष्ठभूमि की अनुमति नहीं है, आपको रैखिक लेआउट को छिपाना होगा।

+2

'getStatusBarLayout (देखें v) 'बिना वापसी प्रकार के? आप वह नाम बदल सकते हैं। :) – Rajkiran

संबंधित मुद्दे