অ্যান্ড্রয়েডে রিলেটিভলআউটের জেড ক্রমের সংজ্ঞা দেওয়া হচ্ছে


226

আমি অ্যান্ড্রয়েডে রিলেটিভলআউটের মতামতের z ক্রম সংজ্ঞায়িত করতে চাই।

আমি জানি এটি করার একটি উপায় কল করা bringToFront

এটি করার আরও ভাল উপায় আছে? এটি দুর্দান্ত লাগবে যদি আমি xML লেআউটে z ক্রমটি সংজ্ঞায়িত করতে পারি।


4
View.bringToFront (); আনসার হয়
Shirish Herwade

উত্তর:


314

সবচেয়ে সহজ উপায়টি হল যাতে আপনার এক্সএমএল ফাইলটিতে ভিউগুলি যুক্ত করা হয় সেটির দিকে মনোযোগ দেওয়া। ফাইলে নীচে নামার অর্থ জেড-অক্ষে উচ্চতর হওয়া।

সম্পাদনা করুন: এটি অ্যান্ড্রয়েড বিকাশকারী সাইটে এখানে এবং এখানে ডকুমেন্টেড রয়েছে । (ধন্যবাদ @ ফ্লাইটপ্ল্যানার)


16
দুর্ভাগ্যক্রমে এটি পরিবর্তন করা সর্বদা সম্ভব নয়। উদাহরণস্বরূপ, আপেক্ষিক বিন্যাসে, প্রতিটি উপাদান কেবলমাত্র ফাইলটিতে পূর্বে সংজ্ঞায়িত হিসাবে শ্রদ্ধাবোধ করা যেতে পারে
কেসব্যাশ

67
কেসব্যাশ, আমি মনে করি না যে আপনি কেবল "@ + আইডি / আপনার_সামগ্রী_পূর্বক_সিত্তি সংজ্ঞায়িত" ব্যবহার করতে হবে এবং তারপরে আপনি যে উপাদানটি পরে সংজ্ঞায়িত করেছেন তেমন আইডি ব্যবহার করতে হবে। আমি এটি সম্পর্কে ভুল হতে পারি, এই লেআউটগুলি আমার পক্ষে খুব কৌতুকময়, তবে আমি অবশ্যই এই ধারণাটি পেয়েছি যে এটি কার্যকর হয়।
tjb

7
tjb ঠিক আছে (এবং আমি আনন্দিত তিনি) ব্যবহারের @ + + আইডি যেমন layout_above = খুব প্রথম উল্লেখ সঙ্গে ID "@ + + ID / some_id"
Michiel

3
আপনি <আইটেম টাইপ = "আইডি" নাম = "<আপনার_আইডি>" /> একটি মান xML ফাইলে রাখতে পারেন এবং তারপরে আপনি এটিকে যে কোনও জায়গায় উল্লেখ করতে পারেন।
কার্ল

8
আমি জানি আমি পার্টিতে প্রায় 3 বছর দেরি করেছি, তবে @hpique এর জবাবে এটি এখানে
HexAndBugs


68

দয়া করে মনে রাখবেন, এপিআই 21 এবং ততোধিকের বোতাম এবং অন্যান্য উপাদানগুলির উচ্চতর উচ্চতা রয়েছে এবং তাই প্যারেন্ট লেআউট নির্বিশেষে উপাদানগুলির xML ক্রমটিকে উপেক্ষা করুন। আমাকে এটি বের করতে কিছুক্ষণ লাগল।


16
আমার জন্য এই বাগের সমাধানটি ছিল সেট-এলিভেশন (1000) কলটি আমি এই বোতামে রেন্ডার করতে চাই on
গর্তে আগুন

সেটলেভেশন () এর এপিআই স্তর 21 প্রয়োজন
dp2050

21

অ্যান্ড্রয়েডে এপিআই লেভেল ২১ থেকে শুরু করে, লেআউট ফাইলের আইটেমগুলি সঠিক উত্তর হিসাবে বর্ণিত হিসাবে ফাইলের মধ্যে কীভাবে অর্ডার করা হয় সেগুলি থেকে উভয়ই তাদের জেড অর্ডার পেয়ে থাকে এবং তাদের উচ্চতা থেকে উচ্চতর উচ্চতার মান মানে আইটেমটি উচ্চতর জেড অর্ডার পায় ।

এটি কখনও কখনও সমস্যার সৃষ্টি করতে পারে, বিশেষত বোতামগুলির সাথে প্রায়শই আইটেমের শীর্ষে প্রদর্শিত হয় যা এক্সএমএলের ক্রম অনুসারে জেড ক্রমে তাদের নীচে থাকা উচিত। এটি ঠিক করতে android:elevationআপনার লেআউট XML- এ থাকা আইটেমগুলির মধ্যে কেবলমাত্র যে জেড অর্ডারটি অর্জন করতে চান তার সাথে মেলে।

আমি আপনি বিন্যাসে কোনও উপাদানের একটি উচ্চতা সেট করেছি এটি একটি ছায়া castালাই শুরু করবে। আপনি যদি এই প্রভাবটি না চান তবে আপনি কোডের মতো ছায়া সরিয়ে ফেলতে পারেন:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
   myView.setOutlineProvider(null);
}

এক্সএমএল বিন্যাসের মাধ্যমে একটি উন্নত দৃশ্যের ছায়া সরিয়ে নেওয়ার কোনও উপায় আমি খুঁজে পাইনি।


1
মন্তব্যে উল্লিখিত হিসাবে, আপনি ব্যবহার করতে পারেন android:elevation="1000dp"। কোনও ছায়া এইভাবে রেন্ডার করা হয় না।
ভাদিম কোতোভ

15

আমি একই সমস্যার মুখোমুখি হয়েছি: আপেক্ষিক বিন্যাসে প্যারেন্টভিউতে আমার 2 শিশু চাইল্ডভিউ 1 এবং চাইল্ডভিউ 2 রয়েছে। প্রথমে, আমি চাইল্ডভিউ 1 কে চাইল্ডভিউ 2 এর উপরে রেখেছি এবং আমি চাই চাইল্ডভিউ 1 চাইল্ডভিউ 2 এর শীর্ষে থাকুক। বাচ্চাদের দৃষ্টিভঙ্গির ক্রম পরিবর্তন করা আমার পক্ষে সমস্যার সমাধান করেনি। আমার জন্য যা কাজ করেছে তা হ'ল অ্যান্ড্রয়েড সেট করা : ক্লিপচিল্ডেন = পিতামাতার ভিউতে "মিথ্যা" এবং আমি যে কোডটি সেট করেছি:

childView1.bringToFront();

parentView.invalidate();

2
এটি কাজ করছে, এবং অ্যান্ড্রয়েড আমাকে খুব খারাপ করে তোলে। child.bringToFront()সঙ্গে parent.invalidate()কাজ, কিন্তু parent.bringChildToFront(child)না। আমরা সমস্ত ওএস থেকে যে যুক্তিটি আশা করি তা কোথায়?
অলিভার হাউসেলার

কিছু মতামত সঞ্চার করার জন্য (এক্স এবং ওয়াই অনুবাদ), আমি লিনিয়ারলআউট, ফ্রেমলাইআউট এবং রিলেটিভলআউট এর জন্য বেশ কয়েকটি সংমিশ্রণ চেষ্টা করেছিলাম তবে সবসময় সমস্যা ছিল (ওভারল্যাপগুলি বা আনুপাতিক আকারের সাথে সম্পর্কিত নয়)। অবশেষে android:clipChildren="false"কৌতুকটি করলেন। ধন্যবাদ!
জে কার্লোসআর


13

ভেবেছিলাম আমি প্রবর্তনের পর থেকে একটি উত্তর যুক্ত করব

অ্যান্ড্রয়েড translationZ

এক্সএমএল ক্ষেত্রগুলি জিনিসগুলিকে বাজেভাবে পরিবর্তন করেছে। অন্যান্য উত্তরগুলি দৌড়ানোর পরামর্শ দেয়

childView1.bringToFront();

parentView.invalidate();

এক্সপিসে সম্পূর্ণরূপে স্পট রয়েছে যে এক্সএমএল ফাইলটিতে এই কোডটি হার্ডকোডযুক্ত অ্যান্ড্রয়েড: ট্রান্সলেশনজেডের সাথে কোনও ভিউয়ের সামনে চাইল্ডভিউ 1 আনবে না। আমার এটি নিয়ে সমস্যা ছিল এবং আমি একবার এই ক্ষেত্রটিকে অন্য মতামত থেকে সরিয়ে ফেললে, টোটোফ্রন্ট () ঠিক কাজ করেছিল।


এটি অ্যান্ড্রয়েড 5 এর ক্ষেত্রেও সত্যelevation
শেলেল

5

এপিআই 21 আছে view.setElevation(float) বিল্ট-ইন রয়েছে

ব্যবহার ViewCompat.setElevation(view, float);পিছনে সামঞ্জস্যের জন্য

আরও পদ্ধতি ViewCompat.setZ(v, pixels) এবংViewCompat.setTranslationZ(v, pixels)

আরেকটি উপায়ে বোতাম সংগ্রহ করুন বা অ্যারে দেখুন এবং addViewরিলেটিভ লাইআউট যুক্ত করতে ব্যবহার করুন


4

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

lastView.setTranslationZ(-10);

আরও জানতে https://deلافer.android.com/references/android/view/View.html#setTranslationZ(float) দেখুন


1

আপনি RelativeLayoutপুনরায় সংজ্ঞায়িত সহ কাস্টম ব্যবহার করতে পারেন

protected int getChildDrawingOrder (int childCount, int i)

সচেতন থাকুন - এই পদ্ধতিটি i"আমার কোন দৃষ্টিভঙ্গিটি আঁকানো উচিত" হিসাবে পরম লাগে i'th। এভাবেই ViewPagerকাজ করে। এটি সাথে কঙ্কুলেশন কাস্টম অঙ্কন অর্ডার সেট করে PageTransformer


0

এক্সএমএল এর একটির ভিউতে আপনার কোনও উচ্চতা আছে কিনা তা পরীক্ষা করে দেখুন। যদি তা হয় তবে অন্য আইটেমটিতে এলিভেশন যুক্ত করুন বা সমস্যাটি সমাধান করতে উচ্চতা সরিয়ে দিন। সেখান থেকে এটি দর্শনের ক্রম যা অন্যের উপরে যা আসে তার নির্দেশ দেয়।


0

অথবা ফ্রেমলাউটের অভ্যন্তরে ওভারল্যাপিং বোতাম বা মতামত রাখুন। তারপরে, এক্সএমএল ফাইলে সম্পর্কিত সম্পর্কিত লেআউট শিশু যোগ করার সাথে সাথে তাদের লেআউটগুলির ক্রমকে সম্মান করবে।


0

আপনি এটি অর্জনের জন্য নীচের কোড নমুনাও ব্যবহার করতে পারেন

ViewCompat.setElevation(sourceView, ViewCompat.getElevation(mCardView)+1);

এটি পিছনে সামঞ্জস্যপূর্ণ। এখানে mCardViewএকটি দৃশ্য যা নীচে হওয়া উচিত sourceView

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