设计和代码切换,一般情况下,我们 UI 布局都是先拖再细调整,也就是先用设计默认拖出一个大概的布局,然后用代码来微调

一、常见的布局

1. LinearLayout 线性布局

LinearLayout 几个重要的 XML 属性

xml 属性    说明

android:id    为组件设置一个资源 id,然后在 Java 中可以通过 findViewById(id) 找到该组件

android:background    为组件设置一个背景图片或者背景色

android:layout_width    布局的宽度,通常不直接写数字值,而是使用

wrap_content 组件实际大小

fill_parent/match_parent 填满父容器

android:layout_height    同 layout:layout_width

android:baselineAligned    该属性为 false,将会阻止布局管理器与它的子元素基线对其

android:divider    设置垂直布局时,两个按钮之间的分隔条

android:gravity    设置布局管理器内组件的对齐方式,值可以是

top/button/left/right/center_vertical/fill_vertical...

android:measureWithLargestChild    当属性设置为true时,所有带权重的子元素都会具有最大元素的最小尺寸

android:orientation    设置布局管理器内组件的排列方式,值可以是

vertical (默认)

horizontal

android:layout_gravity="left"    位于LinearLayout的最左侧

2. RelativeLayout 相对布局

重点:相对布局 (RelativeLayout) 以 父容器 或者 兄弟组件 参考+margin +padding 来设置组件的显示位置

1. 基本属性

XML 属性    说明

android:gravity    设置容器内组件的排序方式

android:ignoreGravity    如果设置改属性为 true,将忽略 android:gravity

android:gravity 本元素所有子元素的重力方向,处于怎样子的位置 ,有:

top 将对象放在其容器的顶部,不改变其大小. 

bottom 将对象放在其容器的底部,不改变其大小. 

left将对象放在其容器的左侧,不改变其大小. 

right将对象放在其容器的右侧,不改变其大小. 

center_vertical 将对象纵向居中,不改变其大小. 

android:layout_gravity 和 android:gravity 的区别:

比如说对于Button控件:


android:layout_gravity 表示button在界面上的位置

android:gravity表示button上的字在button上的位置。


2.根据父容器定位属性:

XML 属性    说明

android:layout_alignParentLeft    左对齐父容器

android:layout_alignParentRight    右对齐父容器

android:layout_alignParentTop    顶部对齐父容器

android:layout_alignParentBottom    底部对齐父容器

android:layout_centerHorizontal    在父容器中水平居中

android:layout_centerVertical    在父容器中垂直居中

android:layout_centerInParent    在父容器的居中位置

各个属性示意图如下:

超全的Android组件及UI框架_常用属性

3. 根据兄弟组件定位属性

超全的Android组件及UI框架_android_02

兄弟组件定位就是处于同一层次容器的组件

超全的Android组件及UI框架_常用属性_03

图中的组件1,2就是兄弟组件了,

如对于组件2 :android:layout_right = "@id/组件1"

而组件3与组件1或组件2并不是兄弟组件,所以组件3 不能通过 组件1或 2来进行定位

4. 设置外边距(偏移)属性

超全的Android组件及UI框架_常用属性_04

上面这些属性用于设置组件对本来位置的偏移量

超全的Android组件及UI框架_常用属性_05

虚线框是组件2 本来的位置,如果设置了组件上边和左边的边距,则位置会发生一定的偏移,向右下偏移

5. 设置内边距(填充)属性

超全的Android组件及UI框架_常用属性_06

上面这些属性用于设置组件的内边距,内边距主要用于设置组件边框和子组件之间的间隙

超全的Android组件及UI框架_常用属性_07

6. 居中设置

android:layout_centerHorizontal 如果为true,将该控件的置于水平居中;
android:layout_centerVertical 如果为true,将该控件的置于垂直居中;
android:layout_centerInParent 如果为true,将该控件的置于父控件的中央;


二、常用控件

 1. TextView 文本框

TextView 继承于 View

1.1 常用属性

超全的Android组件及UI框架_android_08

跑马灯效果:

超全的Android组件及UI框架_android_09

识别链接效果:

​android:autoLink​​ 属性用于设置 TextView 是否识别链接类型和设置可识别的链接类型

​android:autoLink​​ 的值有以下几种

超全的Android组件及UI框架_常用属性_10

设置 TextView 字间距

属性 ​​android:textScaleX​​ 控制字体水平方向的缩放,默认值 1.0f,类型值是 float


如: setScaleX(2.0f);


设置 TextView 行间距

Android TextView 默认显示中文时会比较紧凑,为了让每行保持的行间距,可以设置如下属性

超全的Android组件及UI框架_常用属性_11

如:setLineSpacing(1.5) 

1.2 常用方法


void append(CharSequence text); //增加文字

CharSequence getText(); // 获取文章文字

int getTextSize(); 

int length();


2. EditText 输入框

EditText 继承于 TextView

2.1 常用属性

超全的Android组件及UI框架_常用属性_12


​android:inputType​​ :对输入文本类型进行限制

文本类型,多为大写、小写和数字符号

android:inputType="none"  
android:inputType="text"
android:inputType="textCapCharacters"
android:inputType="textCapWords"
android:inputType="textCapSentences"
android:inputType="textAutoCorrect"
android:inputType="textAutoComplete"
android:inputType="textMultiLine"
android:inputType="textImeMultiLine"
android:inputType="textNoSuggestions"
android:inputType="textUri"
android:inputType="textEmailAddress" // 邮箱类型
android:inputType="textEmailSubject"
android:inputType="textShortMessage"
android:inputType="textLongMessage"
android:inputType="textPersonName"
android:inputType="textPostalAddress"
android:inputType="textPassword" // 密码
android:inputType="textVisiblePassword"
android:inputType="textWebEditText"
android:inputType="textFilter"
android:inputType="textPhonetic"

 数值类型

android:inputType="number"  
android:inputType="numberSigned"
android:inputType="numberDecimal"
android:inputType="phone" // 拨号键盘
android:inputType="datetime"
android:inputType="date" // 日期键盘
android:inputType="time" // 时间键盘

2.2 常用方法

TextView 的方法,EditText 都有

.setText("success");

3. ImageView 图像视图

3.1 常用属性

ImageView 有 2中属性,分为为: src, backgroud,他们之间的区别是:



  1. background 通常指的都是 背景, 而 src 指的是 内容
  2. 当使用 src 填入图片时, 是按照图片大小直接填 ,不会进行拉伸。而使用 background 填入图片,则是会根据 ImageView 给定的宽度来进行 拉伸


 设置缩小放大的大小

超全的Android组件及UI框架_xml_13


3.2 常用方法

    @Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button:
imageView.setImageResource(R.drawable.image_2); // 修改图片
break;
default:
break;
}
}

4. Button 按钮

4.1 常用属性

1. Button 继承自 TextView ,所以可以 使用 TextView 的那些属性

2. 我们可以将 Button 的 android:background 属性设置为该 drawable 资源即可轻松实现按下 按钮时不同的按钮颜色或背景

下表列出了可以设置的属性

超全的Android组件及UI框架_常用属性_14

在 ​​res/drawable​​​ 目录下新建一个按钮状态的资源文件 ​​btn_bg.xml​

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/btn_pressed"/>
<item android:state_enabled="false" android:drawable="@drawable/btn_disabled"/>
<item android:drawable="@drawable/btn_normal"/>
</selector>

 4.2 监听方法

1. 一个按钮的监听方法


button.setOnClickListener(new OnClickListener() {             @Override             public void onClick(View v) {             //点击Button会改变edittext的文字为"点击了Button"             edittext.setText("点击了Button");             }         }); 


2. 继承于接口 OnClickListener 的监听方法

public class MainActivity extends Activity implements OnClickListener {
private EditText edittext;
private Button button;
private Button button2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edittext=(EditText) findViewById(R.id.edit_text);
button = (Button) findViewById(R.id.button);
button2 = (Button) findViewById(R.id.button2);
button.setOnClickListener(this);
button2.setOnClickListener(this);
}

@Override
//用switch区分是哪个id
public void onClick(View v) {
switch (v.getId()){
case R.id.button:
edittext.setText("点击了Button");
break;
case R.id.button2:
edittext.setText("点击了Button2");
break;
}
}
}


5. RadioButton 单选按钮

5.1 常用属性

RadioButton 单选按钮就是只能够选中一个,所以我们需要把 RadioButton 放到 RadioGroup 按钮组中,从而实现单选功能

RadioButton 继承自 Button,所以拥有 Button 的所有公开属性和方法

RadioButton 只有两个状态,选中与未选中,所以也就只有一个属性是最重要的,那就是 android:checked

android:checked

设置或获取 ​​RadioButton​​ 的选中状态

如果 RadioButton 未选中,那么点击它可以让它选中,但反过来是不可以的,就是不能从选中状态到未选中状态

5.2 监听方法

RadioGroup 是单选组合框,用于 将 RadioButton 框起来。在多个 RadioButton被 RadioGroup 包含的情况下,同一时刻只可以选择一个 RadioButton,并用 setOnCheckedChangeListener 来对 RadioGroup 进行监听。

//调用setOnCheckedChangeListener来对RadioGroup进行监听的代码
radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if(checkedId == radiobutton1.getId()){
textView.setText("北京");
}else if(checkedId == radiobutton2.getId()){
textView.setText("上海");
}
}
});


6. RadioGroup 单选按钮组

6.1 常用属性

要实现 RadioButton 的 单选功能,需要把所有的 RadioButton 放到 RadioGroup 里面

 用于将几个 RadioButton 组在一起形成单选按钮组,实现单选功能,也就是选中一个,会取消其它选项的选中

​RadioGroup​​​ 只提供了一个 XML 属性 ​​android:checkedButton​​ 用于指定初始化时选中的 ID

属性

说明

android:checkedButton

初始化时选中的选项 ID (​​android:id​​)


​RadioGroup​​ 提供了很多方法用于选中或者获取选中的选项 ID ,下面列出常用的几个

方法

说明

check(int id)

根据 id 选中某个选项

clearCheck()

清除所有选项的选中状态,也就时一个都没选中

getCheckedRadioButtonId()

获取选中的选项 id

事件

说明

OnCheckedChangeListener

当 ​​RadioGroup​​ 中的某个选项被选中时触发

7. CheckBox 复选框


7.1 常用属性

Android CheckBox (复选框) 继承自 Button ,可以说是只有两种状态的按钮 (选中或未选中状态)

可以把多个 CheckBox 放在一起实现同时选中多项,但是,记住,它们之间没有任何关系,一个的选中并不会影响另一个选中或者不选中


CheckBox 除了从 Button 继承而来的属性外,没有自己的属性,但从 CompoundButton 继承了一个属性 android:checked 用于表示是否选中

属性

说明

android:checked

设置或者获取 ​​CheckBox​​ 是否选中


7.2 监听方法

​CheckBox​​ 提供了几个方法和事件用于设置或者获取自身是否选中状态

方法

说明

isChecked()

判断自身是否选中

setChecked(boolean checked)

设置自身是否选中状态


事件

说明

OnCheckedChangeListener

选中状态改变监听器,当自身选中状态变化时会触发这个事件


8. ToggleButton 开关按钮

8.1 常用属性

ToggleButton (开关按钮) 允许我们在两个状态之间切换,有点类似于电灯的开关

超全的Android组件及UI框架_android_15

​ToggleButton​​​ 和 ​​CheckBox​​​ 一样都继承自 ​​CompoundButton​​​ ,所以都有 ​​Button​​​ 的属性和方法,又有 ​​CompoundButton​​​ 的属性 ​​android:checked​

超全的Android组件及UI框架_常用属性_16

8.2 监听方法

​ToggleButton​​ 提供了一些方法用来改变或获取自身的状态和开关时的文本

超全的Android组件及UI框架_常用属性_17

9. Switch 开关

9.1 常用属性

允许我们在两个状态之间切换,有点类似于现在流行的滑动解锁

超全的Android组件及UI框架_常用属性_18

Switch (开关) 也继承自 Button 和 ​CompoundButton​,所以拥有它们的属性、方法和事件

不过 ​​Switch​​ 也拥有自己的属性,而且特别的多

超全的Android组件及UI框架_xml_19

9.2 监听方法

​Switch​​ 提供了一些方法用来改变或获取自身的状态和开关时的文本

超全的Android组件及UI框架_xml_20

10. ProgressBar 进度条

10.1 常用属性

 ProgressBar(进度条) 可以用来显示一个操作的进度,一般用于比较耗时的地方,比如下载进度条,比如加载等待

ProgressBar 有两种模式,确定性 和 不确定性的 ,有两种外观模式,条形 和 圆形,所以总共有四种,这涉及到两个属性

超全的Android组件及UI框架_android_21

 其他属性

超全的Android组件及UI框架_android_22

10.2 监听方法

超全的Android组件及UI框架_xml_23

11. SeekBar ( 拖动条 ) 控件

11.1 常用属性

SeekBar ( 拖动条 ) 控件一般用于音乐播放器或者视频播放器的音量控制或者播放进度控制

超全的Android组件及UI框架_android_24

SeekBar 是 ​​ProgressBar​​ 的子类,所以 ProgressBar的属性都可以用

SeekBar 有以下几个简单的属性

超全的Android组件及UI框架_xml_25

11.2 监听方法

SeekBar 内置了 SeekBar.OnSeekBarChangeListener 事件

该事件会触发三个方法

超全的Android组件及UI框架_xml_26

完毕。