package com.example.dell.helloworld;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void showToast(View view)
{
Toast t= new Toast(this);
LayoutInflater inflater=getLayoutInflater();
View v=inflater.inflate(R.layout.toast, (ViewGroup) findViewById(R.id.toastViewGroup));
t.setView(v);
t.show();
}
}
来自android开发者网站
findViewById
使用给定ID搜索子视图。
在上面的代码中,谁是父视图,其子项正在搜索给定的id?
答案 0 :(得分:2)
活动中的根视图由setContentView(int layoutId)
或setContentView(View rootView)
确定。
在你的情况下,它是
setContentView(R.layout.activity_main);
因此,您对findViewById
的任何通话都会从activity_main.xml
中查找ID。
如果找不到您指定的id,它将返回null。
值得一提的是,您没有调用该方法,这通常是Toast的制作方式。
Toast.makeText(getApplicationContext(), "Hello toast!", Toast.LENGTH_SHORT).show();
答案 1 :(得分:1)
对于Activity
,findViewById
从活动的内容视图(使用setContentView
设置)开始搜索,该活动是从布局资源中扩展的视图层次结构。 / p>
答案 2 :(得分:0)
时, 设置这些属性的值,现在对于每个元素,都有一个绘制它的类 在屏幕上,此类的属性与XML文件中的属性名称相同 现在使用读写文件的算法,将XML文件中的这些值传输到元素的java文件(类),然后该类在屏幕上绘制该元素。
在元素的类绘制之前,所有元素都有一个超类,所有元素的父类都称为View(活动中的每个元素都称为view),此类具有所有元素的基本属性,并且此类是将XML文件中的属性传输给它的类。
方法findViewById()返回一个View类型的对象,该对象保存属性值,然后我们需要将其强制转换为特定的元素,例如TextView是用于绘制该类和所有元素的文本视图的类。类是View类的子类,因此我们进行向下转换,以便当此方法返回View类型的对象时,我们将其向下转换为元素类
如何找到属性?如果XML文件中的标签,它将首先使用id查找元素的属性,然后首先在XML文件中搜索包含元素名称的标签,然后如果它是所需的id,则查找id 那么就会用它,否则它将搜索另一个标签(具有相同的元素名称)。
我们通过这种方法为其指定ID。有一个称为R(资源)的类,该类具有嵌套的类(id,字符串,颜色),这些类具有相同类型的属性并保存特定的值,例如,id类具有存储每个ID的属性。 XML文件中的每个元素,因此,当我们要为方法findViewById()提供ID时,我们转到该类,并告诉它输入ID类并选择所需元素的ID。
ِِ然后进入XML文件并查找具有此id的元素,然后将属性传递给类视图对象,然后返回该对象时,我们将其向下转换为元素的类,我们要画它 并处理它。