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


633

View.getRootView () এর সাহায্যে কীভাবে মূল দৃশ্যটি পাবেন তা আমি জানি । onClickযুক্তিটি যে ভিউ হয় সেখানে আমি কোনও বোতামের ইভেন্ট থেকেও ভিউটি পেতে পারি । তবে আমি কীভাবে কোনও ক্রিয়াকলাপে দর্শন পেতে পারি ?


3
ক্রিয়াকলাপে, সাধারণত আপনি বলে থাকেন যে এটি ব্যবহার করে কোন সংস্থানটি রেন্ডার করা উচিত setContentView()এবং আপনার সরবরাহ করা ভিউ ইতিমধ্যে মূল। যদি আপনার এই ভিউটির হ্যান্ডেলটি প্রয়োজন হয় তবে এক্সএএমএল-তে এটির জন্য একটি আইডি রাখুন এবং ভাল findViewById()হবে।
xandy

আমার পরিকল্পনা কোডটি গতিশীলভাবে সংযুক্ত করার জন্য .. সুতরাং যদি আমার ব্যবহারকারীরা এপিআই ব্যবহার করেন তবে আমি আশা করি এটি স্বয়ংক্রিয়ভাবে জিনিসগুলি সনাক্ত করবে .. বোল্ডারের সমাধান কাজ করে!
ললিথ

4
@ এক্স্যান্ডি: সামান্য টাইপো: এক্সএএমএল -> এক্সএমএল।
superjos

উত্তর:


1048

আপনার ক্রিয়াকলাপের রুট ভিউয়ের প্রয়োজন হলে (যাতে আপনি সেখানে আপনার সামগ্রীগুলি যুক্ত করতে পারেন) ব্যবহার করতে পারেন

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);

তবে আরও ভাল আপনার এক্সএমএল লেআউটে এই ভিউটিতে আইডি সেট করুন এবং পরিবর্তে এই আইডিটি ব্যবহার করুন।


194
প্রকৃতপক্ষে কেবলমাত্র FindViewById (android.R.id.content) আমাকে মূল দৃষ্টিভঙ্গি দিচ্ছে। যদি কিছু ক্ষেত্রে এটি সত্য না হয় তবে আমি ফাইন্ড ভিউআইআইডি (android.R.id.content) .getRootView () থেকে রুট ভিউ পেতে পারি। উত্তরের জন্য ধন্যবাদ. আমি android.R স্টাফ সম্পর্কে আরও কোথায় জানতে পারি? আমি এটা সম্পর্কে অবগত ছিল না।
ললিথ

4
আপনি এখানে চেক করতে পারেন আমার ধারণা বিকাশকারী। Android.com/references/android/R.html এটি কেবল অ্যান্ড্রয়েড সংস্থানসমূহের উল্লেখ। ব্যক্তিগতভাবে আমি অ্যান্ড্রয়েড.আর.আইডি.কন্টেন্ট সম্পর্কে শিখেছি তারপরে হায়ারারচিউভিউয়ারে লেআউটগুলি পরীক্ষা করে।
দিমিত্রি রায়ডেনকো

14
আমি লক্ষ্য করেছি যে এই দৃশ্যে স্থিতি দণ্ডটি অন্তর্ভুক্ত রয়েছে বলে মনে হয়, তাই আপনি যদি আপনার ক্রিয়াকলাপের দৃশ্যমান অংশটি সন্ধান করেন তবে @ পটমিট থেকে উত্তরটি ব্যবহার করুন।
বেন ক্লেটন

5
@ ল্যালিথ, আপনি যখন ভিউবিআইআইডি (অ্যান্ড্রয়েড.আর.আইডি। কন্টেন্ট) .getRootView () করার দরকার পড়বেন তখন কী বিশদটি বলতে পারেন? একটি সাধারণ নিয়মটি জানার জন্য সত্যই কার্যকর হবে।
ব্যাটব্র্যাট

2
@batbrat আমাকে অ্যাকশন বার ব্যবহার করার সময় অ্যান্ড্রয়েড 5.0+ এ .getRootView () ব্যবহার করা দরকার
মর্টেন হল্মগার্ড

264

নির্ধারিত এক্সএমএল ফাইলে পাওয়া রূট ভিউটি পেতে আমি এটি ব্যবহার করি setContentView:

final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
            .findViewById(android.R.id.content)).getChildAt(0);

33
এই উত্তরটি স্ট্যাটাস বার ছাড়াই ভিউ দিয়েছে - যা আমি চেয়েছিলাম। আমি ক্রিয়াকলাপের দৃশ্যমান অংশের পিক্সেল প্রস্থ + উচ্চতা খুঁজছিলাম। এই এক কাজ করে, ধন্যবাদ!
বেন ক্লেটন

9
এটি অ্যাকশনবারকে বাদ দেয়!
ওয়েইন

4
ActionBarপাশাপাশি অন্তর্ভুক্ত করার জন্য কি কোনও উপায় আছে ?
theblang

3
এখানে মূল শব্দগুলি হ'ল "এক্সএমএল ফাইলে পাওয়া মুল রুট"। ধন্যবাদ.
কেসি

3
এটি সঠিক চিহ্নিত উত্তর হওয়া উচিত। এটি আপনার ক্রিয়াকলাপের (মূলের মধ্যে) স্নাকবারকে রাখবে, যেখানে এটি হওয়া উচিত (আমি নিশ্চিত যে কেউ নাভি বোতামগুলির পিছনে তাদের তথ্য রাখতে চায় না)
বুগার

136

আমি এটি অ্যান্ড্রয়েড 4.0.০.৩ এ পরীক্ষা করেছি, কেবলমাত্র:

getWindow().getDecorView().getRootView()

আমরা যা পাই তা একই দৃষ্টিভঙ্গি দিন

anyview.getRootView();

com.android.internal.policy.impl.PhoneWindow$DecorView@#########

এবং

getWindow().getDecorView().findViewById(android.R.id.content)

এর সন্তানের দেওয়া

android.widget.FrameLayout@#######

দয়া করে নিশ্চিত করুন.


5
Android2.3.3 একই মনে হয়
রুक्स

2
৪.৩-এ কাজ করা সবচেয়ে সহজ উপায় এবং আমি খুঁজে পেয়েছি ন্যূনতম পরিমাণ কোড।
অলিভার ডিকসন

10
সেরা আপনি যদি স্নাকবার ব্যবহার করছেন
zackygaurav

getWindow ()। getDecorView ()। getRootView ()। getHight () প্রদর্শন প্রদর্শন উচ্চতা।
ওয়াওয়াহস্টেস্ট

3
getWindow ()। getDecorView ()। getRootView () স্ন্যাক বারের জন্য প্রস্তাবিত নয়, এটি সিস্টেম নেভিগেশন বারকে ওভারল্যাপ করবে, ফাইন্ডভিউবিআইডি (অ্যান্ড্রয়েড.আর.আইডি। কনটেন্ট) আরও ভাল হবে।
Thanhbinh84

31

বর্তমান ক্রিয়াকলাপ থেকে রুট ভিউ পান।

আমাদের ক্রিয়াকলাপের ভিতরে আমরা এর rootসাথে ভিউটি পেতে পারি :

ViewGroup rootView = (ViewGroup) ((ViewGroup) this
            .findViewById(android.R.id.content)).getChildAt(0);

অথবা

View rootView = getWindow().getDecorView().getRootView();


19

কারও কারও কাছে সহজ উপায় প্রয়োজন কেবলমাত্র:

নিম্নলিখিত কোডটি পুরো ক্রিয়াকলাপের একটি দৃষ্টিভঙ্গি দেয়:

View v1 = getWindow().getDecorView().getRootView();

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

View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);

আশা করি এটি কারও সাহায্য করবে


5
আপনি findViewById(R.id.imageView1);যদি সুনির্দিষ্ট দৃষ্টিভঙ্গি চান তবে কেবল ক্রিয়াকলাপে কল করতে পারেন।
রবকো


2

কোটলিন এক্সটেনশন সলিউশন

কোনও ক্রিয়াকলাপে অ্যাক্সেসকে সহজ করার জন্য এটি ব্যবহার করুন। তারপরে আপনি সরাসরি rootViewক্রিয়াকলাপ বা এর activity.rootViewবাইরে উল্লেখ করতে পারেন:

val Activity.rootView get() = window.decorView.rootView

যদি আপনি ধারাবাহিকতার জন্য টুকরাগুলির জন্য একই যুক্ত করতে চান তবে যুক্ত করুন:

val Fragment.rootView get() = view?.rootView

1

বর্তমান কার্যকলাপ দেখুন

যে কোনও অনিক্লিকে আমরা "ভিউ ভিউ" পেয়ে যাব, 'ভিউ' ব্যবহার করে রুটভিউ পেয়ে যাব।

ভিউ দেখুন = দেখুন.getRootView ();

এবং খণ্ডে ভিউ পেতে

ভিউ দেখুন = ফ্রেগমেন্টক্লাস.জেটভিউ ();


0

আপনি যদি কোনও ক্রিয়াকলাপে থাকেন তবে ধরে নিন যে এখানে কেবলমাত্র একটি রুট ভিউ রয়েছে, আপনি এটি এটির মতো পেতে পারেন।

ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
        .findViewById(android.R.id.content)).getChildAt(0);

তারপরে আপনি এটিকে আপনার আসল শ্রেণিতে ফেলে দিতে পারেন

অথবা আপনি ব্যবহার করতে পারে

getWindow().getDecorView();

বিজ্ঞপ্তিতে এটি অ্যাকশনবারের ভিউ অন্তর্ভুক্ত করবে, আপনার ভিউটি অ্যাকশনবার দেখার নীচে below


Activityক্লাসে এ জাতীয় কোনও পদ্ধতি নেই ।
একলভিউ

উইন্ডো.ডেকরভিউ বা উইন্ডো.ডেকারভিউ ভিউগ্রুপ হিসাবে দেখুন - আপনার যদি ভিউগ্রুপে কাস্ট করতে হয়
এডগার খিমিচ

0

আপনারা যারা ডেটা বন্ডিং লাইব্রেরি ব্যবহার করছেন, বর্তমান ক্রিয়াকলাপের মূল পেতে, কেবল ব্যবহার করুন:

View rootView = dataBinding.getRoot();

এবং কোটলিন ব্যবহারকারীদের জন্য এটি আরও সহজ:

val rootView = dataBinding.root

0

আরেকটি কোটলিন এক্সটেনশন সমাধান

যদি আপনার ক্রিয়াকলাপের দর্শনটি এক্সএমএল (প্রাক্তন activity_root.xml) এ ঘোষিত হয় তবে এক্সএমএলটি খুলুন এবং মূল আইডিতে একটি আইডি নির্ধারণ করুন:

android:id="@+id/root_activity"

এখন আপনার ক্লাসে, ভিউটি ব্যবহার করে আমদানি করুন:

import kotlinx.android.synthetic.main.activity_root.root_activity

আপনি এখন দেখুন root_activityহিসাবে ব্যবহার করতে পারেন ।

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