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 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() {@Overridepublic void onClick(View v) {}
});

通过Activity继承View.OnClickListener

找到控件将自身设置为监听器,重写接口里的onClick()方法,内部根据按钮id判断

Button button=findViewById(R.id.btn);
button.setOnClickListener(this);@Overridepublic 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"><itemandroid:id="@+id/item1"android:title="item1"/><itemandroid:id="@+id/item2"android:title="item2"/>
</menu>

在Activity中重写onCreateOptionsMenu和onOptionsItemSelected方法。

onCreateOptionsMenu用于加载菜单项,通过getMenuInflater()获取MenuInflater再调用inflate方法,第一个参数为待创建的菜单项,第二个参数指定创建后的菜单项将添加到哪个Menu对象中。最后返回ture显示创建后的菜单,false不显示,具体如下:

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.menu, menu);return true;}

onOptionsItemSelected对应菜单中的点击事件,通过item.getItemId()判断点击的是哪一个菜单项,具体如下:

@Overridepublic 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() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});

Android基础——View和ViewGroup相关推荐

  1. Android(四)——View和ViewGroup

    文章目录 1. 用户界面概述 2. View类常用属性 3. ViewGroup类 4. UI组件的层次结构 1. 用户界面概述 在Android APP中,所有的用户界面元素都是由View和View ...

  2. 【Android】Android自定义View和ViewGroup知识点汇总

    一.View的绘制流程 onMeasure()->onDraw(). 二.ViewGroup的绘制流程 onMeasure()->onLayout()->onDraw()(一般不重写 ...

  3. Android 让View 和 ViewGroup 同时响应点击或者长按事件

    面试的时候,被问到如何让View 和 其 父View 同时响应长按事件. 我还记得当时自己的回答,子View 里面 处理了长按事件,但是返回了false, 没有处理,然后会继续调用到父View 的长按 ...

  4. Android基础View回顾

    为了提高工作效率,对一些常见View的特殊用法作一下总结. 一.进度条对话框 坑:https://blog.csdn.net/nailsoul/article/details/38870827 (Pr ...

  5. Android 基础 View 系列之 仿IPhone 开关控件

    极力推荐Android 开发大总结文章:欢迎收藏程序员Android 力荐 ,Android 开发者需要的必备技能 自定义View 是Android中常用的方法之一,本章实现类似于IPhone 开关控 ...

  6. Android基础:Android概念

    Android概念 基础概念 第一个Android程序 View 和 ViewGroup Android控件通用属性 基础概念 Android的界面是承载在一个或者多个Activity上. Activ ...

  7. Android自定义View:ViewGroup(三)

    自定义ViewGroup本质是什么? 自定义ViewGroup本质上就干一件事--layout. layout 我们知道ViewGroup是一个组合View,它与普通的基本View(只要不是ViewG ...

  8. 【Android 界面效果10】Android中View,ViewGroup,Window之间的关系

    一.首先说说View和ViewGroup吧 Android系统中的所有UI类都是建立在View和ViewGroup这两个类的基础上的.所有View的子类成为"Widget",所有V ...

  9. Android自定义view之基础知识

    Android自定义view之基础知识 虽然Android已经自带了很多实用的view和layout,加以调教能实现很美观的界面,但是有一些情况下,需要实现特殊的界面效果,比如我们比较熟悉的各种播放器 ...

最新文章

  1. 分享Kali Linux 2016.2第43周虚拟机
  2. codeforces 7.22 F Pairwise Modulo
  3. Qt Creator添加新的自定义向导
  4. spring step 1 : 什么是spring
  5. 机器学习笔记(七)——决策树模型
  6. 整理了一个带语法高亮显示,及到处html功能的richtextbox控件
  7. mysql与mysqli
  8. win7 计算机定时关机脚本,定时关机命令,教您怎么使用命令行定时关机
  9. Vue.2Vue.3项目引入Element-UI教程踩坑
  10. JMeter接口压力测试实战教程
  11. 计算机edp测试是什么测试,五、信息工具--(一)EDP:电子数据处理
  12. 《我与长安城的朝花夕拾》
  13. 华三防火墙web端口_华三防火墙开放端口 华三防火墙怎么登录
  14. 服务器防火墙关闭开机自启解决方案
  15. VS2005宏无法运行的问题(打了补丁MS14-009之后)
  16. 微信小程序猜数字小游戏
  17. 【计算机网络】湖科大学习笔记---数据链路层
  18. 射频微波芯片设计5:电源旁路电容为何选择0.1uF 10uF?
  19. 笔记本电脑wifi图标变成了小地球的解决办法(留日后查看)
  20. 服务器凌晨莫名奇妙自动重启解决方案

热门文章

  1. golang笔记15--go语言单任务版爬虫
  2. 神武3很遗憾未能链接服务器,神武3怎么发布组队信息
  3. 阿里云回应:压根没有“阿里云网盘”,我们做的不是网盘
  4. 那些活跃在互联网上的90后创业者
  5. Python之父,26岁大学毕业,35岁发明Python,却差点因为沉迷编程被退学
  6. NC6 查询工具类 QueryUtil.java
  7. 腾讯工程师盗卖Q币被判谁之责任?
  8. Script.pvf装备属性相关:时装-时装文件格式
  9. 国内程序员怎样竞争 Google 总部的工作机会,需要满足哪些条件?
  10. 物理学四大神兽--薛定谔的猫