View.getRootView () ile kök görünümü almak biliyorum . Ayrıca onClick
, argümanın bir Görünüm olduğu bir düğmenin olayından görünümü elde edebiliyorum . Ancak bir etkinlikte görüşü nasıl alabilirim ?
View.getRootView () ile kök görünümü almak biliyorum . Ayrıca onClick
, argümanın bir Görünüm olduğu bir düğmenin olayından görünümü elde edebiliyorum . Ancak bir etkinlikte görüşü nasıl alabilirim ?
Yanıtlar:
Etkinliğinizin kök görünümüne ihtiyacınız varsa (içeriğinizi oraya ekleyebilirsiniz)
findViewById(android.R.id.content).getRootView()
Ayrıca bazı cihazlarda kullanmanız gerektiği bildirildi
getWindow().getDecorView().findViewById(android.R.id.content)
yerine.
Booger'ın bildirdiği gibi, bunun bazı cihazlarda gezinme çubuğunun arkasında (geri düğmesi vb.) Olabileceğini lütfen unutmayın (ancak çoğu cihazda öyle görünmemektedir).
Etkinliğinize setContentView()
yöntem kullanarak eklediğiniz görünümü almanız gerekiyorsa pottedmeat'in yazdığı gibi kullanabilirsiniz
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
Ancak, xml düzeninizde kimliği bu görünüme ayarlamanız ve bunun yerine bu kimliği kullanmanız daha iyi olur.
Bu atanan XML dosyasında bulunan kök görünümünü almak için kullandığım şey setContentView
:
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
ActionBar
?
Bunu sadece android 4.0.3'te test ettim:
getWindow().getDecorView().getRootView()
aynı görüşü bizden aldık
anyview.getRootView();
com.android.internal.policy.impl.PhoneWindow$DecorView@#########
ve
getWindow().getDecorView().findViewById(android.R.id.content)
çocuğunu vermek
android.widget.FrameLayout@#######
Lütfen onaylayın.
Kotlin'de bunu biraz daha kısa yapabiliriz:
val rootView = window.decorView.rootView
Sadece birinin daha kolay bir yola ihtiyacı olduğunu düşünün:
Aşağıdaki kod, tüm etkinliğin bir görünümünü verir:
View v1 = getWindow().getDecorView().getRootView();
Etkinlikte certian bir görünüm elde etmek için, örneğin etkinliğin içine bir imageView, almak istediğiniz o görünümün kimliğini eklemeniz yeterlidir:
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
Umarım bu birine yardımcı olur
findViewById(R.id.imageView1);
belirli bir görünüm istiyorsanız etkinliği arayabilirsiniz .
Bir Etkinlikteki erişimi basitleştirmek için bunu kullanın. Daha sonra doğrudan rootView
Faaliyet'ten veya activity.rootView
bunun dışından başvurabilirsiniz :
val Activity.rootView get() = window.decorView.rootView
Aynı şeyi tutarlılık için Fragmanlar için eklemek isterseniz, şunu ekleyin:
val Fragment.rootView get() = view?.rootView
Mevcut Etkinliğin Görünümünü Almak
herhangi bir onClick'te "View view" ı alıyor olacağız, 'view' kullanarak rootView olsun.
Görünüm view = view.getRootView ();
ve parçayı görüntüle
Görünüm view = FragmentClass.getView ();
Eğer bir aktivitedeyseniz, sadece tek bir kök görünüm olduğunu varsayalım, bunu böyle alabilirsiniz.
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
daha sonra gerçek sınıfınıza atabilirsiniz
ya da kullanabilirsin
getWindow().getDecorView();
bunun işlem çubuğu görünümünü içereceğine dikkat edin, görünümünüz işlem çubuğu görünümünün altında
Activity
Sınıfta böyle bir yöntem yoktur .
Veri Bağlama Kitaplığı'nı kullananlar için , geçerli etkinliğin kökünü almak için şunları kullanın:
View rootView = dataBinding.getRoot();
Ve Kotlin kullanıcıları için, daha da basit:
val rootView = dataBinding.root
Etkinliğinizin görünümü xml (ör. activity_root.xml
) Olarak bildirilmişse, xml'yi açın ve kök görünüme bir kimlik atayın:
android:id="@+id/root_activity"
Şimdi sınıfınızda, görünümü kullanarak şunları içe aktarın:
import kotlinx.android.synthetic.main.activity_root.root_activity
Artık root_activity
görünüm olarak kullanabilirsiniz .
setContentView()
ve sağladığınız görünümün zaten kök olduğunu belirtirsiniz. Bu görünümün işlenmesine ihtiyacınız varsa, XAML'de ona bir kimlik koyun vefindViewById()
iyi olur.