Android中所有的UI控件都继承自View,在开始介绍View的基本属性之前,先学习一下Android是如何添加一个视图控件的。
在iOS中往某个界面上添加一个控件有两种方式:
1.使用xib或者storyboard,往可视化界面上拖一个控件(比如UIlabel,然后设置好frame和内容)即可。
2.使用代码创建一个UIlabel实例,然后调用[addSubView:]将label实例添加到界面的view上即可。

而Android其实也有两种方式:
1.也是在某个Activity对应的xml文件的Design模式上,拖一个控件上去(其实,我们更多的是在xml的Text的模式下,手写xml文件,添加一个控件对应的xml)。
2.在Activity对应的java文件中,创建一个控件实例,然后添加到该Activity对应的xml文件上即可。

后面会有代码和截图介绍这两种创建方式。

控件的id

如果我们需要在代码逻辑中修改某个控件的属性,那么用xml添加完视图后,我们就需要在.java文件中获取这个控件,而界面上可能会有很多个同类型的控件,那么我们就需要给每一个控件设置一个id。

而.java中获取该控件的代码是这样的:

Button testButton = (Button) findViewById(R.id.testBtn);

控件的宽高

控件宽高的值,实际上是两种状态(wrap_content、match_parent)和固定值。
wrap_content 表示控件的宽或高是:内容的所占的宽或高。
match_parent 表示控件的宽或高等于父视图的宽或高(低版本的Android叫fill_parent)。
固定值,比如100dp、150dp这样的固定数据。

// 表示控件的宽高为内容的宽和高android:layout_width="wrap_content"android:layout_height="wrap_content"// 表示控件的宽高为父视图的宽高android:layout_width="match_parent"android:layout_height="match_parent"// 控件的宽为200,高为100android:layout_width="200dp"android:layout_height="100dp"

注意点:
px(像素):一般表示分辨率,比如图片的分辨率是100x100px。再比如现在的手机大多都是1080*1920,但是如果我们设置控件的宽高为px的话,就没办法适配其他型号的手机了,所以现在很少用px来表示控件的宽高了。
dp:在介绍dp前要先介绍一下屏幕像素密度:相同尺寸情况下,分辨率越高,屏幕越清晰,即屏幕像素密度越大。屏幕像素密度指每英寸上面的像素点个数,单位是dpi,是“dot per inch”的缩写。
而dp即密度无关像素:单位dip或dp,是Density Independent Pixels的缩写,Android规定,在屏幕像素密度为160dpi的情况下,1dp=1px。而在像素密度为320dpi的情况下,1dp=2px,以此类推。计算公式:1dp=(像素密度/160dpi)*1px。这个dp就类似iOS中宽高的概念了,不同的设备1dp所表示的分辨率是不一样的,设置宽高为dp时,就能更好的适配不同尺寸的屏幕。
sp:主要用来设置文本字体的大小。

控件的背景

Android的控件背景可以是16进制的颜色,也可以是图片。

// 用16进制颜色设置控件背景android:background="#F00"

知识点:
Android中颜色的表示法有很多种,比如RGB、ARGB、RRGGBB、AARRGGBB。

控件的可见性

该属性有三种状态值:gone、visible、invisible。

android:visibility="invisible"

gone 与invisible的区别是:gone 表示控件不可见,也不会占任何的位置,也不会有任何响应。
而invisible表示控件虽然不可见,但是会占据它的宽高位置。

举例:

控件的外边距

学习过HTML的都会知道CSS里的盒模式有个外边距和内边距。
外边距可以设置视图距离父视图上下左右的距离。
内边距可以设置视图内部内容距离自己边框上下左右的距离。
Android 的控件布局其实也用的是这个盒模式。

如果距离父视图上下左右的外边距相同,可以这么设置:

android:layout_margin="10dp"

当然,我们也可以单独的设置某个外边距:

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

API26,也就是Android 8.0之后新添加了这两个属性

android:layout_marginHorizontal="10dp"android:layout_marginVertical="10dp"

控件的内边距

上面已经介绍过内边距的含义了,这里就直接介绍用法吧。

统一设置上下左右内边距:

android:padding="5dp"

各自设置内边距:

android:paddingTop="5dp"android:paddingBottom="5dp"android:paddingLeft="5dp"android:paddingRight="5dp"

当然API26开始也设置了两个新属性:

android:paddingHorizontal="5dp"android:paddingVertical="5dp"

点击事件

其实,Android所有的UI控件都有点击事件,因为这个事件是基类View就具有的。

android:onClick="test"

而这里的test是方法名,需要定义在对应的Activity内,而且必须定义公有方法。

public void test(Button btn) {    // 这里执行点击事件逻辑}

代码创建控件,并添加到界面视图上

使用XML创建视图,并获取某个控件的方式,在上面讲id这个基本属性时已经介绍过了。

这里补充一下用代码创建,并添加到视图上的方式:

// 创建一个文本控件TextView textView = new TextView(this);textView.setTextSize(40);textView.setText("Hello Android");// 获取控件的布局对象LinearLayout.LayoutParams lp = textView.getLayoutParams();lp.width = 200;lp.width = 50;lp.setMargins(5,5,5,5);textView.setLayoutParams(lp);LinearLayout linearLayout = (LinearLayout) findViewById(R.id.main_content);// 添加到XML视图上linearLayout.addView(textView);

更多相关文章

  1. android 简析自定义布局、布局的执行流程(http://blog.sina.com.c
  2. android studio常用窗口简介
  3. Android(安卓)Studio VS Eclipse (还在用Eclipse?你OUT了!)
  4. Android中的RecyclerView的使用(一)
  5. MVC模式
  6. Android分类列表之ListView-ViewType实现
  7. [置顶] Android开发-分析ViewGroup、View的事件分发机制、结合职
  8. 浅析Android(安卓)App的相对布局RelativeLayout
  9. Android用GridLayout网格布局实现简单的计算器界面

随机推荐

  1. Android的屏幕切换动画—左右滑动切换
  2. android网格布局
  3. android 流式布局 和 RadioGroup自动换行
  4. LCD驱动及Framebuffer相关
  5. Android中级篇之基于百度地图Android(安
  6. android的Touch事件解析(dispatchTouchEve
  7. Android 通过蓝牙控制小车源代码+视频
  8. Parcelable接口的使用(跨进程,Intent传输)
  9. Android(安卓)SDK 更新时连接出现“https
  10. Android 出错提示:Emulator without GPU e