Android基础——View和ViewGroup

什么是View?

View是最基本的控件,在屏幕上显示为一块矩形区域。所有的控件直接或间接的继承View。View常用于在轮播图程序中显示当前的轮播状态。

什么是ViewGroup?

ViewGroup是可以放置子View和子ViewGroup的容器,通过一定的规律调整内部控件的位置。View和ViewGroup通过嵌套完成对复杂界面的绘制。

继承层次图

在这里插入图片描述
在这里插入图片描述

基本属性

属性对应函数备注
<?xml version="1.0" encoding="utf-8"?>xml版本和编码格式
xmlns:androidhttp://schemas.android.com/apk/res/androidXML namespace,避免元素命名冲突
android:id@+id/string1.@+id/string表示定义一个名为string的id
2. @id/string表示引用名为string的id
android:layout_width1. match_parent
2.wrap_content
3.自定义
1.match_parent表示与父元素一样宽
2.wrap_content表示宽度刚好包裹内容
3.单位dp
android:layout_height1. match_parent
2.wrap_content
3.自定义
同上
android:gravitytop、bottom、left、right、center
center_vertical、center_horizontal等
指定文字在控件中的对齐方式
android:layout_gravity同上指定控件在布局中的对齐方式
android:visibilitygone、visible、invisibleView.setVisibility()visible可见
invisible不可见但占据原来位置和大小
gone不可见且不占用屏幕
android:background#00000000-#ffffffff或图片填充View.setBackground()
android:layout_margin自定义指定控件在上下左右方向上偏移的距离,也可单独指定
android:padding自定义指定控件在上下左右方向上的内边距,也可单独指定

常用ViewGroup介绍

线性布局

LinearLayout会将所包含的控件在线性方向上依次排列。

属性对应函数备注
android:orientationvertical、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-#ffffffffRGBA
android:singleLine自定义指定最大长度
android:ellipsizeend、start、marquee文本缩略方式,通常和上面的一起使用

其中文本获取和修改:

TextView tv = findViewById(R.id.tv);
Log.d("MainActivity", tv.getText().toString());
tv.setText("java");

Button

Button继承TextView,用于用户的点击,故TextView的属性都可用于Button

属性对应函数备注
android:textAllCapstrue、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) {

            }
        });
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值