布局管理器
常用的布局管理器有:
线性布局管理器(LinearLayout)
将组件按照水平方向或者垂直方向排列。
orientation 方向
vertical 垂直
horizontal 水平
gravity 组件的对齐方式
垂直布局 left center right
水平布局 top center bottom
layout_width 宽度
layout_height 高度
wrap_content 包裹内容
match_parent 与父组件一样
dp 固定大小
layout_weight 权重(比例)
text 文本内容
textSize 文本字体大小
相对布局管理器(RelativeLayout)
参照物:
1.以父布局为参照 属性值是true或false
layout_alignParentTop 与父布局的顶部对齐
layout_alignParentLeft 与父布局的左部对齐
layout_alignParentRight 与父布局的右部对齐
layout_alignParentBottom 与父布局的底部对齐
layout_centerInParent 位于父布局的正中心
layout_centerHorizontal 位于父布局的水平居中
layout_centerVertical 位于父布局的垂直居中
2.以某个组件为参照 属性值是id
layout_toRightOf 位于某组件的右边
layout_toLeftOf 位于某组件的左边
layout_above 位于某组件的上方
layout_below 位于某组件的下方
layout_alignRight 与某组件右对齐
layout_alignLeft 与某组件左对齐
layout_alignTop 与某组件上对齐
layout_alignBottom 与某组件下对齐
layout_alignBaseLine 与某组件水平线对齐
帧布局管理器(FrameLayout)
foreground 前景图片
foregroundGravity 前景图片的对齐方式
表格布局管理器(TableLayout)
<TableRow /> 表格的行
表格布局的属性:
collapseColumns 需要被隐藏的序列号
shrinkColumns 允许被收缩的列号
stretchColumns 允许被拉伸的列号
单元格的属性:
layout_column 组件位于的列数 ,默认从0开始
layout_span 合并的列数
网格布局管理器(GridLayout)
orientation 方向
columnCount 网格布局的列数
rowCount 网格布局的行数
layout_column 组件位于第几列
layout_raw 组件位于第几行
layout_columnSpan 合并列
layout_rowSpan 合并行
layout_columnWeight 列权重
layout_rowWeight 行权重
约束布局管理器(ConstraintLayout)
常用的UI组件
一、文本类组件
文本框TextView
属性:
text 文本内容
textSize 文本字体大小
textColor 文本颜色
maxLength 文本最大长度
编辑框EditText
inputType 输入类型
hint 提示文本
drawableLeft 在左方放入图片
消息提示框
Toast.makeText(当前的上下文(MainActivity.this),输出的文本,提示的时间).show();
二、按钮类组件
普通按钮Button
按钮的点击事件
button.setOnClickListener(new new View.OnClickListener(){...});
<Button
android:onClick="clickMethod"
android:text="一键登录"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
//定义点击事件
public void clickMethod(View v){
Button button = (Button) v;
Toast.makeText(MainActivity.this,button.getText().toString(),Toast.LENGTH_LONG).show();
}
更改按钮的外观:
1、先在drawable文件--》创建.xml文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--填充的颜色-->
<!--<solid android:color="#80AABD"/>-->
<!-- 设置4个角的弧形半径-->
<corners android:radius="10dp"/>
<!-- 设置文字与按钮边界的间隔-->
<padding android:bottom="10dp"
android:top="10dp"
/>
<!-- 渐变-->
<gradient android:endColor="#729F3E" android:startColor="#C7D6B6"/>
</shape>
2、在布局文件中通过背景引用进来
<Button
android:background="@drawable/btn_shape"
/>
图片按钮ImageButton
<ImageButton
src="图片路径"
scaleType="图片缩放方式">
若想要图片按钮周围没有自带的按钮颜色,需设置
android:background="#0000" 或
android:background="@null"
单选按钮
<RadioGroup>
<RadioButton>
获取单选按钮的选中的值:
在改变单选按钮组的值时获取:
//方式一:在改变单选按钮组的值时获取:
/*//1.根据id找到单选按钮组对象
RadioGroup group = findViewById(R.id.question);
//给按钮组对象设置监听事件
group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
//根据被选中的id找到单选按钮
RadioButton button = findViewById(i);
//获取单选按钮的文本
String answer = button.getText().toString();
Toast.makeText(MainActivity.this,answer,Toast.LENGTH_LONG).show();
}
});*/
单击第三方按钮时获取:
//方式二:单击第三方按钮时获取
//1.根据id找到单选按钮组对象
RadioGroup group = findViewById(R.id.question);
//根据id找到按钮
Button button = findViewById(R.id.confirm);
//给按钮设置点击事件
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (int i=0;i<group.getChildCount();i++){//getChildCount()获取单选按钮组中单选按钮的总个数
//此时的i代表每一个单选按钮的下标
RadioButton radio = (RadioButton)group.getChildAt(i);//根据下标获取每一个单选按钮
//判断当前单选按钮是否被选中
if (radio.isChecked()){
//获取文本
String answer = radio.getText().toString();
if (answer.equals("100年")){
Toast.makeText(MainActivity.this,"回答正确",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(MainActivity.this,"回答错误",Toast.LENGTH_LONG).show();
}
}
}
}
});
复选按钮
CheckBox
三、进度条类组件
进度条ProgressBar
<ProgressBar
android:max="200"
android:progress="100"
android:progressDrawable="@drawable/img"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
max:进度的最大值
progress:当前进度值
progressDrawable:进度条的图片
style:进度条的样式
@style/Widget.AppCompat.ProgressBar.Horizontal
水平长条
?android:attr/progressBarStyleLarge
圆圈
拖动条SeekBar
<SeekBar
android:id="@+id/seekBar"
android:max="360"
android:progress="0"
android:thumb="@mipmap/ic_launcher"
android:progressDrawable="@drawable/bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
max 拖动条的最大值
progress 当前值
thumb 拖动按钮的样式
progressDrawable 拖动条的样式
设置监听事件
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
//当拖动条的值更改时
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
//开始触摸拖动条时
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//停止触摸拖动条时
}
});
星级评分条RatingBar
<RatingBar
android:id="@+id/rating"
android:isIndicator="false"
android:numStars="5"
android:rating="5"
android:stepSize="1"
android:progressDrawable="@drawable/bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
isIndicator 是否允许用户进行更改(true禁止更改,false可以更改)
numStars 星星的总个数
rating 默认星星数
stepSize 星星每次更改的个数
progressDrawable 星星的样式
四、图像视图
<ImageView
src="图片路径"
adjustViewBounds="true"
maxWidth="最大的宽度"
maxHeight="最大的高度"
tint="着色"
scaleType="缩放方式"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
五、列表类组件
1.下拉列表
<Spinner
entries="文字数组" />
通过Java代码加载数组
Spinner spinner = findViewById(R.id.spinner);
//数据
String[] type = new String[]{"全部","推荐","电视剧","电影","综艺","动漫"};
//数组适配器
ArrayAdapter adapter = new ArrayAdapter(MainActivity.this,
android.R.layout.simple_spinner_dropdown_item,type);
//给下拉列表设置适配器
spinner.setAdapter(adapter);
2.列表视图
<ListView
android:divider="@drawable/hr"
android:dividerHeight="10dp"
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
divider分割线的样式
dividerHeight 分割线的高度
步骤:
第一:先在主界面编写ListView视图
第二:新建layout布局,实现每一行的模板界面
第三:在Java代码中使用简单适配器SimpleAdapter加载数据
参考代码:
//根据id找到ListView
ListView listView = findViewById(R.id.listView);
//数据
String[] type = new String[]{"全部","推荐","电视剧","电影","新闻","动漫"};
//图片的路径
int[] imgId = new int[]{R.drawable.all,R.drawable.like,
R.drawable.tv,R.drawable.movies,
R.drawable.news,R.drawable.dongman};
//将数组数据转换到List数据 泛型 Map映射
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
for (int i=0;i<type.length;i++){
Map<String,Object> map = new HashMap<String,Object>();
map.put("img",imgId[i]);
map.put("name",type[i]);
list.add(map);
}
//简单适配器
SimpleAdapter adapter = new SimpleAdapter(this,list,
R.layout.main,new String[]{"img","name"},
new int[]{R.id.img,R.id.tv});
//给列表视图设置适配器
listView.setAdapter(adapter);