android - অ্যান্ড্রয়েড "উচ্চতা" একটি ছায়া দেখাচ্ছে না




material-design shadow (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>

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

<?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. ImageView একটি ব্যাকগ্রাউন্ড প্রয়োগ।
  3. উচ্চতর স্থান পরিবর্তিত অনুবাদ Z।


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

1) fontFamily ছাড়া fontFamily আমি android:background সেট করতে হবে android:background কিছু মান 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" যুক্ত করতে চাই 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" />

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

setLayerType(View.LAYER_TYPE_SOFTWARE, null);

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


আমি একটি বিট জন্য ললিপপ উপর ছায়া সঙ্গে প্রায় বাজানো হয়েছে এবং এই আমি কি পাওয়া যায়:

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

আমি যা জানি তা ভিত্তিক আপনার পরামর্শ এখানে দেওয়া হল:

  1. আপনি আপনার ছায়া প্রদর্শন করতে চান এমন আপেক্ষিক বিন্যাসে সেট করা মার্জিনের সমান প্যাডিংয়ের জন্য আপনার শীর্ষ স্তরের RelativeLayout লেআউট সেট করুন;
  2. android:clipToPadding="false" সেট করুন android:clipToPadding="false" একই RelativeLayout android:clipToPadding="false" ;
  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"
    >

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


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


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

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

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


গ্রহণযোগ্য উত্তরের সাথে যুক্ত করার জন্য আরও একটি কারণ রয়েছে যার ফলে উচ্চাকাঙ্ক্ষা প্রত্যাশিত হিসাবে কাজ করতে পারে না।

ফোনে ব্লুয়েइट ফিল্টার বৈশিষ্ট্য চালু থাকে

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

তাই সেটিং পরেও

android:outlineProvider="bounds"

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


দৃশ্যত, আপনি কেবল একটি দৃশ্যে একটি উচ্চতা সেট করতে এবং এটি প্রদর্শিত হতে পারে না। আপনি একটি ব্যাকগ্রাউন্ড নির্দিষ্ট করতে হবে।

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

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

যদি আপনার কোন ব্যাকগ্রাউন্ড না থাকে তবে এই লাইন আপনাকে সাহায্য করবে

android:outlineProvider="bounds"

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


যদি আপনার কোন ব্যাকগ্রাউন্ড না থাকে তবে এই লাইন আপনাকে সাহায্য করবে

android:outlineProvider="bounds"

যদি আপনার ব্যাকগ্রাউন্ডের সাথে একটি দৃশ্য থাকে তবে এই লাইন আপনাকে সাহায্য করবে

android:outlineProvider="paddedBounds"




android-elevation