Come ottenere la visualizzazione del contenuto di Activity?


279

Quale metodo devo chiamare per sapere se un'attività ha il suo contentView (una volta chiamato il metodo setContentView () )?

Risposte:


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

o

this.findViewById(android.R.id.content)

o

this.findViewById(android.R.id.content).getRootView()

4
oppure getWindow().findViewById(android.R.id.content):)
Alex Lockwood,

1
questo funziona bene per quanto riguarda il recupero della vista Parent ... BUt..se provo this.findViewById (android.R.id.content) .setBackgroundDrawable (d); funziona bene .. Puoi per favore suggerire .. Grazie in anticipo
Rajesh Wadhwa,

3
Se si installa un layout da XML utilizzando setContentView(R.layout.my_view), questo restituisce il genitore di quel layout.
Jay Lieske,

Ciao @ernest Ho una domanda tipo se nel mio layout ho un'immagine in alto rispetto a due schede nella barra delle schede. e in fondo a SatelliteMenu, si desidera fare sfocatura sulle voci di menu vengono aperte.
Devendra Singh,

1
il contenuto non esiste per Android.Resource.Id.
Giustino,

23

È possibile ottenere la visualizzazione Indietro se si inserisce un ID nel layout.

<RelativeLayout
    android:id="@+id/my_relative_layout_id"

E chiamalo da findViewById ...


Questo è il modo più efficace per ottenere la radice di un layout installato.
Jay Lieske,

3
A cosa passi findViewById?
trans

1
@trans Visualizza contentView = findViewById (R.id.my_relative_layout_id);
Justin Liu,

11

Che ne dite di

View view = Activity.getCurrentFocus();

In che modo questo non ha più il pollice in alto? Funziona alla grande!
aeskreis,

1
@aeskreis perché nel mio caso restituisce nullcurrentFocus?.let { ... }
user924


5

È inoltre possibile eseguire l'override di quello onContentChanged()che viene attivato tra gli altri quando setContentView()è stato chiamato.


La risposta di Ernest ti fornirà l'attuale visione focalizzata anche se contiene una vista scorrevole
YuDroid

2

Se stai usando Kotlin

    this.findViewById<View>(android.R.id.content)
                         .rootView
                         .setBackgroundColor(ContextCompat.getColor(this, R.color.black))

1

Non esiste un metodo "isContentViewSet". È possibile inserire una richiesta fittiziaWindowFeature call in try / catch block prima di setContentView in questo modo:

provare {
  requestWindowFeature (Window.FEATURE_CONTEXT_MENU);
  setContentView (...)
} catch (AndroidRuntimeException e) {
  // fai smth o niente
}

Se la visualizzazione del contenuto era già impostata, requestWindowFeature genererà un'eccezione.


-3

L'opzione migliore che ho trovato e meno invadente, è impostare un parametro param nel tuo XML, come

LAYOUT XML DEL TELEFONO

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:tag="phone"/>

LAYOUT XML DELLA TAVOLETTA

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:tag="tablet">

    ...

</RelativeLayout>

e quindi chiamalo nella tua classe di attività:

View viewPager = findViewById(R.id.pager);
Log.d(getClass().getSimpleName(), String.valueOf(viewPager.getTag()));

Spero che funzioni per te.


2
Come risponde alla domanda?
Onik,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.