那么,布局设计方面呢?使用xml还是java代码?Android如何解析xml文件,是在运行时还是编译时?即使它们在编译时被解析,也应在运行时使用。那么,在xml中声明RelativeLayout还是在onCreate方法中声明哪个更快?
布局定义用户界面的可视化结构,例如活动或应用程序小部件的UI。您可以通过两种方式声明布局:
在XML中声明UI元素。Android提供了一个简单的XML词汇表,对应于View类和子类(例如小部件和布局)。
在运行时实例化布局元素。您的应用程序可以以编程方式创建View和ViewGroup对象(并操纵其属性)。
Android框架为您提供了使用这两种方法声明和管理应用程序UI的灵活性。例如,您可以在XML中声明应用程序的默认布局,包括将出现在其中的屏幕元素及其属性。然后,您可以在应用程序中添加代码,以修改屏幕对象的状态,包括在XML中声明的那些对象,在运行时。
Eclipse的ADT插件提供了XML的布局预览 - 打开XML文件,选择Layout选项卡。
您还应尝试Hierarchy Viewer工具来调试布局 - 它会显示布局属性值、带填充/边距指示器的线框和完整渲染视图,同时您可以在模拟器或设备上进行调试。
layoutopt工具让您快速分析不效率或其他问题的布局和层次结构。
在XML中声明UI的优点是,它使您能够更好地分离应用程序的演示与控制其行为的代码。您的UI描述是外部的,这意味着您可以修改或适应它,而无需修改源代码并重新编译。例如,您可以为不同的屏幕方向、不同的设备屏幕大小和不同的语言创建XML布局。此外,在XML中声明布局使得更容易可视化UI的结构,因此更容易调试问题。
当你编译你的应用程序时,每个XML布局文件都会被编译成一个View资源。你应该从应用程序代码中加载布局资源,在你的Activity.onCreate()
回调函数实现中这样做。通过将对布局资源的引用作为参数传递给setContentView()
方法来实现:
如果觉得内容过多,可以访问此链接http://developer.android.com/guide/topics/ui/declaring-layout.html获取更多信息。
rl = new RelativeLayout()
时,它也会编译和执行。但是您是以Java格式编写的。同样,当您在XML中编写<RelativeLayout .. />
时,它也会编译为Java类代码并执行。而在XML中,您有一些代表性格式。 - user370305决定在哪里声明UI组件的一个主要因素是它在应用程序生命周期中的行为。如果它是静态的,我会在XML中声明所有需要的属性,如果它根据用户交互而改变,我就必须在活动中实现它。
我尽可能使用XML,因为它具有上述好处,如一致性、更好的各种屏幕大小管理、本地化、资源管理等。
这只是我通过使用Telegram安卓应用并阅读其源代码的经验得出的判断。
Telegram的源代码直接使用Java编写。
在我安装了Telegram应用的同一个模拟器中,我创建了一个简单的安卓应用,使用XML和GridLayout创建了9个卡片视图,并在点击事件中显示了一个底部弹出窗口。
我试图比较我的应用的底部弹出窗口与Telegram的底部弹出窗口的流畅度和快速度。第一次点击后,很明显Telegram的响应非常快速和流畅。经过3或4次之后,我的应用的底部弹出窗口也变得流畅。
在我看来,Telegram用户界面的流畅度(以及任何直接使用[java]代码编写的用户界面)是因为:
runOnUiThread
。我认为在这个列表中,2和4非常重要。