AppBarLayout विजेट Android के नीचे छाया हटा दें


94

AppBarLayoutडिज़ाइन समर्थन लाइब्रेरी में विजेट का उपयोग करते समय, टूलबार के नीचे एक छाया दिखाई देती है। मैं उस छाया को कैसे हटा सकता हूं?

जवाबों:


233

बस app:elevation="0dp""AppBarLayout" छाया का उपयोग करने के लिए अंदर का उपयोग करें । इसने हमेशा मेरे लिए काम किया है। आशा है कि यह आप के लिए काम करता है।


64
Android का उपयोग न करें: ऊंचाई। एप्लिकेशन का उपयोग करें: उन्नयन।
राडले

4
क्या चेतावनी प्राप्त किए बिना इसे प्रोग्रामिक रूप से करने का एक तरीका है कि ऊंचाई सेट करना केवल एल के बाद उपलब्ध है?
davidcv5

2
एप्लिकेशन: ऊंचाई = "0dp", छाया हटा दी जाती है, लेकिन अब टैब क्लिक करने योग्य नहीं हैं।
संदीप पी।

8
इसे 0dp पर सेट करना टूलबार को छिपा रहा है।
शजील अफ़ज़ल

1
दुर्भाग्य से अब एक काम का जवाब नहीं है। नीचे लियू टेंग उत्तर देखेंsetOutlineProvider
मैथ्यू

49

यह समस्या केवल तब होती है जब एपीआई संस्करण> = 21, यदि आप ऊँचाई नहीं बदलना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

appBar.setOutlineProvider(null);

एपीआई संस्करण की जांच करने के लिए याद रखें


संपादित करें:

ब्लो का सोर्स कोड है setOutlineProvider

   /**
     * Sets the {@link ViewOutlineProvider} of the view, which generates the Outline that defines
     * the shape of the shadow it casts, and enables outline clipping.
     * <p>
     * The default ViewOutlineProvider, {@link ViewOutlineProvider#BACKGROUND}, queries the Outline
     * from the View's background drawable, via {@link Drawable#getOutline(Outline)}. Changing the
     * outline provider with this method allows this behavior to be overridden.
     * <p>
     * If the ViewOutlineProvider is null, if querying it for an outline returns false,
     * or if the produced Outline is {@link Outline#isEmpty()}, shadows will not be cast.
     * <p>
     * Only outlines that return true from {@link Outline#canClip()} may be used for clipping.
     *
     * @see #setClipToOutline(boolean)
     * @see #getClipToOutline()
     * @see #getOutlineProvider()
     */
    public void setOutlineProvider(ViewOutlineProvider provider) {
        mOutlineProvider = provider;
        invalidateOutline();
    }

ऐसा कहा जाता है कि If the ViewOutlineProvider is null, if querying it for an outline returns false, or if the produced Outline is {@link Outline#isEmpty()}, shadows will not be cast.

इसलिए, यदि आप छाया हटाना चाहते हैं, तो आप सेटिंग के बजाय इस विधि का बेहतर उपयोग करेंगे app:elevationऐसा लगता है कि छाया को हटाने के लिए ऊंचाई को बदलना एक तरह का दुष्प्रभाव है। और ऊंचाई बदलने से कुछ मामलों में कुछ अन्य समस्याएं हो सकती हैं।


API केवल संस्करण 21 से उपलब्ध है।
चक्रपाणि

एपीआई <21 के साथ क्या करना है?
DYS

यह समस्या केवल तब होती है जब api> = 21
लियू टेंग

9

उन सभी के लिए जो टूलबार का उपयोग नहीं करना चाहते हैं bringToFront()और elevation="0dp"टूलबार को गायब कर देते हैं:

app:elevation="0dp"android:translationZ="0.1dp"मेरे साथ काम किया।

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay"
    app:elevation="0dp"
    android:translationZ="0.1dp"
    >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@null"
        app:popupTheme="@style/AppTheme.PopupOverlay"/>

</android.support.design.widget.AppBarLayout>

8

नवीनतम appcompat संस्करणों के साथ, app:elevation="0.1dp"xml में चाल सेटिंग किसी भी अधिक काम नहीं करता है।

अब तक मैंने दो उपाय खोजे हैं।

  1. सेटिंग के बजाय app:elevation, एक StateListAnimator का उपयोग करने का प्रयास करें। उदाहरण के लिए, कोड में:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        StateListAnimator stateListAnimator = new StateListAnimator();
        stateListAnimator.addState(new int[0], ObjectAnimator.ofFloat(appBarLayout, "elevation", 0.1f));
        appBarLayout.setStateListAnimator(stateListAnimator);
    }
  2. एक आसान तरीका यह है कि आप अभी भी app:elevation="0dp"सामान्य रूप में xml में सेट हैं , लेकिन कोड में:

    appBarLayout.bringToFront();

इन दो चर्चाओं का श्रेय जाता है:

AppBarLayout के लिए ऊंचाई सेट करते समय टूलबार गायब हो जाता है

जब सेट एप्लिकेशन: उन्नयन = "0dp" तो हैम्बर्गर्मेनू टूलबार को नहीं दिखा रहा है


3

का उपयोग करें android:stateListAnimator="@null"। कोई साइड इफेक्ट नहीं।

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:animateLayoutChanges="true"
    android:stateListAnimator="@null"
    >

2

मैंने कोशिश की app:elevation="0dp", लेकिन टूलबार निराश करता है, लेकिन प्रयोग app:elevation="0.1dp"ने चाल बना दी।

आशा है कि यह किसी और की मदद करता है।


0.1dp भी काम नहीं कर रहा है, यह टूलबार मेनू को भी छिपा रहा है।
शजील अफ़ज़ल

मैंने इस युक्तियों का उपयोग करते हुए appcompat v23.0.1 के साथ एक कार्यशील ऐप बनाया है, आपके पास क्या संस्करण है?
ग्यूगार्इ ओबरेगन

मैं उपयोग कर रहा हूं v25.0.0
शजील अफ़ज़ल

2
यह अद्यतन संस्करणों के साथ अब काम नहीं कर रहा है :(।
Gueorgui Obregon

2

अपने AppBarLayout पर ऐप जोड़ें: उन्नयन = "0dp"। इस उदाहरण की तरह

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:elevation="0dp"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>

जीवन रक्षक उत्तर :)
user2672052

1

प्रोग्रामेटिक रूप से आप इसका उपयोग कर सकते हैं: getSupportActionBar ()। SetElevation (0.0f);


0

यह वह तरीका है जो मैं app:elevation="0dp"छाया को हटाने के लिए आया था । पूरी तरह से काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.