Android "উচ্চতা" কোনও ছায়া দেখাচ্ছে না


273

আমার একটি তালিকাভিউ রয়েছে এবং প্রতিটি তালিকার আইটেমের সাথে এটির নীচে একটি ছায়া দেখাতে চাই। আমি একটি ছায়া ফেলতে চাই সেই দৃশ্যে একটি জেড সেট করতে অ্যান্ড্রয়েড ললিপপের নতুন উচ্চতা বৈশিষ্ট্যটি ব্যবহার করছি এবং ইতিমধ্যে অ্যাকশনবারের (প্রযুক্তিগতভাবে ললিপপের একটি সরঞ্জামদণ্ড) দিয়ে এটি কার্যকরভাবে করছি doing আমি ললিপপের উচ্চতা ব্যবহার করছি তবে কোনও কারণে এটি তালিকার আইটেমগুলির নীচে কোনও ছায়া দেখাচ্ছে না। প্রতিটি তালিকার আইটেমের লেআউটটি কীভাবে সেট আপ করা হয়েছে তা এখানে:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    style="@style/block"
    android:gravity="center"
    android:layout_gravity="center"
    android:background="@color/lightgray"
    >

    <RelativeLayout
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"
        android:elevation="30dp"
        >

        <ImageView
            android:id="@+id/documentImageView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop" />

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/alphared"
            android:layout_alignParentBottom="true" >

            <appuccino.simplyscan.Extra.CustomTextView
                android:id="@+id/documentName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@color/white"
                app:typeface="light"
                android:paddingLeft="16dp"
                android:paddingTop="8dp"
                android:paddingBottom="4dp"
                android:singleLine="true"
                android:text="New Document"
                android:textSize="27sp"/>

            <appuccino.simplyscan.Extra.CustomTextView
                android:id="@+id/documentPageCount"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@color/white"
                app:typeface="italic"
                android:paddingLeft="16dp"
                android:layout_marginBottom="16dp"
                android:text="1 page"
                android:textSize="20sp"/>

        </LinearLayout>

    </RelativeLayout>

</RelativeLayout>

তবে, এটি এখানে ছায়া ছাড়াই তালিকার আইটেমটি কীভাবে দেখায়: এখানে চিত্র বর্ণনা লিখুন

আমি নিম্নলিখিত চেষ্টা করেও কোন লাভ করতে পারিনি:

  1. অভিভাবক বিন্যাসের পরিবর্তে ইমেজভিউ এবং টেক্সটভিউগুলিতে তাদের উন্নতি সেট করুন।
  2. ইমেজভিউতে একটি পটভূমি প্রয়োগ করা হয়েছে।
  3. উন্নয়নের জায়গায় অনুবাদ অনুবাদ

আমি আপনার বিন্যাসটি চেষ্টা করেছি (কাস্টমভিউ ছাড়াই) এবং আমার ফোনে ছায়া দেখিয়েছি, আপনি কোনও ন্যূনতম প্রকল্প ভাগ করতে পারেন যা সমস্যাটি পুনরুত্পাদন করে?
rnrneverdies


সংশ্লিষ্ট প্রশ্ন: stackoverflow.com/questions/26572048/...
stefan222

উত্তর:


383

আমি কিছুক্ষণ ধরে ললিপপে ছায়া নিয়ে খেলছিলাম এবং আমি এটি পেয়েছি:

  1. এটি প্রদর্শিত হয় যে কোনও পিতামাতার ViewGroupকোনও কারণে তার বাচ্চাদের ছায়া কাট অফ হয়; এবং
  2. এর সাথে সেট করা ছায়াগুলি সীমানা android:elevationদ্বারা কাট অফ হয় View, সীমানা দিয়ে প্রসারিত সীমানা দ্বারা নয়;
  3. ছায়া দেখাতে বাচ্চার দৃষ্টিভঙ্গির সঠিক উপায় হ'ল পিতামাতার উপর প্যাডিং সেট করা android:clipToPadding="false"এবং সেই পিতামাতার উপর সেট করা।

আমি যা জানি তার উপর ভিত্তি করে আপনার কাছে আমার পরামর্শটি এখানে:

  1. RelativeLayoutআপনি ছায়া দেখাতে চান এমন তুলনামূলক বিন্যাসে আপনি যে মার্জিনটি সেট করেছেন সেটির সমান প্যাডিংয়ের জন্য আপনার শীর্ষ-স্তরটি সেট করুন;
  2. android:clipToPadding="false"একই সেট RelativeLayout;
  3. RelativeLayoutউচ্চতা সেট আছে যা থেকে মার্জিন সরান ;
  4. [সম্পাদনা] আপনার চাইল্ড লেআউটে একটি স্বচ্ছ-স্বচ্ছ ব্যাকগ্রাউন্ড রঙ সেট করার প্রয়োজনও হতে পারে যা উচ্চতার প্রয়োজন।

দিনের শেষে, আপনার শীর্ষ-স্তরের আপেক্ষিক বিন্যাসটি দেখতে এমন হওয়া উচিত:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    style="@style/block"
    android:gravity="center"
    android:layout_gravity="center"
    android:background="@color/lightgray"
    android:paddingLeft="40dp"
    android:paddingRight="40dp"
    android:paddingTop="20dp"
    android:paddingBottom="20dp"
    android:clipToPadding="false"
    >

অভ্যন্তরীণ আপেক্ষিক বিন্যাসটি দেখতে এমন হওয়া উচিত:

<RelativeLayout
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:background="[some non-transparent color]"
    android:elevation="30dp"
    >

8
এর জন্য ধন্যবাদ! আমি অ্যান্ড্রয়েডও পেয়েছি: ক্লিপচিল্ডেন = "মিথ্যা" পিতামাতার আপেক্ষিক বিন্যাসে প্রয়োগ করার সময় দরকারী হতে পারে।
ব্লফি

1
@ ব্লাফি সাহায্য করতে পেরে খুশি!
জাস্টিন পোলার্ড

214
এটি এতটাই বিরক্তিকর যে গুগল এরকম মজাদার কোড তৈরি করে। আমাদের বছরের পর বছর ধরে এই ফ্রেমওয়ার্ক বাগগুলির জন্য অ্যাকাউন্ট করতে হবে।
মাইগুয়েল

8
গুগল কেবল বলেছে (হায়): " উচ্চতর ভিউয়ের পিতামাতার দ্বারা ছায়া আঁকানো হয়, এবং এইভাবে পিতামাতার দ্বারা ডিফল্টরূপে ক্লিপড স্ট্যান্ডার্ড ভিউ ক্লিপিংয়ের সাপেক্ষে " "
জন

5
আমার ক্ষেত্রে এটি ছিল স্বচ্ছ রঙ। ঠিক আছে, স্বচ্ছ জিনিসগুলি ছায়া ফেলে না ... হাহা
ফেরান মেলিনিঞ্চ

285

কোনও পটভূমি না থাকলে আপনার দৃষ্টিভঙ্গি থাকলে এই লাইনটি আপনাকে সহায়তা করবে

android:outlineProvider="bounds"

ডিফল্টরূপে ছায়া দর্শনের পটভূমিতে নির্ধারিত হয়, সুতরাং যদি কোনও পটভূমি না থাকে তবে কোনও ছায়াও থাকবে না।


11
কি আশ্চর্যের বিষয়, পূর্বরূপ উচ্চতা দেখায় কিন্তু বাস্তব ডিভাইস তা দেয় নি। ধন্যবাদ, এটি একটি সমস্যার সমাধান করেছে।
আইওনে শারভাদজে

এপিআই স্তরের 21 এবং
উচ্চতরর

10
এই ধরণেরটি আমার পক্ষে কাজ করেছিল তবে পাঠ্যদর্শনটিতে প্রয়োগ করার সময় পক্ষগুলিতে একটি তির্যক সীমানা দিয়েছিল। ব্যাকগ্রাউন্ডটিকে কোনও রঙে সেট করা (পিতামাতার পটভূমির রঙের মতো) আরও ভাল কাজ করেছে।
গোবার

4
আপনার পটভূমিটি যদি কাস্টম হয় এবং না থাকে তবে এটি প্রযোজ্য <solid>
ডেভিড লর্ড

এটি বিপরীতে ব্যবহার করা যেতে পারে। আপনি যখন উন্নয়নের সাথে একটি স্বচ্ছ স্বচ্ছ পটভূমি চান এবং ছায়া চান না। কেবল এটি সেট করুন none। ধন্যবাদ!
ওডিস 26'18

101

স্পষ্টতই, আপনি কেবলমাত্র একটি ভিউতে একটি উচ্চতা সেট করতে পারবেন না এবং এটি প্রদর্শিত হবে। আপনার একটি পটভূমি নির্দিষ্ট করতে হবে।

নিম্নলিখিত লাইনগুলি আমার লিনিয়ারলআউটে যুক্ত হয়েছে অবশেষে একটি ছায়া দেখিয়েছে:

android:background="@android:color/white"
android:elevation="10dp"

এটা অপ্রত্যাশিত ছিল। আমি এসসিআর দিয়ে ইমেজভিউ সেট করেছি এবং সমাধান খুঁজছি। ধন্যবাদ.
অ্যান্ড্রু

47

অন্য একটি বিষয় যা সম্পর্কে আপনার সচেতন হওয়া উচিত, আপনার যদি ম্যানিফেস্টে এই লাইন থাকে তবে ছায়াগুলি প্রদর্শিত হবে না:

অ্যান্ড্রয়েড hardwareAccelerated = "FALSE"

আমি প্রস্তাবিত সমস্ত স্টাফ চেষ্টা করেছিলাম কিন্তু এটি কেবল তখনই কাজ করেছিল যখন আমি লাইনটি সরিয়ে ফেলেছিলাম, আমার কাছে লাইনটি থাকার কারণটি ছিল কারণ আমার অ্যাপ্লিকেশন বেশ কয়েকটি বিটম্যাপ চিত্র নিয়ে কাজ করে এবং তারা অ্যাপটি ক্র্যাশ করে দেয়।


1
এটি উপস্থিত হওয়ার জন্য যদি আপনার পতাকাটি প্রয়োজন হয় তবে এটি সমস্যার সমাধান করে না।
ক্লাইভ জেফারিজ

ধন্যবাদ!! আমি অ্যাপবারকে উন্নত করার চেষ্টা করে একদিন ব্যয় করেছি এবং আমি যখন এই ক্রিয়াকলাপের পতাকাটির জন্য ম্যানিফেস্টটি পরীক্ষা করেছি তখন সমস্যাটি খুঁজে পেয়েছি
ir2pid

1
আমি সমস্ত সম্ভাব্য সমাধান চেষ্টা করেছিলাম, কিন্তু আমার পক্ষে কোনও কাজ হয়নি। এই সমাধান কাজ করে। ধন্যবাদ। android:clipToPadding="false"এই সমাধানটিও দরকার ।
চিরাগ সাবসানী

29

কোনও পটভূমি না থাকলে আপনার দৃষ্টিভঙ্গি থাকলে এই লাইনটি আপনাকে সহায়তা করবে

android:outlineProvider="bounds"

পটভূমির সাথে আপনার মতামত থাকলে এই লাইনটি আপনাকে সহায়তা করবে

android:outlineProvider="paddedBounds"

6
এই সমাধানটিই কেবল আমার পক্ষে কাজ করে। আপনাকে ধন্যবাদ
ওলেহ লিসকোভিচ

4
আপনার দর্শনের ব্যাকগ্রাউন্ডে ব্যাসার্ধ না থাকলে এটি কাজ করে, সেক্ষেত্রে ছায়াটি আয়তক্ষেত্র হিসাবে দেখানো হবে, তবে প্যাডডবাউন্ডস ব্যাকগ্রাউন্ডের সাথে দেখার জন্য কাজ করে না।
ট্রেভর হার্ট

android:outlineProvider="paddedBounds"এই লাইন আমার জন্য কাজ করে। আমি নির্বাচক ড্রয়যোগ্য সেট।
চিরাগ সাবসানী

1
যখন আমি এটি ব্যবহার করি তখন ছায়া বাহিরের চেয়ে দৃশ্যের অভ্যন্তরে সম্পূর্ণভাবে টানা হয়, যা আমি চাই না।
androidguy

18

আপনি যদি কোনও বোতামের উপাদানটিতে উন্নতি যুক্ত করে থাকেন তবে আপনাকে নিম্নলিখিত লাইনটি যুক্ত করতে হবে:

android:stateListAnimator="@null"

দেখুন দৃশ্যের জন্য টিলা ওয়ার্কস, কিন্তু না বোতাম: অ্যান্ড্রয়েড 5.0 Android এর?


12

ওহ, এটি বের করার চেষ্টা করতে এক ঘন্টা সময় ব্যয় করেছে। আমার ক্ষেত্রে আমার ব্যাকগ্রাউন্ড সেট ছিল, তবে এটি কোনও রঙে সেট করা হয়েছিল। এটি যথেষ্ট নয়, আপনার দৃশ্যের ব্যাকগ্রাউন্ডটি একটি অঙ্কনযোগ্যকে সেট করতে হবে।

যেমন এর ছায়া থাকবে না:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="165dp"
    android:background="@color/ight_grey"
    android:elevation="20dp"
    android:orientation="vertical"
    />

কিন্তু এই ইচ্ছা

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="165dp"
    android:background="@drawable/selector_grey"
    android:elevation="20dp"
    android:orientation="vertical"
    />

সম্পাদনা: এটিও আবিষ্কার করেছেন যে আপনি যদি কোনও নির্বাচককে ব্যাকগ্রাউন্ড হিসাবে ব্যবহার করেন, যদি আপনার কোণার সেট না থাকে তবে ছায়া পূর্বরূপ উইন্ডোতে প্রদর্শিত হবে না তবে এটি ডিভাইসে প্রদর্শিত হবে

উদাহরণস্বরূপ এটির পূর্বরূপে ছায়া নেই:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/white" />
            <stroke
                android:width="1dp"
                android:color="@color/grey"/>
        </shape>
    </item>
</selector>

তবে এটি করে:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/white" />
            <corners android:radius="1dp" />
            <stroke
                android:width="1dp"
                android:color="@color/grey"/>
        </shape>
    </item>
</selector>

1
আপনার প্রথম পয়েন্টটির ঠিক বিপরীতটি আমার কাছে একটি রিসাইক্লারভিউ আইটেমটিতে সত্য ছিল ... এটি আশ্চর্যজনক যে 5 বছর বয়সী পেশাদার অ্যান্ড্রয়েড বিকাশের পরেও এই
আইপিআইগুলির

7

পটভূমির রঙ যুক্ত করা আমাকে সহায়তা করেছিল।

<CalendarView
    android:layout_width="match_parent"
    android:id="@+id/calendarView"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"
    android:layout_height="wrap_content"
    android:elevation="5dp"

    android:background="@color/windowBackground"

    />

4

কখনও কখনও পছন্দ background="@color/***"বা background="#ff33**"না কাজ, আমি background_colorঅঙ্কনযোগ্য সঙ্গে প্রতিস্থাপন , তারপর এটি কাজ করে


4

যদি এটি এখনও উচ্চতা দেখায় না

    android:hardwareAccelerated="true" 

এটি অবশ্যই আপনাকে সাহায্য করবে।


এটি আমার জন্য এটি স্থির করে দিয়েছে। আমি ধরে নিয়েছিলাম যে সত্যটি ডিফল্ট সেটিং ছিল, তবে আমার ক্ষেত্রে অন্তত দৃশ্যত তা নয়।
ম্যাট রবার্টসন

3

আপনি যদি স্বচ্ছ পটভূমি রাখতে চান এবং আপনার android:outlineProvider="bounds"পক্ষে কাজ না করে, আপনি কাস্টম ভিউআউটলাইনপ্রোভাইডার তৈরি করতে পারেন:

class TransparentOutlineProvider extends ViewOutlineProvider {

    @Override
    public void getOutline(View view, Outline outline) {
        ViewOutlineProvider.BACKGROUND.getOutline(view, outline);
        Drawable background = view.getBackground();
        float outlineAlpha = background == null ? 0f : background.getAlpha()/255f;
        outline.setAlpha(outlineAlpha);
    }
}

এবং এই সরবরাহকারীটিকে আপনার স্বচ্ছ দৃষ্টিতে সেট করুন:

transparentView.setOutlineProvider(new TransparentOutlineProvider());

সূত্র: https://code.google.com/p/android/issues/detail?id=78248#c13

[সম্পাদনা] ড্রয়যোগ্য ডকুমেন্টেশন.জেটআল্ফা () বলেছেন যে এটি কীভাবে ড্রয়যোগ্য আলফাকে হুমকির সাথে নির্দিষ্ট করে তোলে। এটি সর্বদা 255 ফেরত আসার সম্ভাবনা রয়েছে this এক্ষেত্রে আপনি নিজে নিজে আলফা সরবরাহ করতে পারেন:

class TransparentOutlineProvider extends ViewOutlineProvider {

    private float mAlpha;

    public TransparentOutlineProvider(float alpha) {
        mAlpha = alpha;
    }

    @Override
    public void getOutline(View view, Outline outline) {
        ViewOutlineProvider.BACKGROUND.getOutline(view, outline);
        outline.setAlpha(mAlpha);
    }
}

যদি আপনার দেখার ব্যাকগ্রাউন্ডটি আলফা ডিডিএক্স 0 / এফএফএক্স 0 == 0.86 এর সাথে ডিফল্ট রঙ # ডিডিএফএফ0000 সহ স্টেটলিস্টড্রাউয়েবল হয়

transparentView.setOutlineProvider(new TransparentOutlineProvider(0.86f));

2

লেআউটটিতে আমার জন্য কাজ করা কিছু পটভূমি রঙ দিন:

    android:background="@color/catskill_white"
    android:layout_height="?attr/actionBarSize"
    android:elevation="@dimen/dimen_5dp"

1

clipChildren="false"প্যারেন্ট লেআউটে সেট করার সাথে আমার কিছু ভাগ্য ছিল ।


1

আমি এটিতে কাজ করার জন্য কিছু সময় ব্যয় করেছি এবং শেষ পর্যন্ত বুঝতে পারি যে যখন পটভূমিটি অন্ধকার হয় তখন ছায়া দৃশ্যমান হয় না


1

গৃহীত উত্তরে যুক্ত করা, আরও একটি কারণ রয়েছে যার কারণে ফোনে ব্লুয়াইট ফিল্টার বৈশিষ্ট্যটি চালু থাকলে উচ্চতা প্রত্যাশার মতো কাজ করতে পারে না।

আমার ডিভাইসে যখন এলিভেশনটি সম্পূর্ণরূপে বিকৃত এবং অসহনীয় প্রদর্শিত হয়েছিল তখন আমি এই সমস্যার মুখোমুখি হয়েছি। তবে পূর্বরূপে উচ্চতা ঠিক ছিল। ফোনে ব্লুয়েলাইট ফিল্টারটি বন্ধ করা সমস্যার সমাধান করেছে।

এমনকি সেট করার পরেও

android:outlineProvider="bounds"

উচ্চতা সঠিকভাবে কাজ করছে না, তারপরে আপনি ফোনের রঙ সেটিংসের সাথে টিঙ্কার চেষ্টা করতে পারেন।


0

আমি বিশ্বাস করি যে আপনার সমস্যাটি উত্থাপিত লেআউটে উন্নয়নের উপাদানটি প্রয়োগ করেছে যা তার পিতামাতাকে পূরণ করে। এর পিতামাতারা সমস্ত চিত্রের দৃষ্টিভঙ্গি তার নিজস্ব অঙ্কন ক্যানভাসের মধ্যে ক্লিপ করে (এবং এমন দৃষ্টিভঙ্গি যা সন্তানের ছায়া পরিচালনা করে)। আপনি RelativeLayoutআপনার ভিউ এক্সএমএল (মূল ট্যাগ) শীর্ষে শীর্ষে উন্নত সম্পত্তি প্রয়োগ করে এটি ঠিক করতে পারেন ।


0

আমার ক্ষেত্রে ফন্টগুলির সমস্যা ছিল।

1) fontFamilyআমি android:backgroundকিছু মান সেট করা প্রয়োজন ছাড়া ।

<TextView
    android:layout_width="match_parent"
    android:layout_height="44dp"
    android:background="@android:color/white"
    android:elevation="3dp"
    android:gravity="center"
    android:text="@string/fr_etalons_your_tickets"
    android:textAllCaps="true"
    android:textColor="@color/blue_4" />

2) fontFamilyআমার সাথে android:outlineProvider="bounds"সেটিং যুক্ত করতে হয়েছিল:

<TextView
    android:fontFamily="@font/gilroy_bold"
    android:layout_width="match_parent"
    android:layout_height="44dp"
    android:background="@android:color/white"
    android:elevation="3dp"
    android:gravity="center"
    android:outlineProvider="bounds"
    android:text="@string/fr_etalons_your_tickets"
    android:textAllCaps="true"
    android:textColor="@color/blue_4" />

0

আমার ক্ষেত্রে, এটি একটি কাস্টম প্যারেন্ট উপাদান দ্বারা "সফ্টওয়্যার" এ রেন্ডারিং স্তর প্রকার সেট করে:

setLayerType(View.LAYER_TYPE_SOFTWARE, null);

এই লাইনটি মুছে ফেলা কৌশলটি করেছে। বা অবশ্যই এটি কেন প্রথম স্থানে রয়েছে তা মূল্যায়ন করতে হবে। আমার ক্ষেত্রে এটি হানিকম্বকে সমর্থন করা ছিল যা আমার প্রকল্পের জন্য বর্তমান ন্যূনতম এসডিকে পিছনে রয়েছে।


0

আপনি যদি এই দৃশ্যে আলফা পরিবর্তন না করেন কিনা তাও পরীক্ষা করে দেখুন। আমি যখন উত্থানের সাথে কিছু দৃশ্যে আলফা পরিবর্তন করি তখন আমি বিষয়টি তদন্ত করছি। যখন আলফা পরিবর্তিত হয় এবং 1f এ ফিরে আসে তখন এগুলি কেবল আলগা উচ্চতা।

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