安卓自定义控件

news2025/1/23 7:02:36

文章目录

      • 引入布局
      • 创建自定义控件

引入布局

  首先创建一个项目,创建一个空的活动。然后右键单击res/layout创建一个Layout Resource File文件,取名title.xml。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <Button
        android:id="@+id/title_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="5dp"
        android:text="Back"
        android:textColor="#fff" />
    <TextView
        android:id="@+id/title_text"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:gravity="center"
        android:text="Tittle Text"
        android:textColor="#000"
        android:textSize="24sp" />
    <Button
        android:id="@+id/title_edit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="5dp"
        android:text="Edit"
        android:textColor="#fff" />
</LinearLayout>

  写好自定义布局之后进行引入。

<?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="match_parent" >
    <include layout="@layout/title" />
</LinearLayout>

  引入布局文件之后,修改活动文件。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 新加代码
        ActionBar actionbar = getSupportActionBar();
        if(actionbar != null){
            actionbar.hide();
        }
        // ---------------
    }
}

  调用getSupportActionBar()方法来获得ActionBar的实例,然后再调用它的hide()方法将标题栏隐藏起来。

在这里插入图片描述

创建自定义控件

  先创建一个TitleLayout文件,把它与title.xml文件关联起来。

public class TitleLayout extends LinearLayout {
    public TitleLayout(Context context, AttributeSet attrs){
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.title, this);
    }
}

  之后在activity_main.xml文件中添加这个自定义控件。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
	<!--修改内容-->
    <com.example.uicustomviews.TitleLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <!--修改内容-->
</LinearLayout>

  添加自定义控件和添加普通控件的方式基本是一样的,只不过在添加自定义控件的时候,我们需要指明控件的完整类名,包名在这里是不可以省略的。

  给标题栏添加点击事件。

public class TitleLayout extends LinearLayout {
    public TitleLayout(Context context, AttributeSet attrs){
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.title, this);
        // 添加代码
        Button titleBack = (Button) findViewById(R.id.title_back);
        Button titleEdit = (Button) findViewById(R.id.title_edit);
        titleBack.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                ((Activity) getContext()).finish();
            }
        });
        titleEdit.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(), "You clicked Edit button",Toast.LENGTH_SHORT).show();
            }
        });
        // --------
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1978155.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Android Studio】彻底卸载

文章目录 卸载程序控制面板卸载安全软件卸载 删除文件重启计算机 我们在Android开发时涉及重装时&#xff0c;如果卸载不干净&#xff0c;再次安装是不会正常运行项目的&#xff0c;接下来就让我教你如何删除干净吧。 卸载程序 控制面板卸载 control控制面板一>程序一>…

算法通关:016:设计循环双端队列

文章目录 题目思路代码运行结果问题为什么能直接调用方法名 题目 leetcode641 设计循环双端队列 思路 代码 import java.util.Deque; import java.util.LinkedList;/*** Author: ggdpzhk* CreateTime: 2024-08-03* 641 双端队列&#xff1a;利用双向链表和动态数组实现*/ pu…

百款HTML5小游戏源码搭建的网站,轻松为你的小程序或网站增加流量!

百款HTML5小游戏源码搭建的网站&#xff0c;轻松为你的小程序或网站增加流量&#xff01; 访问链接&#xff1a;http://43.139.69.156/game/80h5/index.html 需要源码可以看主页介绍 &#x1f680;&#x1f31f; 引爆你的创意&#xff01;100款HTML5小游戏源码大公开&#xff…

kettle从入门到精通 第八十三课 ETL之kettle kettle调用python且接收返回值

场景&#xff1a;kettle调用python执行脚本&#xff0c;处理之后&#xff0c;再把结果数据流发给下一个步骤。 看到有个qq群里有个小伙伴求助要实现kettle调用python脚本&#xff0c;然后接收python脚本执行的结果&#xff0c;最后将结果传递到下一个步骤。之前的课程里面介绍的…

bugku-web-xxx二手交易市场

打开题目&#xff0c;点击进入链接&#xff0c;是一个二手交易市场平台 先登录看看 评论了两下&#xff0c;发现<>被注释 对注释字符进行了过滤&#xff0c;无法闭合&#xff0c;sql注入点不存在 看看头像上传&#xff0c;上传文件&#xff0c;抓包 看到后面好长一串…

(001)mysql全接触

1. MySQL 如何优化SQL查询语句? 正确回答通过率&#xff1a;73.0%[ 详情 ] 推荐指数&#xff1a; ★★★★ 试题难度&#xff1a; 中级 建议性操作方案如下&#xff1a; 1&#xff1a;避免全表扫描 考虑在 where 和 order by 涉及的列上建立索引&#xff0c;in 和 not in 也…

ShardingSphere 之ShardingJDBC扩展功能:分片审计、数据加密、读写分离、广播表、绑定表

文章目录 分片审计数据加密读写分离广播表绑定表 分片审计 开发者手册 分片审计功能是针对数据库分片场景下对执行的 SQL 语句进行审计操作。可以对我们要执行的sql进行拦截并进行审核。 目前ShardingSphere内置的分片审计算法只有一个&#xff0c;DML_SHARDING_CONDITIONS。…

教您一键批量下载拼多多批发图片信息,节省时间

图片是电商的核心展示手段&#xff0c;高质量、吸引人的图片能显著提升商品吸引力&#xff0c;增强用户体验&#xff0c;促进购买决策。良好的视觉呈现有助于品牌形象的塑造&#xff0c;提高转化率和客户满意度&#xff0c;对电商平台的流量和销售业绩具有直接影响。 使用图快…

InnoDB锁机制

目录 第一节&#xff1a;锁的基本概念 1. 锁的定义与作用 2. Lock与Latch的区别 3. 锁的占有模式 4. 锁的类型 图文结合示例 Lock与Latch对比图 锁的占有模式兼容性图 锁的类型层次图 第二节&#xff1a;事务隔离级别与MVCC 事务隔离级别 MVCC&#xff08;多版本并发…

《机器人SLAM导航核心技术与实战》第1季:第8章_激光SLAM系统

视频讲解 【第1季】8.第8章_激光SLAM系统-视频讲解【第1季】8.1.第8章_激光SLAM系统_Gmapping算法-视频讲解【第1季】8.2.第8章_激光SLAM系统_Cartographer算法-视频讲解【第1季】8.3.第8章_激光SLAM系统_LOAM算法-视频讲解 第1季&#xff1a;第8章_激光SLAM系统 先 导 课第…

用2点结构标定3点结构的顺序

在行列可自由变换的平面上2点结构只有3个 (A,B)---6*30*2---(0,1)(1,0) 让A分别是2a1&#xff0c;2&#xff0c;3&#xff0c;让B全是0。当收敛误差为7e-4&#xff0c;收敛199次取迭代次数平均值&#xff0c;得到 结构 迭代次数 2a1 58742.717 1.00001 2a2 80796.605 1…

如何在uniapp上隐藏默认导航栏

当要定义导航栏&#xff0c;使用uni.switchTab来跳转页面时&#xff0c;需要将默认的导航栏进行隐藏。 比如使用 uni.hideTabBar(); 去隐藏的话&#xff0c;可能会有闪现出现的可能性。 我们可以在package.json当中的 tabBar加"custom": true。例: "tabBar&q…

【TS】TypeScript类型断言:掌握类型转换的艺术

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 TypeScript类型断言&#xff1a;掌握类型转换的艺术1. 引言2. 什么是类型断言&a…

基于特性价值来确认测试重点

目录 核心特性&#xff1a; 潜力特性&#xff1a; 噱头特性&#xff1a; 辅助特性&#xff1a; 无人问津的特性&#xff1a; 测试重点的确立&#xff1a; 软件的特性包含如下几种&#xff0c;核心特性&#xff0c;潜力特性&#xff0c;噱头特性&#xff0c;无人问津特性&…

Project Euler_Problem 277_A Modified Collatz Sequence

原题目&#xff1a; 题目大意&#xff1a; 一串字母可以视作迭代过程中每一轮除3余多少&#xff0c;问最小的大于1e15的满足那串序列的数是多大 解题思路&#xff1a;可以把那一大串字母&#xff0c;看作是不停地对初始数值x做连续运算&#xff0c;且每一轮运算的结果都应当是…

03:【stm32】GPIO

GPIO 1、芯片的引脚分布2、IO复用与重映射3、片上外设GPIO3.1、GPIO的寄存器组3.2、8种工作模式3.3、最大输出速度3.4、GPIO的内部结构 1、芯片的引脚分布 STM32F103C8T6这款芯片一共有48个引脚&#xff0c;他们分为了特殊功能引脚和普通的IO引脚。其中特殊功能的引脚有如下几个…

一键搬运TEMU、SHEIN店铺起新店。商品一键复制,商品裂变,TEMU商品复制

店铺搬家&#xff0c;一键搬运TEMU、SHEIN店铺起新店。商品一键复制&#xff0c;裂变新类目。铺店群必备 店铺搬家是什么&#xff1f; 店铺搬家就是将Temu一个店铺的所有商品快速搬到另一个店铺&#xff0c;只需要半个小时就能起一个全新的店铺&#xff0c;可以帮助商家快速起新…

comfyUI-MuseTalk的参数设置

comfyUI-MuseTalk的参数设置 目录 comfyUI-MuseTalk的参数设置 一、ComfyUI-VideoHelperSuite 二、comfyUI-MuseV合成的参考视频 2.1、什么时候会用到MuseV&#xff1f; 2.2、MuseV特别消耗系统内存 2.2.1、测试图片序列的像素比 2.2.2、影响运动范围和生成结果的参数 …

无法安装Python包,出现OSError: 拒绝访问错误

无法安装Python包&#xff0c;出现OSError: 拒绝访问错误 在安装Python包时&#xff0c;可能会遇到各种错误&#xff0c;其中“OSError: 拒绝访问”是一个比较常见的问题。这个错误通常表明在安装过程中&#xff0c;Python没有足够的权限去访问某个文件或目录。本文将深入探讨…

【LeetCode】45.跳跃游戏II

1. 题目 2. 分析 很久没有写贪心的题了&#xff0c;在这题上卡了很久时间&#xff0c;我这个还是不会贪心。 核心思想就一句话&#xff1a;维护在到达本次最远位置之前能达到的最远位置。每到边界时就更新步数&#xff0c;便得到正确答案。 3. 代码 class Solution:def jum…