View.getRootView () এর সাহায্যে কীভাবে মূল দৃশ্যটি পাবেন তা আমি জানি । onClick
যুক্তিটি যে ভিউ হয় সেখানে আমি কোনও বোতামের ইভেন্ট থেকেও ভিউটি পেতে পারি । তবে আমি কীভাবে কোনও ক্রিয়াকলাপে দর্শন পেতে পারি ?
View.getRootView () এর সাহায্যে কীভাবে মূল দৃশ্যটি পাবেন তা আমি জানি । onClick
যুক্তিটি যে ভিউ হয় সেখানে আমি কোনও বোতামের ইভেন্ট থেকেও ভিউটি পেতে পারি । তবে আমি কীভাবে কোনও ক্রিয়াকলাপে দর্শন পেতে পারি ?
উত্তর:
আপনার ক্রিয়াকলাপের রুট ভিউয়ের প্রয়োজন হলে (যাতে আপনি সেখানে আপনার সামগ্রীগুলি যুক্ত করতে পারেন) ব্যবহার করতে পারেন
findViewById(android.R.id.content).getRootView()
এছাড়াও জানা গেছে যে কয়েকটি ডিভাইসে আপনাকে ব্যবহার করতে হবে
getWindow().getDecorView().findViewById(android.R.id.content)
পরিবর্তে.
দয়া করে মনে রাখবেন যে বুগার যেমন রিপোর্ট করেছেন, এটি কোনও ডিভাইসে নেভিগেশন বারের (পিছনে বোতাম ইত্যাদি) এর পিছনে থাকতে পারে (তবে এটি বেশিরভাগ ডিভাইসে মনে হয় এটি এটি নয়) is
আপনি যদি setContentView()
পদ্ধতিটি ব্যবহার করে আপনার ক্রিয়াকলাপে যুক্ত হয়েছেন এমন দৃষ্টিভঙ্গি দরকার হয় তবে পটমেটমেট লিখেছেন হিসাবে আপনি ব্যবহার করতে পারেন
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
তবে আরও ভাল আপনার এক্সএমএল লেআউটে এই ভিউটিতে আইডি সেট করুন এবং পরিবর্তে এই আইডিটি ব্যবহার করুন।
নির্ধারিত এক্সএমএল ফাইলে পাওয়া রূট ভিউটি পেতে আমি এটি ব্যবহার করি setContentView
:
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
ActionBar
পাশাপাশি অন্তর্ভুক্ত করার জন্য কি কোনও উপায় আছে ?
আমি এটি অ্যান্ড্রয়েড 4.0.০.৩ এ পরীক্ষা করেছি, কেবলমাত্র:
getWindow().getDecorView().getRootView()
আমরা যা পাই তা একই দৃষ্টিভঙ্গি দিন
anyview.getRootView();
com.android.internal.policy.impl.PhoneWindow$DecorView@#########
এবং
getWindow().getDecorView().findViewById(android.R.id.content)
এর সন্তানের দেওয়া
android.widget.FrameLayout@#######
দয়া করে নিশ্চিত করুন.
কোটলিনে আমরা এটি আরও ছোট করতে পারি:
val rootView = window.decorView.rootView
কারও কারও কাছে সহজ উপায় প্রয়োজন কেবলমাত্র:
নিম্নলিখিত কোডটি পুরো ক্রিয়াকলাপের একটি দৃষ্টিভঙ্গি দেয়:
View v1 = getWindow().getDecorView().getRootView();
ক্রিয়াকলাপে কোনও সার্টিয়ান দর্শন পেতে, উদাহরণস্বরূপ ক্রিয়াকলাপের ভিতরে একটি চিত্র ভিউ, আপনি যে ভিউটি পেতে চান তা কেবল আইডি যুক্ত করুন:
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
আশা করি এটি কারও সাহায্য করবে
findViewById(R.id.imageView1);
যদি সুনির্দিষ্ট দৃষ্টিভঙ্গি চান তবে কেবল ক্রিয়াকলাপে কল করতে পারেন।
কোনও ক্রিয়াকলাপে অ্যাক্সেসকে সহজ করার জন্য এটি ব্যবহার করুন। তারপরে আপনি সরাসরি rootView
ক্রিয়াকলাপ বা এর activity.rootView
বাইরে উল্লেখ করতে পারেন:
val Activity.rootView get() = window.decorView.rootView
যদি আপনি ধারাবাহিকতার জন্য টুকরাগুলির জন্য একই যুক্ত করতে চান তবে যুক্ত করুন:
val Fragment.rootView get() = view?.rootView
বর্তমান কার্যকলাপ দেখুন
যে কোনও অনিক্লিকে আমরা "ভিউ ভিউ" পেয়ে যাব, 'ভিউ' ব্যবহার করে রুটভিউ পেয়ে যাব।
ভিউ দেখুন = দেখুন.getRootView ();
এবং খণ্ডে ভিউ পেতে
ভিউ দেখুন = ফ্রেগমেন্টক্লাস.জেটভিউ ();
আপনি যদি কোনও ক্রিয়াকলাপে থাকেন তবে ধরে নিন যে এখানে কেবলমাত্র একটি রুট ভিউ রয়েছে, আপনি এটি এটির মতো পেতে পারেন।
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
তারপরে আপনি এটিকে আপনার আসল শ্রেণিতে ফেলে দিতে পারেন
অথবা আপনি ব্যবহার করতে পারে
getWindow().getDecorView();
বিজ্ঞপ্তিতে এটি অ্যাকশনবারের ভিউ অন্তর্ভুক্ত করবে, আপনার ভিউটি অ্যাকশনবার দেখার নীচে below
Activity
ক্লাসে এ জাতীয় কোনও পদ্ধতি নেই ।
আপনারা যারা ডেটা বন্ডিং লাইব্রেরি ব্যবহার করছেন, বর্তমান ক্রিয়াকলাপের মূল পেতে, কেবল ব্যবহার করুন:
View rootView = dataBinding.getRoot();
এবং কোটলিন ব্যবহারকারীদের জন্য এটি আরও সহজ:
val rootView = dataBinding.root
যদি আপনার ক্রিয়াকলাপের দর্শনটি এক্সএমএল (প্রাক্তন activity_root.xml
) এ ঘোষিত হয় তবে এক্সএমএলটি খুলুন এবং মূল আইডিতে একটি আইডি নির্ধারণ করুন:
android:id="@+id/root_activity"
এখন আপনার ক্লাসে, ভিউটি ব্যবহার করে আমদানি করুন:
import kotlinx.android.synthetic.main.activity_root.root_activity
আপনি এখন দেখুন root_activity
হিসাবে ব্যবহার করতে পারেন ।
setContentView()
এবং আপনার সরবরাহ করা ভিউ ইতিমধ্যে মূল। যদি আপনার এই ভিউটির হ্যান্ডেলটি প্রয়োজন হয় তবে এক্সএএমএল-তে এটির জন্য একটি আইডি রাখুন এবং ভালfindViewById()
হবে।