关于setContentView的澄清

时间:2019-04-08 16:49:09

标签: android setcontentview

两者之间有什么区别

setContentView(R.layout.activity_main);        
TextView txtView = (TextView)findViewById(R.id.text); 

TextView textView = new TextView(this);
setContentView(textView);

我找到了这两段代码。首先,setContentView有一个关于布局的信息。在第二种情况下,它具有作为参数传递的视图。是textView还是一个id。我认为区别在于,在第一种情况下,它是XML文件(也包含textView)中描述的activity_main的布局,在第二种情况下,它是textView的id。告诉我我是否正确。

还要告诉我这里的“这个”指的是什么。为什么我们在第一种情况下使用findViewById

3 个答案:

答案 0 :(得分:1)

Activity.setContentView()有2个签名。一种是以布局ID作为参数,另一种是以View作为参数。实际上有第三个使用View和ViewGroup.LayoutParam作为输入。

这三种方法都采用它们所得到的(视图或要膨胀的布局)并将其设置为它们的根元素。简而言之:这里没有真正的区别。开发人员可以从中选择几个选项来告诉Activity有关其根UI元素

另请参阅:setContentView description

然后,TextView txtView = (TextView)findViewById(R.id.text);行正在Activitys Content(在这种情况下,R.layout.activity_main中的每个视图)中搜索ID为“ text”的TextView。

TextView textView = new TextView(this);行正在以编程方式创建新的TextView,而不是夸大布局xml。 this参数是一个Context实例。创建视图始终需要一个Context实例。活动是上下文。

答案 1 :(得分:1)

在第一个代码中,

setContentView(R.layout.activity_main);        
TextView txtView = (TextView)findViewById(R.id.text); 

您正在设置容器的内容视图,然后尝试使用ID-文本访问该视图。

例如:

<RelativeLayout android:height="match_parent"
android:width="match_parent">
<TextView
android:id="@+id/text" 
android:text="Hello"
android:height="wrap_content"
android:width="wrap_content"/>
</RelativeLayout>

在此布局文件中,TextView具有id-text 因此,为了以编程方式访问文本视图,我们利用findViewById()t获取对视图的引用。

TextView textView = findViewById(R.id.text);

现在,我们可以使用此视图引用对视图进行更改。 例如,我们可以将文本更改为

textView.setText("This is a test");

TextView textView2 = new TextView(this);

有关,您正在动态创建TextView。可以根据需要将其添加到父容器中。

答案 2 :(得分:0)

使用以下内容时:

setContentView(R.layout.activity_main);        
TextView txtView = (TextView)findViewById(R.id.text);

您将activity_main布局用作活动的内容。每当您尝试用findViewByid()绑定视图时,它只会在布局内搜索视图,如果试图在布局外绑定视图,则会出现错误。有关详细信息,请参见setContentView (int layoutResID)


使用以下内容时:

TextView textView = new TextView(this);
setContentView(textView);

您正在使用new TextView(this);将活动(this)作为上下文创建TextView。请注意,创建视图时始终需要上下文。

然后使用setContentView(textView);textView设置为活动的唯一内容。有关详细信息,请参见setContentView (View view)