博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓应用的界面编程(2)
阅读量:5253 次
发布时间:2019-06-14

本文共 5020 字,大约阅读时间需要 16 分钟。

第一组UI组件:布局管理器(以ViewGroup为基类派生的布局管理器)

1.线性布局 LinearLayout类

1 
6
11
16
21
26
31
View Code

效果图如下

如果将android:gravity="bottom|center_horizontal"改为android:gravity="right|center_vertical",效果图如下

 

2.表格布局 TableLayout(继承自LinearLayout,本质是线性布局管理器,采用行列形式管理UI组件)

单元格的三种行为方式Shrinkable/Stretchable/Collapsed见名知意分别为可收缩/可拉伸/被隐藏

下面是一个范例

1 
5
6
12
13
18
19
20
21
26
31
36
37
38
39
44
49
50
55
60
65
66
67
68
73
78
79
84
89
94
95
96
101
106
107
108
View Code

效果图如下,第一行不见了,具体原因我感觉是被蓝条遮住了,后期学到再进行修改。

 

3.帧布局 FrameLayout

帧布局容器为每个加入其中的组件创建一个空白的区域(称为一帧),每个子组件占据一帧,这些帧会根据gravity属性执行自动对齐

下面的例子示范了用法,上面的TextView遮住下面的TextView,后添加的遮住先添加的

1 
4
5
13
21
29
37
45
53
View Code

效果图如下

如果在程序中启动一个线程来控制周期性地改变这6个TextView的背景色,可以实现乡村杀马特非主流霓虹灯效果,源码如下,具体效果自行脑补。。精神污染

1 public class FrameLayout extends AppCompatActivity { 2     private int currentColor = 0; 3     //定义一个颜色数组 4     final int[] colors = new int[]{ 5             R.color.color1, 6             R.color.color2, 7             R.color.color3, 8             R.color.color4, 9             R.color.color5,10             R.color.color611     };12     public final int[] names = new int[]{13             R.id.view01,14             R.id.view02,15             R.id.view03,16             R.id.view04,17             R.id.view05,18             R.id.view0619     };20     TextView[] views = new TextView[names.length];21     Handler handler = new Handler()22     {23         @Override24         public void handleMessage(Message msg) {25             //表明消息来自本程序所发送的26             if (msg.what == 0x123) {27                 for (int i = 0; i < names.length; i++) {28                     views[i].setBackgroundResource(colors[(i + currentColor) % names.length]);29                 }30                 currentColor++;31             }32             super.handleMessage(msg);33         }34     };35     /**36      * ATTENTION: This was auto-generated to implement the App Indexing API.37      * See https://g.co/AppIndexing/AndroidStudio for more information.38      */39     private GoogleApiClient client;40 41     @Override42     protected void onCreate(Bundle savedInstanceState) {43         super.onCreate(savedInstanceState);44         setContentView(R.layout.activity_frame_layout);45         for (int i = 0; i < names.length; i++) {46             views[i] = (TextView) findViewById(names[i]);47         }48         //定义一个线程周期性地改变currentColor变量值49         new Timer().schedule(new TimerTask() {50             @Override51             public void run() {52                 //发送一条空消息通知系统改变6个TextView组件的背景色53                 handler.sendEmptyMessage(0x123);54             }55         }, 0, 200);56     }57 }
View Code

 

4.相对布局

相对布局容器内子组件的位置总是相对兄弟组件/父容器来决定。下面是梅花布局的效果。。

1 
5
6
12
13
20
21
28
29
36
37
44
View Code

 

5.网格布局 GridLayout(4.0版本后才能使用)

下面是一个计算器界面

首先在布局管理器中定义一个GridLayout,并在该GridLayout中依次定义文本框/按钮,该文本框/按钮各横跨4列。

1 
8
9
22
23
28
View Code

然后再java代码中采用循环控制添加16个按钮

1 public class GridLayout_index extends AppCompatActivity { 2     GridLayout gridLayout; 3     //定义16个按钮的文本 4     String[] chars=new String[] 5             { 6                     "7","8","9","/", 7                     "4","5","6","*", 8                     "1","2","3","-", 9                     ".","0","=","+"10             };11     @Override12     protected void onCreate(Bundle savedInstanceState) {13         super.onCreate(savedInstanceState);14         setContentView(R.layout.activity_grid_layout_index);15         gridLayout=(GridLayout)findViewById(R.id.root);16         for(int i=0;i
View Code

效果图如下,我承认丑哭了

所以我改了参数,感觉以后这个地方得用一个全能的办法阿。。不然不同的手机不同的分辨率都歪掉了---

bn.setPadding(65,65,65,65);

新的效果图,依旧丑但是整齐了。。。

 

6.绝对布局

因为手机的屏幕大小/分辨率存在较大差异,绝对布局不是一个好思路,我就跳过了

 

下一篇是第二组UI组件:TextView及其子类(我看的是疯狂Android讲义,李刚老师的)

转载于:https://www.cnblogs.com/wangkaipeng/p/5169567.html

你可能感兴趣的文章
java equals 小记
查看>>
爬虫-通用代码框架
查看>>
2019春 软件工程实践 助教总结
查看>>
YUV 格式的视频呈现
查看>>
Android弹出框的学习
查看>>
现代程序设计 作业1
查看>>
在android开发中添加外挂字体
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
多线程实现资源共享的问题学习与总结
查看>>
Learning-Python【26】:反射及内置方法
查看>>
torch教程[1]用numpy实现三层全连接神经网络
查看>>
java实现哈弗曼树
查看>>
转:Web 测试的创作与调试技术
查看>>
python学习笔记3-列表
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
线程androidAndroid ConditionVariable的用法
查看>>
stap-prep 需要安装那些内核符号
查看>>
转载:ASP.NET Core 在 JSON 文件中配置依赖注入
查看>>
socket初识
查看>>