Java Android中的动态与XML布局?
我是Android开发新手,已经开始创建自己的UI。我看到您可以动态地创建它,如()所示: 但我也看到netbeans有一个文件Resources->layout->main.xml。因此,您可以为UI()创建XML布局:Java Android中的动态与XML布局?,java,android,android-layout,netbeans-7,android-xml,Java,Android,Android Layout,Netbeans 7,Android Xml,我是Android开发新手,已经开始创建自己的UI。我看到您可以动态地创建它,如()所示: 但我也看到netbeans有一个文件Resources->layout->main.xml。因此,您可以为UI()创建XML布局: 所以我的问题是我应该用哪一个?在Android开发中,动态布局与XML布局的建议和优缺点是什么?使用布局XML资源文件 首先,资源集(例如,res/layout land/以及res/layout/)允许您定义在不同环境下使用的多个UI,系统会根据需要自动选择正确的UI。
所以我的问题是我应该用哪一个?在Android开发中,动态布局与XML布局的建议和优缺点是什么?使用布局XML资源文件 首先,资源集(例如,
res/layout land/
以及res/layout/
)允许您定义在不同环境下使用的多个UI,系统会根据需要自动选择正确的UI。Java中的等效语句是一组讨厌的if
或switch
语句
其次,有一些工具可以帮助您成功地创建这些布局资源。即使Eclipse的拖放GUI构建不是您的拿手好戏(例如,您正在使用NetBeans),Lint也会帮助您指出布局中的缺陷,因为它只会指出等效Java代码中的一个子集
第三,它往往更简洁,因此如果您手动键入这些内容,那么XML的键入就会更少
第四,大约98%的示例代码将使用布局XML文件,在StackOverflow(和其他支持资源)上找到的所有UI答案中,大约98%将假定您使用布局XML文件。虽然你可以自由地避免使用XML——也许你在孩提时代就受到尖括号之类的攻击——但与大多数Android开发人员的做法相比,你将逆流而上。我建议在项目的大部分部分使用XML布局。 您可以将布局放在不同的文件夹中,例如: 布局土地->用于景观 布局端口->用于纵向 布局-v15->适用于android版本>=15 布局-sw600dp->用于具有一定宽度的屏幕 使用这些资源分类器,您可以快速地在布局中使用各种各样的资源,以支持各种各样的android设备,而无需编写大量额外的代码
在我看来,这是使用xml资源与动态创建所有布局相比的最大优势。有关更多信息,请参见好吧,我用xml声明mu UI(99%的时间),因为这样做对我来说更容易 将UI和代码逻辑分开是一种很好的做法,XML更易于描述UI(考虑使用或切换到EclipseIDE及其设计器) 此外,一个android应用程序可以有多种设计(针对手机和平板电脑),用Java编写代码将是一件痛苦的事情
简单地说,使用XML对于大多数事情,我更喜欢XML,因为它允许您将内容与代码分离,而且编辑起来更干净,尤其是当项目变得庞大,您忘记了刚才编写的内容时。使用XML和样式可以让您在整个应用程序中获得一致的外观和感觉。它还允许布局系统处理繁重的工作,并且最终不会出现引用活动上下文的视图。(当您旋转并重新创建活动时,这是不好的)。总的来说,这是一个更快的选择,如果你能用XML来做的话,那就比我喜欢的要快。大多数android架构/教科书似乎也遵循这种设置。(见Android开发文档,Commonware的马克·墨菲)
Dynamic的优势在于它能够以更高级的方式自定义某些内容,并且可以相当轻松地解决一些布局问题。除此之外还有一些好处,但我更喜欢先用XML做所有事情,如果做不到或很难,那么就用代码做。有些事情可以用XML完成,也比用代码简单得多。这完全是您自己的选择。您可能会发现大多数Android开发人员使用XML来编写应用程序的布局,因为这是专门为此设计的。 然而,我个人来自游戏开发背景,并不真正需要Android提供的UI小部件,所以当我使用UI小部件时,我只是用java编写它
我希望这有帮助。基于XML的布局取决于强制转换,因为您必须使用:
Button myButton = (Button) findViewById(R.id.my_button);
因此,您只有一个强制转换和耗时的XML搜索。
当您使用动态创建UI时,管理它要困难得多。你必须组织一切,但你不需要投那么多
我更喜欢第三种解决方案-
它使用依赖注入模式,您不需要考虑强制转换,创建应用程序的速度更快。也更灵活。假设您有一个正常的文本字段。然后您要将其更改为文本区域。在RoboGuice中,只需进行2次更改(用法更改除外)。使用上下文时速度也更快(上下文是非常消耗内存的对象,存储对它的引用是糟糕编码的标志)
所以我的建议是:使用XML,因为它管理UI很简单。用于快速编码。这是一个相当晚的响应,但有人会发现它很有用。我目前正在制作一个库,它允许您使用服务器上声明的动态布局。您可以在这里找到:+1谢谢。XML就是这样。我有一种感觉,android站点上的大多数代码都使用XML。此外,在Java代码中,您必须编译并运行代码,以查看布局的外观,而在XML中(如果您使用eclipse)你可以通过eclipse提供的工具直接看到它。+1现在我看到xml至少可以消除我对UI不一致性的担忧。是的,这是eclipse的ADT插件的一部分。。。。。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, AndroidTest"
/>
</LinearLayout>
Button myButton = (Button) findViewById(R.id.my_button);