我想以编程方式设计布局,这意味着根据项目要求没有 xml 文件。但是以编程方式使用的术语与 xml 文件完全不同。它们是否有任何有用的以编程方式学习的教程,这意味着没有 xml 文件。引导我!
2 回答
你可以创建任何你想要的视图
线性布局
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
文本视图
final TextView tv = new TextView(this); tv.setBackgroundColor(0xFFFF00FF); tv.setTextColor(0xFF000000); tv.setTypeface(null, Typeface.BOLD); tv.setText("Where is Fred?"); tv.setGravity(Gravity.CENTER_HORIZONTAL);
和其他任何东西。
我建议您花一些时间了解View
该类及其流行的子类,例如LinearLayout
、RelativeLayout
等。(另外,花点时间看一下Drawables
。)
当您使用 XML 创建布局时,您使用 XML 定义View
对象的层次结构,在运行时,这些对象层次结构“膨胀”成XML 布局文件描述的真实对象层次结构。View
例如,您的第一个 XML 布局文件可能很简单LinearLayout
,其中包含一个TextView
(注意,为了简洁起见,我正在简化它):
<LinearLayout ... >
<TextView ... />
</LinearLayout>
在您的Activity
情况下,您将使用setContentView()
.
XML 文件所做的只是提供一个规范(如果您愿意的话),关于View
系统需要为您构建(或膨胀)的结构。最终结果是会有一个真实的LinearLayout
对象(它是 的子类View
),它有一个引用的子TextView
类(也是 的子类View
)以及合适的布局参数。
要以编程方式执行上述操作(即通过创建对象实例并使用它们的方法,而不是从 XML 膨胀),您可能会执行以下操作(再次简化):
LinearLayout container = new LinearLayout(this);
TextView tv = new TextView(this);
tv.setText("hello");
container.addChild(tv); // Simple example - usually you'd specify layout parameters
setContentView(container);
我要说的基本观点是,用非常简单的术语来说,布局 XML 文件可以被认为是一种“脚本”,您可以使用它来告诉系统如何创建Views
. View
您可以通过以编程方式创建对象实例并在它们上调用适当的方法来创建完全相同的结果。无论您采用哪种方式,最终结果都是一样的:View
内存中的一堆对象代表一个视图层次结构。
您会发现 XML 布局属性名称不一定与相应的方法名称相同,但您可以使用相关的 API 文档查看给定方法对应的 XML 属性字符串是什么。例如,API 文档LinearLayout
详细介绍了所有方法以及 XML 属性。