Je sais comment obtenir la vue racine avec View.getRootView () . Je peux également obtenir la vue à partir d'un onClick
événement de bouton où l'argument est une vue . Mais comment obtenir la vue d'une activité ?
Je sais comment obtenir la vue racine avec View.getRootView () . Je peux également obtenir la vue à partir d'un onClick
événement de bouton où l'argument est une vue . Mais comment obtenir la vue d'une activité ?
Réponses:
Si vous avez besoin d'une vue racine de votre activité (pour pouvoir y ajouter votre contenu), utilisez
findViewById(android.R.id.content).getRootView()
Il a également été signalé que sur certains appareils, vous devez utiliser
getWindow().getDecorView().findViewById(android.R.id.content)
au lieu.
Veuillez noter que, comme Booger l'a signalé, cela peut être derrière la barre de navigation (avec le bouton de retour, etc.) sur certains appareils (mais cela ne semble pas le cas sur la plupart des appareils).
Si vous devez obtenir la vue que vous avez ajoutée à votre activité à l'aide de la setContentView()
méthode, comme l'écrit la viande en pot, vous pouvez utiliser
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
Mais mieux vaut simplement définir id sur cette vue dans votre mise en page XML et utiliser cet identifiant à la place.
C'est ce que j'utilise pour obtenir la vue racine trouvée dans le fichier XML affecté avec setContentView
:
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
ActionBar
également le?
J'ai testé cela dans Android 4.0.3, seulement:
getWindow().getDecorView().getRootView()
donner la même vue de ce que nous obtenons
anyview.getRootView();
com.android.internal.policy.impl.PhoneWindow$DecorView@#########
et
getWindow().getDecorView().findViewById(android.R.id.content)
donner à l'enfant de son
android.widget.FrameLayout@#######
Veuillez confirmer.
Dans Kotlin, nous pouvons le faire un peu plus court:
val rootView = window.decorView.rootView
Il suffit que quelqu'un ait besoin d'un moyen plus simple:
Le code suivant donne une vue d'ensemble de l'activité:
View v1 = getWindow().getDecorView().getRootView();
Pour obtenir une vue certian dans l'activité, par exemple une imageView à l'intérieur de l'activité, ajoutez simplement l'id de la vue que vous souhaitez obtenir:
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
J'espère que cela aide quelqu'un
findViewById(R.id.imageView1);
l'activité si vous voulez la vue spécifique.
Utilisez-le pour simplifier l'accès à une activité. Ensuite, vous pouvez vous référer directement à rootView
partir de l'activité, ou en activity.rootView
dehors de celle-ci:
val Activity.rootView get() = window.decorView.rootView
Si vous souhaitez ajouter la même chose pour les fragments à des fins de cohérence, ajoutez:
val Fragment.rootView get() = view?.rootView
pour obtenir une vue de l'activité en cours
dans n'importe quel onClick, nous obtiendrons "View view", en utilisant 'view', obtenez le rootView.
View view = view.getRootView ();
et pour obtenir View in fragment
Vue vue = FragmentClass.getView ();
si vous êtes dans une activité, supposez qu'il n'y a qu'une seule vue racine, vous pouvez l'obtenir comme ceci.
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
vous pouvez ensuite le lancer dans votre vraie classe
ou vous pourriez utiliser
getWindow().getDecorView();
notez que cela inclura la vue de la barre d'action, votre vue est en dessous de la vue de la barre d'action
Activity
classe.
Pour ceux d'entre vous qui utilisent la bibliothèque de liaison de données , pour obtenir la racine de l'activité en cours, utilisez simplement:
View rootView = dataBinding.getRoot();
Et pour les utilisateurs de Kotlin, c'est encore plus simple:
val rootView = dataBinding.root
Si la vue de votre activité est déclarée en xml (ex activity_root.xml
), ouvrez le xml et attribuez un identifiant à la vue racine:
android:id="@+id/root_activity"
Maintenant dans votre classe, importez la vue en utilisant:
import kotlinx.android.synthetic.main.activity_root.root_activity
Vous pouvez maintenant l'utiliser root_activity
comme vue.
setContentView()
et la vue que vous avez fournie est déjà la racine. Si vous avez besoin de la poignée de cette vue, mettez simplement un ID dans XAML et cefindViewById()
serait bien.