অ্যাপবারআলআউট উইজেট অ্যান্ড্রয়েডের নীচে ছায়া সরিয়ে ফেলুন


96

AppBarLayoutডিজাইন সমর্থন লাইব্রেরিতে উইজেট ব্যবহার করার সময়, সরঞ্জামদণ্ডের নীচে একটি ছায়া উপস্থিত হয়। আমি কীভাবে সেই ছায়া সরিয়ে ফেলব?

উত্তর:


239

Simply use app:elevation="0dp" inside "AppBarLayout" to remove the shadow. It has always worked for me. Hope it works for you.


71
Don't use android:elevation. Use app:elevation.
radley

4
এলিভেশন সেটটি কেবলমাত্র এল এর পরে পাওয়া যায় এই সতর্কতা না পেয়ে প্রোগ্রামগতভাবে এটি করার কোনও উপায় আছে কি?
ডেভিডকভি 5

4
অ্যাপ্লিকেশন: উচ্চতা = "0 ডিপি", ছায়া সরানো হয়েছে, কিন্তু এখন ট্যাবগুলি ক্লিকযোগ্য নয়।
সন্দীপ পি

8
এটিকে 0 ডিপি সেট করাটি টুলবারটি আড়াল করছে।
শাজিল আফজাল

4
দুর্ভাগ্যক্রমে আর কোনও কাজের উত্তর নেই। লিউ টেং এর সাথে নীচে উত্তর দেখুন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দেখে মনে হচ্ছে ছায়া অপসারণ করতে উচ্চতা পরিবর্তন করা এক ধরণের পার্শ্ব প্রতিক্রিয়া। এবং উচ্চতা পরিবর্তন কিছু ক্ষেত্রে অন্যান্য সমস্যা হতে পারে।


এপিআই 21 সংস্করণ থেকে কেবল উপলভ্য
চক্রপাণি

এপিআই <21 দিয়ে কি করবেন?
ডিওয়াইএস

এই সমস্যাগুলি কেবল তখনই ঘটে যখন এপিআই = = 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

সর্বশেষতম অ্যাপকম্প্যাট সংস্করণ সহ, app:elevation="0.1dp"এক্সএমএলে কৌশল কৌশলটি আর কাজ করে না।

এখন পর্যন্ত আমি দুটি সমাধান খুঁজে পেয়েছি।

  1. সেট করার পরিবর্তে, app:elevationএকটি স্টেটলিস্ট অ্যানিম্যাটর ব্যবহার করার চেষ্টা করুন। উদাহরণস্বরূপ, কোডে:

    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"সাধারণ হিসাবে এক্সএমএলে সেট করেছেন তবে কোডে:

    appBarLayout.bringToFront();
    

ক্রেডিট এই দুটি আলোচনার দিকে যায়:

অ্যাপবারআলআউটটির জন্য উচ্চতা নির্ধারণ করার সময় টুলবার অদৃশ্য হয়ে যায়

যখন অ্যাপ্লিকেশন সেট করুন: এলিভেশন = "0 ডিপি" তারপরে হ্যামবার্গেমেনু সরঞ্জামদণ্ডে প্রদর্শিত হচ্ছে না


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.1 ডিপিও কাজ করছে না, এটি সরঞ্জামদণ্ড মেনুটিও আড়াল করছে।
শাজিল আফজাল

আমি এই টিপসটি ব্যবহার করে অ্যাপকম্প্যাট ভি 23.0.1 সহ একটি ওয়ার্কিং অ্যাপ্লিকেশন করেছি, আপনার কী সংস্করণ রয়েছে?
গুয়ুরগুই ওব্রেগন 14

আমি ব্যবহার করছি v25.0.0
শাজিল আফজাল

4
এটা তোলে আপডেট সংস্করণের সাথে আর কাজ করছে না মনে :(।
Gueorgui Obregon

2

অ্যাপ্লিকেশন যুক্ত করুন: আপনার অ্যাপবারলআউটটিতে এলিভেশন = "0 ডিপি"। এই উদাহরণ পছন্দ

<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>

জীবন রক্ষার উত্তর :)
ব্যবহারকারী 2672052


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.