[Android Studio]掌握Android Studio的五种常见控件和五种常见布局_android studio控件_久忆凉的博客-程序员宅基地

技术标签: android  Android Studio  

一、View和ViewGroup

Android体系中UI的设计采用视图层次的结构。

视图层次: 由View和ViewGroup组成。在创建UI时,开发人员不会真正去创建View或者ViewGroup,而是直接使用Android所提供的具有不同功能的控件,因此通常是看不到View或ViewGroup。

View是Android系统中最基本的组件,同时也是Android所有可视组件的父类,它完成了构建按钮、文本框、时钟等诸多控件的基本功能。此外View还有一个非常重要的子类ViewGroup。
View与ViewGroup的区别:ViewGroup能够容纳多个View作为ViewGroup的子组件,同时View也可以包含ViewGroup作为其子组件,所以View和ViewGroup是相互包容、“你中有我,我中有你”的关系。


wrap_content: 是layout_width和layout_height的属性值之一,表示和自身内容一样的长度。(由内容决定)

match_parent: 是layout_width和layout_height的属性值之一,表示和父组件一样的长度。

fill_parent: 以填充布局单元内尽可能多的空间。

margin属性: 外边距,指当前视图与其他视图间的距离,可以一次性指定上下左右四个外边距值,也可以一次性指定上下左右采用同一个边距值。

android:layout_margin="10dp"

android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"

padding属性: 内边距,指当前视图边距与其内容间的距离。赋值跟margin属性同类型。

android:layout_padding="10dp"

android:layout_paddingTop="10dp"
android:layout_paddingBottom="10dp"
android:layout_paddingLeft="10dp"
android:layout_paddingRight="10dp"

visible属性:

android:visiblity="visible"
android:visiblity="invisible"
android:visiblity="gone"

二、Android的五种常见控件

2.1 文本控件

在Android的体系结构中,TextView和EditView之间是父类和子类的关系。即EditText继承于TextView,因此EditText几乎具备TextView的所有功能,两者之间最大的不同在于:EditText能够支持用户输入,而TextView不能。

2.1.1 TextView


TextView是用于显示文字(字符串)的控件,可在代码中通过设置属性改变文字的大小、颜色、样式等功能。

注意:
颜色值组成(三原色)有三种表示方法

1.#RGB:3位16进制整数,如:#f00

2.#RRGGBB:#00ff00

3.#AARRGGBB:#ff0000ff

2.1.2 EditText


EditText是可以进行编辑操作(用于用户输入和编辑文字或字符的控件)的文本框,将用户信息传递给Android程序。还可以为EditText控件设置监听器,用来测试用户输入的内容是否合法。

2.2 按钮控件

2.2.1 Button

Android的体系结构中Button继承于TextView,而ImageButton继承于ImageView。虽然这两个控件继承于不同的控件,但是Button和ImageButton都是用于完成用户的单击按钮时的onClick事件。


Button是按钮,是用于响应用户的一系列点击事件,使程序更加流畅和完整。

点击事件(监听事件)实现方式(三种):

☞ 实现方式一:

先在layout文件中指定onClick属性:Android:onClick=“click”。然后在Activity中实现这个click方法

public void click (View v){
    
   /// 处理按钮监听事件
}

☞ 实现方式二:在Activity中添加匿名内部类

Button button = findViewById(R.id.button);


button.setOnClickListener(new View.OnClickListener(){
    
    @Override
    public void OnClick(View v){
    
   /// 处理按钮监听事件
    Log.i("匿名内部类方式","button is clicked");  
    }
});

☞ 实现方式三:

public class MainActivity implements View.OnClickListener
{
    
    //实现接口抽象方法
    public void onClick(View v){
    
    //处理按钮监听事件
    }
}

//在Activity中注册回调接口
button.setOnClickListener(this);

2.2.2 RadioButton


RadioButton为单选按钮,它需要与RadioGroup配合使用,提供两个或多个互斥的选项集。(如男、女)
RadioGroup是单选组合框,可容纳多个RadioButton,并把它们组合在一起,实现单选状态。


RadioButton按钮的实现步骤:

1.先在UI布局文件activity——main.xml中的LinearLayout标签中添加如下代码:

<RadioGroup
   android:id="@+id/radiogroup"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:orientation="horizontal">
   
    <RadioButton
   android:id="@+id/radiobutton1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:checked="true"
   android:text="Male"/>
   <RadioButton
   android:id="@+id/radiobutton2"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="Female"/>
   
 </RadioGroup>

然后在MainActivity.java中添加onCreate函数中添加以下代码:

RadioGroup radiogroup = (RadioGroup)findViewById(R.id.radiogroup);
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener(){
    
    public void onCheckedChanged(RadioGroup group,int checkedId){
    
    switch(checkedId){
    
        case R,id.maleradio:editText.setText("男");
        break;
     }
       case R,id.femaleradio:editText.setText("女");
        break;
     }
    }
}

///另外Switch也可以用以下方法表示
if(checked==R.id.radiobutton1){
    
    textView.setText("男");
}
else{
    
     case R,id.maleradio:editText.setText("女");
        break;
     } 
}

2.2.3 CheckBox


CheckBox即多选按钮,允许用户在一组选项中进行单选和多选。用法与RadioButton类似。

CheckBox按钮的实现步骤:

1.先在UI布局文件activity——main.xml中的LinearLayout标签中添加代码(与radioBox的相似)
2.

注意:响应事件从何而来?(两个来源)

1.由系统提供的,具有特定函数名的响应函数(在OnCreate中进行定义和实现)

2.自定义响应函数名的方法来响应用户事件(放在Activity中作为一个成员函数来使用)

public void CheckboxClicked(View view){
    
    boolean checked = ((Checked)view).isChecked();
    case R.id.meat:
    if(checked){
    
        editText.setText("肉类");
    }else{
    
        ...
    }
    break;
    
    ...
}

2.3 图片控件

2.3.1 ImageView

ImageView是视图控件,它继承于View,其功能是在屏幕中显示图像,ImageView类可以从各种来源加载图像(如资源库或网络),并提供缩放、裁剪、着色(渲染)等功能。

///在UI布局文件activity——main.xml中添加

<ImageView 
android:id="@id/imageView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:srcCompat="@tolls:sample/backgrounds/scenic[0]"

///在MainActivity.java中添加onCreate函数中定义ImageView对象
ImageView imageView;
imageView.setImageResource(R.drawable.ic_launcher_foreground);

2.4 列表控件

2.4.1 ListView

普通列表–ListView在程序中使用频率相对比较高,很多地方都会用到这个控件,其中的内容会以一个列表的形式显示出来,但是在使用ListView时需要一个适配器(应用自带适配器、z自定义适配器)(Adapter)类显示需要的内容。当显示的内容复杂的时候系统的适配器不能满足要求了,这时可以自定义适配器,写一个类继承BaseAdapter。

2.4.2 Spinner

下拉列表–Spinner 控件也是一种列表类型的控件,可以极大地提高用户的体验性。当需要用户选择时,可以提供一个下拉列表将所有可选的项列出来,供用户选择。

2.4.3 ExpandableListView

多级列表ExpandableListView控件提供的是一个多级列表(一般是两级)。


如何实现这个两级列表呢?既然ExpandableListView采用列表的形式,它也是应该有一个适配器,但是它的适配器不是继承BaseAdapter,而是继承它独有的适配器BaseExpandableListView,同时也需要实现其中的几个方法:

BaseExpandableListView中的方法:

方法名称 参数 说明
getGroudId int groundPosition 获取在给定的位置编号
getChildId int groundPosition,int childPosition 获取给定组的孩子的ID
getGroudCount 获取第一级列表的列数
getChildrenCount int groupPosition 获取指定组中孩子的数量
getGroup int groupPosition 获取定组相关的数据
getGroupView int groupPositin,boolean isExpanded,View convertView,ViewGroup parent 获取一个显示的视图给定组
getChild int groupPosition,int childPosition 获取与孩子在给定的组相关的数据
getChildView int groupPosition,boolean isLastChild,View convertView,ViewGroup parent 获取一个视图显示在给定的组的孩子的数据

2.5 时间日期控件

2.5.1 AnalogClock(模拟时钟的显示方式)和DigitalClock

这两个控件都是通过获取系统时间展示给用户。AnalogClock是以模拟时钟的形式展示,DigitalClock是以数字时钟 的形式向用户展示。

2.5.2 DatePicker和TimePiker

用户可以通过这两个控件来设置日期和时间,DatePicker(会在Android 4.0中自动产生一个日历的功能)用于选择日期,TimePicker用于选择时间。

三、五种常用的布局

在Android程序中界面是通过布局文件设定的,在每个应用程序创建会默认包含一个主界面布局,该布局位于res/layout目录中。实际开发中每个应用程序都包含多个界面,而程序默认提供的一个主界面布局无法满足需求,因此经常会在程序中添加多个布局。

在Android中有两种方式创建布局:一种是在项目中的layout文件夹中写XML,将各个布局写在XML中;一种是在程序中通过代码去编写,这种方式一般用得比较少。

四种布局常用的单位:

1.px: 像素,即在屏幕中可以显示最小元素单位。

2.pt: 磅数,一磅等于1/72英寸,一般pt作为字体的单位来显示

3.dp(与密度无关的像素,dp与dip相同): 基于屏幕密度的抽象单位。不同设备由不同的显示效果,更具分辨率的不同来去顶控件的尺寸。

4.sp: 可伸缩像素,采用与dp相同的设计理念,推荐设置文字大小时使用。

3.1 线性布局(LinearLayout)

线性布局就是将一些控件排放在一条线上,但是有水平方向和垂直方向两种。水平和垂直方向的控制由属性android:orientation来控制,这个属性有两个值:垂直(Vertical)和水平(Horizaontal),在线性布局中还有一些比较常用的属性,如:android:gravity、android:weight(控件的权值)等。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="#ffffff"
    >
    <LinearLayout
        android:id="@+id/LinearLayout01"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1.0"
        android:orientation="horizontal"
        >
        <Button
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:gravity="center_horizontal"
            android:text="按钮1"
            android:layout_weight="1.0"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:gravity="center_horizontal"
            android:text="按钮2"
            android:layout_weight="1.0"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:gravity="center_horizontal"
            android:text="按钮3"
            android:layout_weight="1.0"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="按钮4"
            android:layout_weight="1.0"
            />
        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="按钮5"
            android:layout_weight="1.0"
            />
        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="按钮6"
            android:layout_weight="1.0"
            />
    </LinearLayout>
</LinearLayout>

运行效果效果如下:

3.2 相对布局(RelativelLayout)

线对布局是指按照控件间的相对位置进行布局,也就是说我们可以选一个控件作为参照,其他的控件可以在它的上边、下边、左边及右边等。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="#ffffff"
    >
   <TextView
       android:id="@+id/textView01"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="AA"
       android:textColor="#00FF00"
       android:textSize="22sp"
       android:layout_marginLeft="20px"/>

    <TextView
    android:id="@+id/textRight"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
        android:layout_toRightOf="@id/textView01"
    android:text="BB"
        android:textColor="#FF0000"
        android:textSize="22sp"
    android:layout_marginLeft="20px"/>
    <TextView
        android:id="@+id/text02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textView01"
        android:text="CC"
        android:textColor="#00FFFF"
        android:textSize="22sp"
        android:layout_marginLeft="20px"/>
    <TextView
        android:id="@+id/textView02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textRight"
        android:layout_toRightOf="@id/text02"
        android:text="DD"
        android:textColor="#000000"
        android:textSize="22sp"
        android:layout_marginLeft="20dip"/>

</RelativeLayout>

运行结果如下:
BB相对于AA的左边,CC相对于AA的下边边,DD相对于BB的下边且相对于CC的右边

3.3 帧布局(FrameLayout)

帧布局是五大布局中最简单的一个布局,在这个布局中,整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素上,将前面的子元素部分和全部遮挡。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/FrameLayout01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    >
    <TextView
        android:id="@+id/TextView01"
        android:layout_width="1000px"
        android:layout_height="1000px"
        android:background="#ff0000"
        android:text="文本框1"
        android:textColor="#ffffff"/>
    <TextView
        android:id="@+id/TextView02"
        android:layout_width="750px"
        android:layout_height="750px"
        android:background="#0000ff"
        />
    <TextView
        android:id="@+id/TextView03"
        android:layout_width="500px"
        android:layout_height="500px"
        android:background="#00ff00"
        />
</FrameLayout>

运行结果如下:

3.4 表格布局(TableLayout)

表格布局适用于N行N列的布局格式。一个TableLayout由许多TableRow组成,一个TableRow就代表TableLayout中的一行。TableRow的数量决定表格的行数。而表格的列数是由包含最多控件的TableRow决定。

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:stretchColumns="1"
    >
    <TableRow>
    <TextView
        android:layout_column = "1"
        android:padding="3dip"
        android:textColor="#000000"
        android:text="open..."/>
    <TextView
        android:gravity="right"
        android:padding="3dip"
        android:textColor="#000000"
        android:text="Ctrl_o"/>
    </TableRow>

    <View
        android:layout_height="2dip"
        android:background="#FF909090"/>

    <TableRow>
    <TextView
        android:layout_column = "1"
        android:padding="3dip"
        android:textColor="#000000"
        android:text="Save..."/>
    <TextView
        android:gravity="right"
        android:padding="3dip"
        android:textColor="#000000"
        android:text="Ctrl_s"/>
    />
    </TableRow>

    <View
        android:layout_height="2dip"
        android:background="#FF909090"/>

    <TableRow>
    <TextView
        android:layout_column = "1"
        android:padding="3dip"
        android:textColor="#000000"
        android:text="Save As..."/>
    <TextView
        android:gravity="right"
        android:padding="3dip"
        android:textColor="#000000"
        android:text="Ctrl_shift_s"/>
    </TableRow>

    <View
        android:layout_height="2dip"
        android:background="#FF909090"/>

    <TableRow>
    <TextView
        android:layout_column = "1"
        android:padding="3dip"
        android:textColor="#000000"
        android:text="X"/>
    <TextView
        android:gravity="right"
        android:padding="3dip"
        android:textColor="#000000"
        android:text="Import..."/>
    </TableRow>
</TableLayout>

运行结果如下:

3.5 绝对布局(AbsoluteLayout)

绝对布局是通过指定x、y坐标来控制每一个控件位置的。

四、参考资料

《从零开始学Android编程》

中国大学慕课网:Android应用开发

中国大学慕课网:Android基础应用开发

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Honeycomb_1/article/details/105058028

智能推荐

图解部署企业QQ方案 [2007年6月21日]_weixin_33810302的博客-程序员宅基地

现将外网配置企业QQ的基本以图片的形式进行介绍。 上图为RTX正常的设置后的使用方法。RTX通过一个外部QQ号码与外界进行通信。从整体来看我感觉更像我们公司中的集团电话,通过几个外部号码完成与外部的通信工作。当然至于里面的费用情况需要咨询腾讯公司了。如果你属于下面情况,可以使用以下方法巧妙配置RTX。 公司内部各成员需要使用即时通信软...

PostgreSQL 10.1 手册_前言_3. 约定_weixin_34034670的博客-程序员宅基地

3.约定下面的约定被用于命令的大纲:方括弧([和])表示可选的部分(在 Tcl 命令里,使用的是问号 (?),就像通常的 Tcl 一样)。 花括弧({和})和竖线(|)表示你必须选取一个候选。 点(...)表示它前面的元素可以被重复。如果能提高清晰度,那么 SQL 命令前面会放上提示符=&gt;, 而 shell 命令前面会放上提示符$。不过...

java同步非阻塞IO_weixin_33806914的博客-程序员宅基地

异步IO编程在javascript中得到了广泛的应用,之前也写过一篇博文进行梳理。js的异步IO即是异步的,也是非阻塞的。非阻塞的IO需要底层操作系统的支持,比如在linux上的epoll系统调用。从另外一个角度看待的话,底层操作系统对于非阻塞IO的系统调用是一种多路复用机制,js对其进行了比较厚的封装,转换成了异步IO。但是,也可以进...

性能优化工具知识梳理(4) Hierarchy Viewer_weixin_34238642的博客-程序员宅基地

一、概述Hierarchy Viewer是我们平时开发中常用的工具,通过它我们可以得到某个界面中的布局层次,今天我们来介绍一下如何使用这个工具来优化布局。Hierarchy工具位于SDK/tools目录下,直接运行之后我们会得到下面这个界面:它提供了下面两个功能:Load View HierarchyInspect Screenshot因为主要是讨论如何用它来分析性能问题,所以...

IE 是如何决定Accept-Language 属性的_weixin_33991727的博客-程序员宅基地

Accept-Language 是HTTP 请求里面的一个属性,用于告诉服务器浏览器可以支持什么语言。 如果网站支持多语种的话,可以使用这个信息来决定返回什么语言的网页 。示例:Accept-Language: zh-CN,fr-FR;q=0.5这里zh-CN 是表示中文,fr-FR 是表示法语。 这是RFC1766(http://www.ie...

Linux centos7 firewall防火墙端口号区域各个含义_weixin_33896069的博客-程序员宅基地

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

随便推点

tomcat java 热部署,tomcat热部署_蔡子健的博客-程序员宅基地

Tomcat热部署:webapps下的项目正在运行,直接把开发的新版本发布到正在运行的Tomcat下(不能关闭Tomcat再发布新版本)​开发者本地将代码通过Gitpush到服务器端,服务器自动编译-打包-发布等等;也就是说发布到tomcat中后,不需要重启tomcat。一;热部署前准备:1 配置Tomcat登录的用户名和密码(热部署需要用户名和密码进行远程发布)1.1修改user配置文件一是为...

log4j与commons-logging,slf4j的关系(转)_weixin_33796205的博客-程序员宅基地

前面有一篇日志中简单的介绍了 log4j,同时也介绍了它与commons-logging的关系,但是突然冒出来一个slf4j,并且slf4j有取代commons-logging的趋势,所以,我们可以推知slf4j与commons-logging的作用应该相差不大的。 好,下面开始先讲讲slf4j。1.slf4j他只提供一个核心slf4j api(就...

三星 linux 电视软件下载中心,三星 SF-565P 多功能一体机驱动下载(ver.1.0.156) 版For Linux..._渔舟晚之的博客-程序员宅基地

三星SF-565P多功能一体机驱动下载(ver.1.0.156)版ForLinux(2012-07-11 16:09:05)标签:12.04ubuntu三星打印机驱动it这是一篇之前收藏的文章,是关于安装三星打印机驱动程序的问题,有使用三星打印机的可以参考一下安装三星 SF-565P 多功能一体机(打印机)驱动的方法:1.首先下载驱动(ver.1.0.156) 版For Linux :ht...

python+selenium自动化测试(六)_weixin_33827965的博客-程序员宅基地

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

markObject备份_hu36978的博客-程序员宅基地

/** *  * 棱形画法 : *  *  * import flash.display.*;            var star_commands:Vector. = new Vector.()        star_commands.push(1, 2, 2, 2);

layui table中使用checkbox_weixin_33897722的博客-程序员宅基地

第一步:1.&lt;div class="layui-form"&gt; &lt;table class="layui-hide" lay-filter="js_table_reource_invite_supplier_index_table" id="js_table_reource_invite_supplier_index_table"&gt;&lt;...

推荐文章

热门文章

相关标签