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)?

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()

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 ...


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();

Como isso não tem mais pontos positivos? Funciona bem!
aeskreis

1
@aeskreis porque no meu caso, retorna nullcurrentFocus?.let { ... }
user924


5

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


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))

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.


-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ê.


2
Como isso responde à pergunta?
Onik
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.