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通过嵌套完成对复杂界面的绘制。

继承层次图

android view的状态 androidsdk中的viewgroup_java


android view的状态 androidsdk中的viewgroup_java_02

基本属性

属性


对应函数

备注

<?xml version="1.0" encoding="utf-8"?>

xml版本和编码格式

xmlns:android

http://schemas.android.com/apk/res/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:

  1. 当排列方向为horizontal时,内部控件就不能将宽度指定为match_parent,否则第一个控件就会将水平方向占满,导致其他控件没有可放置位置。
  2. 同理,当排列方向为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;
    }

运行效果如下:

android view的状态 androidsdk中的viewgroup_android_03

点击后展开菜单项:

android view的状态 androidsdk中的viewgroup_android view的状态_04

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) {

            }
        });