So come ottenere la vista principale con View.getRootView () . Sono anche in grado di ottenere la vista onClick
dall'evento di un pulsante in cui l'argomento è una vista . Ma come posso ottenere la vista in un'attività ?
So come ottenere la vista principale con View.getRootView () . Sono anche in grado di ottenere la vista onClick
dall'evento di un pulsante in cui l'argomento è una vista . Ma come posso ottenere la vista in un'attività ?
Risposte:
Se hai bisogno di una vista radice della tua attività (così puoi aggiungere i tuoi contenuti lì) usa
findViewById(android.R.id.content).getRootView()
Inoltre è stato segnalato che su alcuni dispositivi è necessario utilizzare
getWindow().getDecorView().findViewById(android.R.id.content)
anziché.
Si noti che, come riportato da Booger, questo potrebbe essere dietro la barra di navigazione (con il pulsante indietro ecc.) Su alcuni dispositivi (ma sembra che sulla maggior parte dei dispositivi non lo sia).
Se hai bisogno di vedere che hai aggiunto alla tua attività usando il setContentView()
metodo, allora come ha scritto la carne in vaso puoi usare
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
Ma meglio impostare id su questa vista nel layout XML e utilizzare invece questo id.
Questo è quello che uso per ottenere la vista radice come si trova nel file XML assegnato con setContentView
:
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
ActionBar
anche quello?
Ho provato questo in Android 4.0.3, solo:
getWindow().getDecorView().getRootView()
dare la stessa visione da cosa otteniamo
anyview.getRootView();
com.android.internal.policy.impl.PhoneWindow$DecorView@#########
e
getWindow().getDecorView().findViewById(android.R.id.content)
dando il suo figlio
android.widget.FrameLayout@#######
Si prega di confermare
In Kotlin possiamo farlo un po 'più breve:
val rootView = window.decorView.rootView
Solo in caso Qualcuno ha bisogno di un modo più semplice:
Il codice seguente offre una vista dell'intera attività:
View v1 = getWindow().getDecorView().getRootView();
Per ottenere una vista certian nell'attività, ad esempio una visualizzazione immagine all'interno dell'attività, è sufficiente aggiungere l'id di quella vista che si desidera ottenere:
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
Spero che questo aiuti qualcuno
findViewById(R.id.imageView1);
l'attività se desideri la vista specifica.
Usalo per semplificare l'accesso in un'attività. Quindi puoi fare direttamente riferimento rootView
all'Attività o activity.rootView
al di fuori di essa:
val Activity.rootView get() = window.decorView.rootView
Se desideri aggiungere lo stesso per Frammenti per coerenza, aggiungi:
val Fragment.rootView get() = view?.rootView
per visualizzare la vista dell'attività corrente
in qualsiasi onClick avremo "View view", usando 'view' ottieni il rootView.
Visualizza view = view.getRootView ();
e per visualizzare View in framment
Visualizza view = FragmentClass.getView ();
se sei in un'attività, supponi che ci sia una sola vista radice, puoi ottenerla in questo modo.
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
puoi quindi lanciarlo nella tua vera classe
o potresti usare
getWindow().getDecorView();
nota che questo includerà la vista della barra delle azioni, la tua vista è sotto la vista della barra delle azioni
Activity
classe.
Per quelli di voi che utilizzano la libreria di associazione dei dati , per ottenere la radice dell'attività corrente, utilizzare semplicemente:
View rootView = dataBinding.getRoot();
E per gli utenti di Kotlin, è ancora più semplice:
val rootView = dataBinding.root
Se la vista della tua attività è dichiarata in xml (ex activity_root.xml
), apri l'xml e assegna un id alla vista radice:
android:id="@+id/root_activity"
Ora nella tua classe, importa la vista usando:
import kotlinx.android.synthetic.main.activity_root.root_activity
Ora puoi usare root_activity
come vista.
setContentView()
e la vista fornita è già la radice. Se hai bisogno dell'handle di quella vista, inserisci semplicemente un ID in XAML efindViewById()
andrebbe bene.