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


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.