从0系统学Android--3.2四种基本布局
从0系统学Android--3.2四种基本布局
本系列文章目录:更多精品文章分类
本系列持续更新中....
3.3 系统控件不够用?创建自定义控件
上一节我们学习了 Android 中的一些常用的控件和布局的用法。这里我们来看一下他们的关系图
可以看到说有的控件都是直接或者间接继承 View   ,所有的布局都是直接或者间接继承 ViewGroup 。
View 是 Android 中最基本的一种 UI 组件,它可以在屏幕上绘制一块矩形区域,并且能够响应这块区域的各种事件,因此,我们使用的各种控件其实就是在 View 的基础的又添加了一些特有的功能。而 ViewGroup 是一种特殊的 View ,它可以包含很多子 View 和 子 ViewGroup,是一个用于放置控件和布局的容器。
那么当系统给我提供的控件不能满足我们的需要的时候,我们也可以自己创建符合我们自己需求的控件。
3.4.1 引入布局
我们知道现在的应用程序几乎在界面顶部都有一个标题栏,虽然 Android 系统已经给我们提供了,但是这里我们不用它,我们自己创建一个。
我们自己创建一个布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    android:orientation="horizontal">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/title_back"
        android:background="@color/colorAccent"
        android:layout_gravity="center"
        android:text="back"
        android:textAllCaps="false"
        android:textColor="#FFFFFF"/>
    <TextView
        android:layout_gravity="center"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:textSize="24sp"
        android:layout_height="wrap_content"
        android:text="Text Title"
        android:id="@+id/title_text"
        android:gravity="center"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="5dp"
        android:background="@color/colorPrimaryDark"
        android:text="Edit"
        android:textAllCaps="false"/>
</LinearLayout>
就这样这个简单的标题栏布局就写好了,那么如何使用呢?很简单,在需要使用的布局中。
   <include layout="@layout/title"/>
就添加上面一句话就把刚刚的布局引入了。
使用的时候不要忘了隐藏自带的标题栏
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ui);
        ActionBar actionBar = getSupportActionBar();
        if (actionBar !=null){
            actionBar.hide();
        }
        initView();
    }
3.4.2 创建自定义控件
引入布局的技巧确实解决了重复编写布局代码的问题,但是布局中有一些控件还需要响应事件,这种情况就需要我们来自定义控件了。
新建 TitleLayout 继承自 LinearLayout,让它作为我们自定义标题栏的控件。
public class TitleLayout extends LinearLayout {
    public TitleLayout(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.title,this);
        Button btBack = findViewById(R.id.title_back);
        Button btEdit = findViewById(R.id.bt_edit);
        btBack.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                ((Activity)getContext()).finish();
            }
        });
        btEdit.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // 你自己想做的事情
            }
        });
    }
}
好了这样一个标题栏自定义控件就完成了。
从0系统学Android--3.2四种基本布局的更多相关文章
- 从0系统学Android--4.1探究碎片
		从0系统学Android--4.1探究碎片 本系列文章目录:更多精品文章分类 本系列持续更新中.... 初级阶段内容参考<第一行代码> 第四章:手机平板要兼顾--探究碎片 平板电脑和手机最 ... 
- 从0系统学Android--3.7 聊天界面编写
		从0系统学Android--3.7 聊天界面编写 本系列文章目录:更多精品文章分类 本系列持续更新中.... 3.7 编写界面的最佳实践 前面学习了那么多 UI 开发的知识,下面来进行实践,做一个美观 ... 
- 从0系统学Android-2.5更多隐式Intent用法
		本系列文章,参考<第一行代码>,作为个人笔记 更多内容:更多精品文章分类 从0系统学Android-2.5更多隐式Intent用法 上一节中我们学习了通过隐式 Intent 来启动 Act ... 
- 从0系统学Android--3.6 RecyclerView
		从0系统学Android--更强大的滚动控件---RecyclerView 本系列文章目录:更多精品文章分类 本系列持续更新中.... 参考<第一行代码> 首先说明一点昨天发了一篇关于 L ... 
- 从0系统学Android--3.5 最常用和最难用的控件---ListView
		从0系统学Android-- 3.5 最常用和最难用的控件---ListView 本系列文章目录:更多精品文章分类 本系列持续更新中.... 3.5 最常用和最难用的控件---ListView Lis ... 
- 从0系统学Android--3.1编写UI界面
		从0系统学Android--3.1编写UI界面 本系列文章目录:更多精品文章分类 本系列持续更新中.... 界面设计和功能开发同样重要,界面美观的应用程序不仅可以大大增加用户粘性,还能帮我们吸引到更多 ... 
- 从0系统学Android--2.6 Activity 的最佳实践
		从0系统学Android--2.6 Activity 的最佳实践 本系列文章目录:更多精品文章分类 本系列持续更新中.... 实践中的技巧 2.6.1 知晓当前是在哪个 Activity 这个其实很简 ... 
- 从0系统学Android--5.2 发送广播
		从0系统学Android--52 发送广播 本系列文章目录:更多精品文章分类 本系列持续更新中.... 初级阶段内容参考<第一行代码> 5.3 发送自定义广播 前面已经学习了如何接受广播了 ... 
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
		SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 在SQLite中, ... 
随机推荐
- Python超简单的爬取网站中图片
			1.首先导入相关库 import requests import bs4 import threading #用于多线程爬虫,爬取速度快,可以完成多页爬取 import os 2.使用bs4获取htm ... 
- windows下RocketMQ下载安装教程
			一.下载(原文链接:http://www.studyshare.cn/software/details/1183/0 ) 1.官网下载:下载地址 2.百度网盘下载:下载地址 提取码:0g5a ja ... 
- 利用python进行微信好友分析
			欢迎python爱好者加入:学习交流群 667279387 本文主要利用python对个人微信好友进行分析并把结果输出到一个html文档当中,主要用到的python包为itchat,pandas,py ... 
- Java修炼——多维数组
			二维数组就是存储一维数组(内存地址/引用)的数组 二维数组的实始化 1) int intA[][]={{1,2},{2,3},{3,4,5}}; 2) int [][] intB=new int[3] ... 
- CodeForces1000A- Codehorses T-shirts
			A. Codehorses T-shirts time limit per test 2 seconds memory limit per test 256 megabytes input stand ... 
- rails gem ransack 之模糊搜索
			gem 'ransack' eq: "等于" eq_any: "等于任意值" eq_all: "等于所有值" not_eq: "不 ... 
- Vue如何实现数据响应的
			参考博客:https://medium.com/vue-mastery/the-best-explanation-of-javascript-reactivity-fea6112dd80d 翻译博客: ... 
- 分布式事务解决方案,中间件 Seata 的设计原理详解
			作者:张乘辉 前言 在微服务架构体系下,我们可以按照业务模块分层设计,单独部署,减轻了服务部署压力,也解耦了业务的耦合,避免了应用逐渐变成一个庞然怪物,从而可以轻松扩展,在某些服务出现故障时也不会影响 ... 
- CentOS7.2下部署zabbix4.0
			整体部署采用centos7+php+apache+mariadb 基础环境配置优化 1. 关闭防火墙 [root@monitor_53 ~]$ systemctl stop firewalld [ro ... 
- 【1封新邀请】想跟谷歌、七牛、kyligence等大佬面对面的交流吗?
			2020年1月4日-5日,"ECUG Con 2020"大会将于杭州举行.本次大会以"ECUG For Future"为主题,围绕五大技术主题,邀请到来自七牛云 ... 
