Eu sei como obter a visualização raiz com View.getRootView () . Também posso obter a visualização do onClick
evento de um botão em que o argumento é uma Visualização . Mas como posso obter a visualização em uma atividade ?
Eu sei como obter a visualização raiz com View.getRootView () . Também posso obter a visualização do onClick
evento de um botão em que o argumento é uma Visualização . Mas como posso obter a visualização em uma atividade ?
Respostas:
Se você precisar da visualização raiz de sua atividade (para poder adicionar seu conteúdo lá), use
findViewById(android.R.id.content).getRootView()
Também foi relatado que em alguns dispositivos você precisa usar
getWindow().getDecorView().findViewById(android.R.id.content)
em vez de.
Observe que, como o Booger relatou, isso pode estar atrás da barra de navegação (com botão voltar etc.) em alguns dispositivos (mas parece que na maioria dos dispositivos não é).
Se você precisar obter a visão que adicionou à sua atividade usando o setContentView()
método, como escreveu pottedmeat, você pode usar
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
Mas é melhor apenas definir o ID para essa visualização no layout xml e usar esse ID.
É isso que eu uso para obter a visualização raiz, conforme encontrada no arquivo XML atribuído a setContentView
:
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
ActionBar
também?
Eu testei isso no Android 4.0.3, apenas:
getWindow().getDecorView().getRootView()
dar a mesma visão do que obtemos
anyview.getRootView();
com.android.internal.policy.impl.PhoneWindow$DecorView@#########
e
getWindow().getDecorView().findViewById(android.R.id.content)
dando filho de sua
android.widget.FrameLayout@#######
Por favor confirme.
No Kotlin, podemos fazê-lo um pouco mais curto:
val rootView = window.decorView.rootView
Apenas alguém precisa de uma maneira mais fácil:
O código a seguir fornece uma visão de toda a atividade:
View v1 = getWindow().getDecorView().getRootView();
Para obter uma visão certian da atividade, por exemplo, um imageView dentro da atividade, basta adicionar o ID dessa visão que você deseja obter:
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
Espero que isso ajude alguém
findViewById(R.id.imageView1);
a atividade se desejar a visualização específica.
Use isso para simplificar o acesso em uma atividade. Em seguida, você pode consultar diretamente a rootView
partir da atividade ou activity.rootView
fora dela:
val Activity.rootView get() = window.decorView.rootView
Se você deseja adicionar o mesmo para Fragmentos para obter consistência, adicione:
val Fragment.rootView get() = view?.rootView
para obter a visualização da atividade atual
em qualquer onClick, obteremos "View view", usando 'view' get the rootView.
Visualizar visualização = view.getRootView ();
e para obter View in fragment
Visualizar visualização = FragmentClass.getView ();
se você estiver em uma atividade, suponha que exista apenas uma visualização raiz, é possível obtê-la assim.
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
então você pode transmiti-lo para sua classe real
ou você poderia usar
getWindow().getDecorView();
observe que isso incluirá a visualização da barra de ação, sua visualização está abaixo da visualização da barra de ação
Activity
aula.
Para aqueles que estão usando a Biblioteca de Ligação de Dados , para obter a raiz da atividade atual, basta usar:
View rootView = dataBinding.getRoot();
E para os usuários do Kotlin, é ainda mais simples:
val rootView = dataBinding.root
Se a visualização da sua atividade for declarada em xml (ex activity_root.xml
), abra o xml e atribua um ID à visualização raiz:
android:id="@+id/root_activity"
Agora em sua classe, importe a visualização usando:
import kotlinx.android.synthetic.main.activity_root.root_activity
Agora você pode usar root_activity
como a exibição.
setContentView()
e a exibição que você forneceu já é a raiz. Se você precisar do identificador dessa exibição, basta colocar um ID no XAML e tudofindViewById()
ficará bem.