View和ViewGroup
- 什么是View?
- 什么是ViewGroup?
- 继承层次图
- 基本属性
- 常用ViewGroup介绍
- 线性布局
- 相对布局
- 帧布局
- 常用View介绍
- TextView
- Button
- Button点击事件实现
- 在控件添加onClick属性
- 匿名内部类
- 通过Activity继承View.OnClickListener
- EditText
- ImageView
- 其他常用控件
- Menu
- ProgressBar
- AlertDialog
什么是View?
View是最基本的控件,在屏幕上显示为一块矩形区域。所有的控件直接或间接的继承View。View常用于在轮播图程序中显示当前的轮播状态。
什么是ViewGroup?
ViewGroup是可以放置子View和子ViewGroup的容器,通过一定的规律调整内部控件的位置。View和ViewGroup通过嵌套完成对复杂界面的绘制。
继承层次图
基本属性
属性 | 值 | 对应函数 | 备注 |
<?xml version="1.0" encoding="utf-8"?> | xml版本和编码格式 | ||
xmlns:android | XML namespace,避免元素命名冲突 | ||
android:id | @+id/string | 1.@+id/string表示定义一个名为string的id 2. @id/string表示引用名为string的id | |
android:layout_width | 1. match_parent 2.wrap_content 3.自定义 | 1.match_parent表示与父元素一样宽 2.wrap_content表示宽度刚好包裹内容 3.单位dp | |
android:layout_height | 1. match_parent 2.wrap_content 3.自定义 | 同上 | |
android:gravity | top、bottom、left、right、center center_vertical、center_horizontal等 | 指定文字在控件中的对齐方式 | |
android:layout_gravity | 同上 | 指定控件在布局中的对齐方式 | |
android:visibility | gone、visible、invisible | View.setVisibility() | visible可见 invisible不可见但占据原来位置和大小 gone不可见且不占用屏幕 |
android:background | #00000000-#ffffffff或图片填充 | View.setBackground() | |
android:layout_margin | 自定义 | 指定控件在上下左右方向上偏移的距离,也可单独指定 | |
android:padding | 自定义 | 指定控件在上下左右方向上的内边距,也可单独指定 |
常用ViewGroup介绍
线性布局
LinearLayout会将所包含的控件在线性方向上依次排列。
属性 | 值 | 对应函数 | 备注 |
android:orientation | vertical、horizontal | 默认horizontal | |
android:layout_weight | 自定义 | 按比例指定控件大小,使用时将宽度或高度置0 |
Tips:
- 当排列方向为horizontal时,内部控件就不能将宽度指定为match_parent,否则第一个控件就会将水平方向占满,导致其他控件没有可放置位置。
- 同理,当排列方向为vertical时,内部控件就不能将高度指定为match_parent
相对布局
RelativeLayout通过相对定位的方式放置控件,其属性大多看名知意,不介绍。
帧布局
FrameLayout中所有的控件都会默认摆放在布局的左上角,后面的控件有可能会覆盖前面的控件。
常用View介绍
TextView
TextView继承View,用于在界面显示一段文本信息,其属性主要是对文本样式的操作。
属性 | 值 | 对应函数 | 备注 |
android:text | 自定义 | getText()、setText() | 通过alt+enter将值抽出到string.xml中 |
android:textSize | 自定义 | 单位sp | |
android:textColor | #00000000-#ffffffff | RGBA | |
android:singleLine | 自定义 | 指定最大长度 | |
android:ellipsize | end、start、marquee | 文本缩略方式,通常和上面的一起使用 |
其中文本获取和修改:
TextView tv = findViewById(R.id.tv);
Log.d("MainActivity", tv.getText().toString());
tv.setText("java");
Button
Button继承TextView,用于用户的点击,故TextView的属性都可用于Button
属性 | 值 | 对应函数 | 备注 |
android:textAllCaps | true、false | 默认true,对所有英文字母自动进行大写转换 |
Button点击事件实现
在控件添加onClick属性
onClick属性的值对应方法名
android:onClick="click1"
在对应MainActivity添加方法
public void click1(View view) {
}
匿名内部类
找到控件,给按钮设置监听器,创建匿名监听器
Button button=findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
通过Activity继承View.OnClickListener
找到控件将自身设置为监听器,重写接口里的onClick()方法,内部根据按钮id判断
Button button=findViewById(R.id.btn);
button.setOnClickListener(this);
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn:
break;
default:
break;
}
}
EditText
EditText继承TextView,用于输入和编辑文本,其属性主要是对文本内容的控制。
属性 | 值 | 对应函数 | 备注 |
android:hint | 自定义 | 提示文本 | |
android:maxLines | 自定义 | 限制文本最大行数,当超过最大行数时,文本就会向上滚动 |
ImageView
ImageView继承View,用于在界面显示图片,其属性主要是对图片的控制。
属性 | 值 | 对应函数 | 备注 |
android:src | @mipmap/xxx @drawable/xxx | setImageResource() | 图片放在mipmap或drawable |
其中图片的替换:
ImageView iv=findViewById(R.id.iv);
iv.setImageResource(R.drawable.pic2);
其他常用控件
Menu
在res中新建menu文件夹,创建menu.xml,其中item标签对应具体菜单项(二级菜单则嵌套menu),代码如下:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/item1"
android:title="item1"/>
<item
android:id="@+id/item2"
android:title="item2"/>
</menu>
在Activity中重写onCreateOptionsMenu和onOptionsItemSelected方法。
onCreateOptionsMenu用于加载菜单项,通过getMenuInflater()获取MenuInflater再调用inflate方法,第一个参数为待创建的菜单项,第二个参数指定创建后的菜单项将添加到哪个Menu对象中。最后返回ture显示创建后的菜单,false不显示,具体如下:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
onOptionsItemSelected对应菜单中的点击事件,通过item.getItemId()判断点击的是哪一个菜单项,具体如下:
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.item1:
break;
case R.id.item2:
break;
default:
}
return true;
}
运行效果如下:
点击后展开菜单项:
ProgressBar
ProgressBar继承View,用于显示进度条,其主要属性是对进度条的控制。
属性 | 值 | 对应函数 | 备注 |
style | ?android:attr/progressBarStyleHorizontal | 修改为水平进度条 | |
android:max | 自定义 | ||
android:progress | 自定义 | setProgress() | 当前进度 |
AlertDialog
AlertDialog继承Dialog,在当前界面弹出一个对话框,该对话框可置顶于所有界面元素之上,用于提示和警告。创建AlertDialog设置相关属性和点击事件:
AlertDialog.Builder dialog=new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("AlertDialog");
dialog.setMessage("Message");
dialog.setCancelable(false);
dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});