Como obter a visualização do conteúdo da atividade?

279

Qual método devo chamar para saber se uma Atividade tem seu contentView (depois que o método setContentView () foi chamado)?

teoREtik
fonte

Respostas:

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

ou

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

ou

this.findViewById(android.R.id.content).getRootView()
Ernest
fonte
4
ou getWindow().findViewById(android.R.id.content):)
Alex Lockwood
1
isso funciona bem no que diz respeito à obtenção da exibição pai ... Mas, se eu tentar this.findViewById (android.R.id.content) .setBackgroundDrawable (d); dosent trabalho .. Você pode por favor sugerir .. Obrigado antecipadamente
Rajesh Wadhwa
3
Se você instalar um layout usando XML setContentView(R.layout.my_view), isso retornará o pai desse layout.
Jay Lieske
Olá @ernest Eu tenho uma pergunta de classificação como se no meu layout eu tenho uma imagem em cima de duas guias na barra de guias. e, na parte inferior, um SatelliteMenu, Deseja desfocar os itens do menu, é aberto.
Devendra Singh
1
não existe conteúdo para Android.Resource.Id.
23415 Justin
23

Você pode obter a visualização Voltar se colocar um ID no seu Layout.

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

E chame-o de findViewById ...

papachan
fonte
Essa é a maneira mais robusta de obter a raiz de um layout instalado.
Jay Lieske
3
Para que você passa findViewById?
trans
1
@trans Visualizar conteúdoView = findViewById (R.id.my_relative_layout_id);
Justin Liu
11

E se

View view = Activity.getCurrentFocus();
Mike Jones
fonte
Como isso não tem mais pontos positivos? Funciona bem!
aeskreis
1
@aeskreis porque no meu caso, retorna nullcurrentFocus?.let { ... }
user924
10

Você pode tentar View.getRootView().

Will Tate
fonte
5

Você também pode substituir o onContentChanged()que está entre outros disparados quando setContentView()foi chamado.

Chris
fonte
A resposta de Ernest lhe dará a visão focalizada atual mesmo se contém vista de rolagem
YuDroid
2

Se você estiver usando Kotlin

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

Não existe um método "isContentViewSet". Você pode colocar alguma chamada fictícia requestWindowFeature no bloco try / catch antes de setContentView assim:

experimentar {
  requestWindowFeature (Window.FEATURE_CONTEXT_MENU);
  setContentView (...)
} captura (AndroidRuntimeException e) {
  // faça smth ou nada
}

Se a visualização de conteúdo já estiver definida, requestWindowFeature lançará uma exceção.

sergeytch
fonte
-3

A melhor opção que achei e menos invasiva é definir um parâmetro de tag no seu xml, como

LAYOUT DE TELEFONE XML

<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 DE TABLET XML

<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 chame isso em sua classe de atividade:

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

Espero que funcione para você.

Alejandro Tellez
fonte
2
Como isso responde à pergunta?
Onik