XML 文件被扩展为View 对象,是的。
"这是如何以及在哪里完成的" -- 取决于您在代码中的位置。
在活动中 - 你会看到 setContentView(View v) 或 setContentView(int layoutRes)
在片段中 - 您会看到 onCreateView 返回一个 View 对象。通常来自LayoutInflater
是否可以在不使用 XML 文件的情况下创建完整的布局?
当然。在某些情况下,您不需要编写自己的 XML 文件 - android.R.layout.* 有预定义的文件。例如,一个 ListView 和一个适配器。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(android.R.layout.list_content); // Pre-defined ListView
mListView = (ListView) findViewById(android.R.id.list); // Existing List ID
mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); // Item Layout
mListView.setAdapter(mAdapter);
但是,如果您的字面意思是不使用任何 XML 文件,那么您可以使用类似的东西 - 自己创建一个 View,然后在最后创建一个 setContentView。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout ll = new LinearLayout(this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
ll.setLayoutParams(lp);
EditText editText = new EditText(this);
Button b = new Button(this);
b.setText("Click Me!");
b.setOnClickListener(null);
ll.addView(editText,
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
ll.addView(b,
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
setContentView(ll);
}
如果答案是肯定的,它是否有用? (它比 XML 文件有优势吗)大型应用程序会这样做吗?
我想不出它有用的理由。当然,您可以更好地控制动态视图,但是您无法使用布局编辑器轻松地可视化它们。
我确信在某些情况下大型应用会这样做,但您是否计划构建需要大量重复使用自定义视图的大型应用?