setContentView() 与 XML 布局与视图

Posted

技术标签:

【中文标题】setContentView() 与 XML 布局与视图【英文标题】:setContentView() with XML layout vs View 【发布时间】:2013-12-09 13:28:32 【问题描述】:

android 中,我习惯于使用 XML 文件设置布局

protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

但您也可以使用 Java 中的视图来设置内容

    // Create the text view
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);

    // Set the text view as the activity layout
    setContentView(textView);

这具有无法再使用布局文件的副作用。

我是否可以通过编程方式设置例如文本值并仍然使用 layout.xml 文件?

【问题讨论】:

好吧,我不认为你可以在一个 Activity 中同时应用 setContentView()。 看到这个:***.com/questions/3995215/… 或 ***.com/questions/4203506/… 【参考方案1】:

当然。

在您的 layout.xml 文件中,您必须定义 idmain layout (android:id="@+id/mainLayout" ) 然后您可以这样做:

protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ViewGroup mainView = (ViewGroup) findViewById(R.id.mainLayout);

    // Create the text view
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);

    mainView.addView(textView);

【讨论】:

【参考方案2】:

当你使用 setContentView(R.layout.activity_main) 时,你是在告诉要使用的布局是 xml 布局文件 activity_main。

当你使用 setContentView(textView) 时,它用 textView 组件替换之前添加的 xml 布局文件。

您可以在布局文件中声明您的 TextView,然后以编程方式设置文本。

TextView textView = (TextView) findViewById(R.id.textView);
textView.setTextSize(40);
textView.setText(message);

【讨论】:

【参考方案3】:

例如:

在 layout.xml 中粘贴这段代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_ >

    <TextView
        android:id = "@+id/lblText"
        android:textSize="40"
        />

</RelativeLayout>

在你的 MainActivity 中:

public class MainActivity extends Activity 


    private TextView lblText;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        this.lblText = (TextView)findViewById(R.id.lblText);
        this.lblText.setText("your message");        
    

【讨论】:

以上是关于setContentView() 与 XML 布局与视图的主要内容,如果未能解决你的问题,请参考以下文章

Android XML布局文件解析过程源码解析

如何在 android 的 setContentView 中将自定义布局设置为主视图

setContentView() 删除使用 addView() 添加的元素

Android之使用Assets目录中的xml布局网页音乐等资源

setContentView 和 LayoutInflater 有啥区别?

Android 性能优化--布局优化