第一个Activety添加控件

来源:互联网 发布:广州艺知艺术培训学校 编辑:程序博客网 时间:2024/05/13 04:33

接上一篇博文,今天玩添加一个标题,添加一个输入框用于输入服务器IP地址,一个按钮,用于保存IP地址并登录服务器。

今天这篇博文可能会有点长,要讲解的东西比较多,耐心看。

安卓工程的项目结构就不多说了,基本能控制的就那么几个文件,要添加标题,就先打开布局文件。这个项目的第一Activety的标题很简单,就一行文字而已,打开activity_main.xml这个布局文件,我们需要在页面的顶部弄个标题,你可以在Design状态拖一个TextView过去,不过我更习惯直接写,因为修改参数还是得回到Text状态。

OK,只要在RelativeLayout里面写入如下代码就可以自动生成一个TextView了,注意写入的位置,在tools:context=".MainActivity">后面,</RelativeLayout>前面,这是标准的XML文件结构,表示这是一个单独的节点。

<TextView
        android:id="@+id/title"
        android:layout_width="fill_parent"
        android:layout_height="30sp"
        android:text="Landscape 会议文件分发系统"
        android:textSize="15sp"
        android:gravity="center"
        android:textColor="#00F"
        android:shadowColor="#000"
        android:shadowDx="3"
        android:shadowDy="3"
        android:shadowRadius="3"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:background="@drawable/title_bg"/>

这里讲解一下TextView样式参数的含义,必须以android:开头,表示是继承于android系统。

layout_width和layout_height分布是控件的宽度和高度,这里宽度是全屏宽度,高度是40SP,SP是google公司为了适应安卓系统乌七八糟的分辨率定义的一个像素单位,具体转换值可以去百度,反正我们只是显示个标题而已,大致差不多就可以了。

text是控件需要显示的文字内容

id是控件的id,必须@+id/开头,后面才是真正的id,这点与VS编程很不同,被它搞残了很多次。观念转换不过来。

gravity是文字的对齐方式

textSize是文字大小,SP就不多讲了。

shadowColor是文字阴影的颜色,不要也无所谓,纯粹是为了好看点而已,大家也不要批判我的审美观了,我一向是实用主义者,要是让我自己用的app,我是不会加阴影的,耗资源嘛。

shadowDx是阴影横向偏移量

shadowDy是阴影纵向偏移量

shadowRadius是阴影大小

以上三个参数根据自己喜好填,注意不要超出控件范围,否则会不可见的。

textColor是文字颜色,

layout_alignParentTop将控件的上边缘和父控件的上边缘对齐。

layout_centerHorizontal将控件置于水平方向的中心位置

以上两个参数有点特殊,这个是针对layout的,而不是针对TextView,但TextView是在layout里面,所以要定好它的位置。

background控件背景设置,这个就需要讲得多了,也是最难学的一部分。我这里用了@drawable/title_bg这个参数,意思就是控件背景有单独的style设置,这个设置是一个单独样式表文件,存放在drawable文件夹里,名字叫title_bg,注意,是没有xml这个扩展名的,虽然它是一个xml文件。下面我们讲讲这个title_bg.xml文件。

文件可以用另外的软件建立,如记事本什么的,但注意保持的格式,要保存成纯文本格式,而且要utf-8编码,否则会出错,尤其是里面注释有中文的情况下。

首先,不要尝试在IDE里面新建XML文件,这个傻乎乎的IDE只要新建xml文件都会给保存在values文件夹里面,一般我都是在外面用记事本写的,推荐使用Notepad++。

代码在下面提供,写好的title_bg.xml,拷贝到项目里面的app->src->main->res->drawable文件夹里,稍等几秒钟,IDE就会同步更新显示出文件来的。有点需要注意的,文件名最好用小写,尤其是不能用大写字母开头,否则会编译错误的。

title_bg.xml的代码如下

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 连框颜色值 --><item>
    <shape>
        <solid android:color="#22666666" />
    </shape>
</item>
    <!-- 主体背景颜色值 -->
    <item
        android:bottom="1dp"
        android:right="1dp"
        android:top="1dp"
        android:left="1dp">
        <shape>
            <gradient
                android:startColor="#39BFE4"
                android:centerColor="#058BB0"
                android:endColor="#39BFE4"
                android:type="linear"
                android:angle="90"
                android:centerX="0.5"
                android:centerY="0.5" />
            <padding
                android:left="2dp"
                android:top="2dp"
                android:right="2dp"
                android:bottom="2dp" />
        </shape>
    </item>
</layer-list>

其实就是一个画画的xml文档,改说明的我都注释了,应该能看得懂。不懂就不停改相关参数,编译看效果。

好,标题栏就算完成了,编译看看效果,再继续添加控件,方法都是一样的,代码如下

先在主布局里面再嵌套一个RelativeLayout布局,用于显示除标题外的其余控件

嵌套的RelativeLayout主体布局代码

<RelativeLayout
        android:id="@+id/info_div"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="15dip"
        android:layout_margin="15dip"
        android:background="@drawable/background_div_bg"
        >

background_div_bg在后面单独提供,后面涉及到样式表文件也是如此。

嵌套的RelativeLayout收尾代码

</RelativeLayout>

在嵌套的RelativeLayout里面继续添加控件

提示输入IP地址的TextView

<TextView
            android:id="@+id/iptext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginTop="5dp"
            android:text="请输入会议服务器IP地址"
            style="@style/normalText"/>

输入框的代码

<EditText
            android:id="@+id/ipedit"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/iptext"
            android:singleLine="true"
            android:background="@drawable/shape"
            android:inputType="number|textCapCharacters"/>

这里要说明一下,inputType用这个参数表示验证输入,只能输入数字和字符,获取焦点会自动打开输入法,而且是数字的输入法,不会是全键盘或其余什么的。

确定按钮的代码

<Button
            android:id="@+id/savelogin"
            android:layout_width="wrap_content"
            android:layout_height="32sp"
            android:text="确    定"
            android:textSize="16sp"
            android:layout_centerHorizontal="true"
            android:layout_below="@+id/ipedit"
            android:layout_marginTop="15dp"
            android:background="@drawable/buttonshape"
            android:onClick="SaveLogin"
            />

这里要讲一下onClick这个属性,这是响应按钮的单击函数,响应按钮单击事件,一般有两种方法,一种是监听单击事件,检测是不是指定ID的控件在单击,如果是则进行处理,另外一种就是指定处理函数,我习惯用第二种,方便维护代码,这是从c#转行过来的习惯,看各人喜好的。

再玩个版权声明的TextView,在嵌套的RelativeLayout外,主RelativeLayout内输入以下代码

<TextView
    android:id="@+id/copyright"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text=""
    android:gravity="right"/>

注意看,这里的text是空的,是我用来玩一个小技巧用的,到讲JAVA程序的时候回单独讲的。

background.xml代码

<?xml version="1.0" encoding="utf-8"?>  
<shape xmlns:android="http://schemas.android.com/apk/res/android">  
    <gradient   
        android:startColor="#FFACDAE5"  
        android:endColor="#FF72CAE1"  
        android:angle="45"  
    />  
</shape> 

background_div_bg.xml代码

<?xml version="1.0" encoding="UTF-8"?>  
<shape xmlns:android="http://schemas.android.com/apk/res/android">  
    <solid android:color="#55FFFFFF" />
    <corners
        android:topLeftRadius="10dp"
        android:topRightRadius="10dp"
        android:bottomRightRadius="10dp"
        android:bottomLeftRadius="10dp"/>
</shape> 

buttonshape.xml代码

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 连框颜色值 --><item>
    <shape>
        <solid android:color="#0000FF" />
        <corners android:radius="6dp" />


    </shape>
</item>
    <!-- 主体背景颜色值 -->
    <item
        android:bottom="1dp"
        android:right="1dp"
        android:top="1dp"
        android:left="1dp">
        <shape>
            <gradient
                android:startColor="#39BFE4"
                android:centerColor="#058BB0"
                android:endColor="#39BFE4"
                android:type="linear"
                android:angle="90"
                android:centerX="0.5"
                android:centerY="0.5" />


            <padding
                android:left="2dp"
                android:top="2dp"
                android:right="2dp"
                android:bottom="2dp" />
            <!-- 应该是圆角 -->
            <corners android:radius="6dp" />
        </shape>
    </item>
</layer-list>

shape.xml的代码

<?xml version="1.0" encoding="utf-8"?>  
<shape xmlns:android="http://schemas.android.com/apk/res/android">  
    <solid android:color="#0033FFFF"/>
    <corners android:radius="8px"/>  
    <stroke android:color="#0033FF"
        android:width="2px"  
        />  
</shape>  

布局代码基本就这样,明天讲讲如何编写JAVA代码,响应控件。

0 0
原创粉丝点击