android的⼀个app代码怎么写,编写⼀个简单的安卓app界⾯安卓的⽤户界⾯都是由View以及ViewGroup的⼦类对象组成的。View对象⼀般是想button或者textview这样的控件,ViewGroup对象是⼀个看不见的View容器,它定义了如何布局容器中装⼊的⼦View,⽐如是⽹格布局还是垂直布局等。
android提供了通过xml⽂件编写的⽅式来操作这些View和ViewGroup,所以尽管View和ViewGroup⽐较复杂,但是我们其实多数时候是在xml中操作他们的,难易程度就跟⽹页设计差不多。
本⽂将会指导你建⽴⼀个包含了⽂本编辑框和按钮的xml布局。后续的教程中,我们会为为按钮增加点击的响应事件。
创建⼀个LinearLayout
打开 res/layout/⽬录下的l⽂件。
注意:在eclispe下,默认打开⼀个xml⽂件显⽰的是xml⽂件的预览效果,⽽不是代码。本⽂是直接在xml代码⾥⾯操作,因此你需要点击⼀下底部的tab菜单中的 l,这样才可以编辑xml。
你创建的BlankActivity ⼯程模版其实是已经有了⼀个默认的布局的,但是他是相对布局,由RelativeLayout 包含⼀个⽂本显⽰框TextView 组成。
我们要将其改成线性布局。
⾸先删除TextView元素,同时将RelativeLayout替换成LinearLayout,然后增加android:orientation属性并设置成horizontal(⽔平)。
完成上⾯的步骤之后l应该是这样的:
xmlns:tools="schemas.android/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
简易安卓app开发LinearLayout 是⼀个ViewGroup(即ViewGroup的⼦类),LinearLayout 中的⼦元素要么是单⼀的横向排列,要么是垂直排列,这取决于其android:orientation属性。⼦元素排列的先后顺序跟xml⽂件中出现的顺序是⼀致的。 android:layout_width 和
android:layout_height这两个属性是所有视图组件都需要的属性,缺少其中任何⼀个在运⾏代码的时候都会报错。这两个属性决定了该View的⼤⼩。
因为在l⽂件中LinearLayout是是最顶层的View,所以我们要将app界⾯充满整个屏幕的话应该将layout_width 和layout_height设置成"match_parent",顾名思义,match_parent就是充满⽗View的整个空间,⽽所有app的顶级View都是充满屏幕的。(新版本都是⽤match_parent,也可以⽤fill_parent来代替,但是官⽅不推荐这么写)。
关于 layout的其他属性,请参考⾕歌官⽅⽂档。
添加⼀个⽂本编辑框
在xml中创建⼀个⽂本编辑框控件是⽤标签,就跟其他的控件⼀样,你需要为它增加必要的属性设置。如下:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/edit_message" />
关于这些属性的解释:
android:id
id是⼀个view的唯⼀标识,通过id,你可以在代码中引⽤这些视图对象,读取或者修改他们。当我们在xml中引⽤资源⽂件的时候,必须要加上@符号。@符号紧跟着的是资源的类型(这⾥资源类型就是id)然后是"/"分隔符,最后是资源名称。所以
android:id="@+id/edit_message"的意思就是引⽤⼀个名字叫edit_messag的id类型资源。
注意这⾥的id之前有⼀个+号。当我们第⼀次定义⼀个资源⽂件id的时候需要+,在编译app的时候,会在我们的 gen/R.java⽂件中⽣成⼀个资源⽂件id,id⼀旦被定义之后,其他队该id的引⽤都不再需要+号了。
android:layout_width 和 android:layout_height与直接给这两个属性赋具体的值不同,"wrap_content"表⽰该view占据的空间⼤⼩取决于⾃⾝。如果值为"match_parent",那么view的⼤⼩将充满其⽗容器。
android:hint
这个属性设置了⽂本输⼊框EditText在没有任何⽂字的时候显⽰给⽤户的默认值。hint属性的值在这⾥并没有直接给出,⽽是通过对资源⽂件string的引⽤来获得字符串。当我们的资源⽂件中还没有定义名叫edit_message的字符串的时候,直接编译是会报错的。下⾯我将会教你如何添加string资源⽂件。
添加字符串String资源⽂件
如果你想在⽤户界⾯中添加字符串,你应该将该字符串放在专门的资源⽂件中。这样做的好处是,当你需要修改UI中涉及到的字符串时,你只需修改⼀个⽂件就可以了,⽽不必在复杂的代码中寻。⽽且,将字符串分离出来的好处是这样更容易实现对多语⾔的⽀持。默认情况下,你新建⼀个⼯程总是会产⽣res/values⽬录,⽬录下有l⽂件。打开该⽂件,添加⼀个name为“edit_message”,value 值为"Enter a message."的字符串。因为我们稍后会在button上显⽰send⼀词,因此顺便我们再添加⼀个name
为“button_send”,value值为"Send"的字符串。代码如下:<?xml version="1.0" encoding="utf-8"?>
My First App
Enter a message
Send
Settings
MainActivity
⾄于对多种语⾔的⽀持⽅法,可以参考google官⽅其他⽂章。
添加⼀个按钮
上⾯我们在LinearLayout中添加了⼀个⽂本输⼊框EditText,紧接着我们通过如下代码在EditText的后⾯添加⼀个按钮:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send" />
由于在activity中并没有引⽤button的地⽅,所以我们这⾥没有添加id属性。layout_width 和layout_height属性设置成wrap_content意味着按钮的⼤⼩取决于⾃⾝的内容。
将⽂本编辑框的宽度设置成适合屏幕的宽度
到现在为⽌,EditText 和Button的⼤⼩都是wrap_content,也就是⾃⾝有多⼤,就显⽰多⼤。如图
这种设置对于button来说很合适,但是并不适合editText控件,因为editText是⽤来输⼊⽂字的,editText的⾃⾝内容是可变
的,wrap_content只能保证其⼤⼩适应了最初该有的⼤⼩,当输⼊⽂字更长的时候,editText就满⾜不了了,所以最好还是设置成最⼤限度的充满屏幕的效果(除button外的剩余部分)。在LinearLayout中,我们可以通过weight权重来做到,也就是 android:layout_weight属性。
android:layout_weight就是决定如何分配剩余空间。举个例⼦,如果你给⼀个view的layout_weight设为2,另外⼀个View的的
layout_weight设为1,那么剩余的空间就被划分成了三分,第⼀个View占两份,也就是2/3.
默认所有View的layout_weight都为0,因此如果你只给某个View设置了layout_weight⼤于0的值,那么他将得到所有视图在分配完空间之后的全部剩余空间。所以这⾥我将EditText的layout_weight设为1,⽽按钮保持默认的状态。
android:layout_weight="1"
... />
注意:虽然在这种情况下,⼀般我们是将editText的宽度设为0,
android:layout_width="0dp"
为什么要这么做呢?其实是效率⽅⾯的考虑,如果使⽤"wrap_content",系统会先计算editText所需的空间,然后得出editText和button 占据后还剩余多少空间,如果还有剩余,则将剩余宽度补给editText。如果我设置为0,editText部分的空间就不需要计算了。所以你应该这样写代码:
android:layout_weight="1"
android:layout_width="0dp"
... />
修改了之后那么将会是如下效果:
整个布局⽂件的代码:<?xml version="1.0" encoding="utf-8"?>
xmlns:tools="schemas.android/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="@string/edit_message" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send" />
运⾏代码就能看到效果了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论