Android的组件、布局学习

2023-12-19

介绍

公司组织架构调整,项目组需要承接其他项目组的android项目,负责维护和开发新需求,故学习下基础语法和项目开发。

组件学习

Toolbar=header布局部分

就是app最顶部的部分

他的显示与否,是与F:\androidProject\android_learn\demo1\app\src\main\res\values\styles.xml这个文件相关的。

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

与DarkActionBar这个属性相关,默认就是自带的,如果想要取消,可以设置NoActionBar来解决

parent="Theme.AppCompat.Light.NoActionBar">

设置之后的效果

我们不要android自带的ToolBar,我们可以自己用androidx写一个,为什么要替换,可以更加灵活的去修改。

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar1"
    app:navigationIcon="@drawable/ic_arrow_back_black_24dp"
    android:layout_width="match_parent"
    android:background="#ffff00"
    app:title="标题"
    app:titleMarginStart="90dp"
    app:subtitle="子标题"
    app:subtitleTextColor="#00ffff"
    app:logo="@drawable/ic_android_black_24dp"
    android:layout_height="?attr/actionBarSize"
    />

效果如下:

给要点击的返回按钮添加事件:

Toolbar toolbar1 = findViewById(R.id.toolbar1);
toolbar1.setNavigationOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View view) {
        Log.e("pshdhx","返回按钮被点击了");
    }
});

如何让toolbar的标题居中?

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar2"
    app:navigationIcon="@drawable/ic_arrow_back_black_24dp"
    android:layout_width="match_parent"
    android:background="#ffff00"

    app:subtitleTextColor="#00ffff"
    app:logo="@drawable/ic_android_black_24dp"
    android:layout_height="?attr/actionBarSize">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_gravity="center"
        android:text="标题"/>
</androidx.appcompat.widget.Toolbar>

使用这个属性即可,但是android studio没有提示。android:layout_gravity="center"

AlertDialog=alert+confirm

//相当于web中的Confirm或者是alert
public void putDialogAlert(View view) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setIcon(R.mipmap.ic_launcher)
            .setTitle("alert对话框")
            .setMessage("你确定要xxx吗")
            .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Log.e("pansd","onClick点击了确定");
                }
            })
            .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Log.e("pansd","onClick点击了取消");
                }
            })
            .setNeutralButton("中间", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Log.e("pansd","onClick点击了中间");
                }
            })
            .create()
            .show();
}

效果如下:

设置布局

View dialog_view = getLayoutInflater().inflate(R.layout.dialog_view,null);
xxx.setView(dialog_view);

新的布局文件

<?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="#00ff00"
    android:orientation="horizontal">

    <ImageView
        android:src="@mipmap/ic_launcher"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <TextView
        android:text="Android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

添加布局后的对话框,组件里边嵌入了一个layout

popupWindow=dialog

相当于一个Dialog,显示在界面的正上方

<?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"
    android:background="@mipmap/ic_launcher"
    android:orientation="vertical">

    <Button
        android:id="@+id/shanghai"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:text="上海"
        android:textSize="18dp"/>

    <Button
        android:id="@+id/beijing"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:text="北京"
        android:textSize="18dp"/>

</LinearLayout>
public void putpopupWindow(View view) {
    View popupView = getLayoutInflater().inflate(R.layout.popup_view, null);
    PopupWindow popupWindow = new PopupWindow(popupView, ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,true);
    popupWindow.showAsDropDown(view,10,10);
}

点击按钮显示,点击空白处小时,相当于一个Dialog弹窗。

给弹窗设置背景色

//给弹窗设置背景色
popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.cat));

点击弹窗里边的按钮,并且点击之后,让popupWindow退出

View beijingBtn = popupView.findViewById(R.id.beijing);
beijingBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Log.e("pansd","点击了popupWindow中北京的按钮");
        popupWindow.dismiss();
    }
});

布局

LinearLayout

android:gravity="center_horizontal|bottom"

子组件,水平方向上,居中,然后放置到bottom底侧

android:layout_gravity="center" 如果父组件是vertical,那么该子组件只能控制水平方向的这一块内容。

设置元素之间的分割线:

android:divider="@drawable/divider" 设置分割线的图片 【可以直接使用linearlayout 高度=1dp来设置分割线】

android:showDividers="middle" 在中间显示分割线

android:dividerPadding="100dp" 设置分割线和左右边框的距离

android:layout_weight="1" 该组件把剩余的空间分配,如果别的也是1,那么各分50%的剩余空间。但是,如果出现了match_parent的情况,权重需要根据实际情况计算。所以,权重设置的时候,直接设置高度为0即可按照比例分割。

RelativeLayout

相对布局,一定需要定位。要不然,都上下层贴到一块了。

FrameLayout

从父容器的左上角开始布局,每次都绘制在当前图层的上一层。

还有一个属性:

android:foreground="@drawable/ceshi1"

android:foregroundGravity="right|bottom"

设置当前图层的前景色,就是图层的上边,添加一张图片,放置在右下角。

TableLayout

如果在该布局下,直接写组件,那么写的组件会占用一整行。两个组件就是占用两行。

如果要仅仅使用一行呢,需要使用<TableRow>

如果一行超过了屏幕的显示范围,那么不显示。

不能把两行进行一个合并,只能把两列进行一个合并。

GridLayout

ConstraintLayout

就是新建项目时的默认的布局,在Design中拖动组件的圆点布局。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android的组件、布局学习 的相关文章

随机推荐

  • Kubernetes 简介

    1 Kubernetes简介 一个容器管理应用 提高容器化服务的部署和管理效率 2 容器部署 2 1 传统部署形式 应用共用服务器环境 对于底层资源 文件目录 JDK 网络带宽等 存在弹性争夺 冲突等问题 容易导致应用性能不稳定 服务器环境
  • 中国90米分辨率可蚀性因子K数据

    数据时间 2023年 数据空间位置 全国 数据空间分辨率 90m 数据坐标系 WGS1984 数据格式 tiff 数据来源 地球资源数据云平台 www gis5g com 如需要请自行联系 数据简介 土壤可蚀性因子 K 数据 基于多种土壤属
  • 【网络安全】-Linux操作系统—CentOS安装、配置

    CentOS是一个基于Red Hat Enterprise Linux构建的免费操作系统 它提供了企业级的稳定性和安全性 非常适合用于服务器环境 以下是CentOS安装和基本配置的详细指南 准备工作 在安装CentOS之前 需要准备安装介质
  • 二蛋赠书十二期:《一本书讲透Java线程:原理与实践》

    摘要 互联网的每一个角落 无论是大型电商平台的秒杀活动 社交平台的实时消息推送 还是在线视频平台的流量洪峰 背后都离不开多线程技术的支持 在数字化转型的过程中 高并发 高性能是衡量系统性能的核心指标 越来越多的公司对从业人员的多线程编程能力
  • PHP中1688平台商品详情数据API接口采集到数据后如何处理

    PHP的定义和特点 PHP Hypertext Preprocessor 是一种开源的服务器端脚本语言 用于快速构建动态网页和Web应用程序 PHP采用嵌入HTML的方式 可以直接嵌入到HTML代码中 与数据库连接 数据处理 文件上传等操作
  • Vue的网络请求、插槽、Vuex

    axios npm i axios 跨域问题 协议名 ip 端口号 实际上 浏览器是收到数据的 但是没有交付给开发者 解决跨域问题 创建代理服务器 代理服务器和前端端口是一样的 所以不存在跨域问题 代理服务器与后端服务器都是服务器 和浏览器
  • Android的基础开发

    基础开发 listView ListView就是列表条目 可以向下滚动 也可以点击 首先设置两个视图布局 activity main2 xml 充当容器 ListView
  • 「Verilog学习笔记」游戏机计费程序

    专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点 刷题网站用的是牛客网 timescale 1ns 1ns module game count input rst n 异位复位信号 低电平有效 input clk 时
  • 讲解darknet: ./src/cuda.c:36: check_error: Assertion `0‘ failed.

    目录 讲解darknet src cuda c 36 check error Assertion 0 failed 错误原因 解决方案 1 检查CUDA安装 2 检查GPU驱动程序 3 检查CUDA环境变量 4 编译darknet 5 调试
  • 应用在多媒体触摸屏设备中的触摸感应芯片

    多媒体触摸屏设备是触摸液晶显示器结合现代PC机组成的具有触摸显示和计算机操作功能为一体的产品 它包括两个部分 一个是触摸液晶显示器 它具有触控的特性和显示输出的功能 另一个是PC机 也就是所说的计算机 通过两个部分整合到一起 实现了具有触摸
  • Springboot+Mybatis入门案例

    一 项目结构 1 导入依赖
  • Java版企业电子招标采购系统源码—鸿鹄电子招投标系统-企业战略布局下的采购寻源

    项目说明 随着公司的快速发展 企业人员和经营规模不断壮大 公司对内部招采管理的提升提出了更高的要求 在企业里建立一个公平 公开 公正的采购环境 最大限度控制采购成本至关重要 符合国家电子招投标法律法规及相关规范 以及审计监督要求 通过电子化
  • MySQL性能监控

    1 创建监控用户 mysql gt CREATE USER mysqld exporter localhost IDENTIFIED BY Mysqld exporter 123 WITH MAX USER CONNECTIONS 3 my
  • API接口能力不足?Bug处理慢?Lazada开放平台API商品接入

    7月30日正式发布的Lazada开放平台2 0 Lazada Open Platform 2 0 从 商品API 订单API IM 即时通信 API 营销工具等几大方向 带来全新升级的API体系 共 新增47个接口 优化19个接口 向广大的
  • 免费有意思的好用API推荐

    周公解梦 周公解梦大全 周公解梦查询 免费周公解梦 星座查询 根据日期或星座名称 查询星座详细信息 包含 掌管宫位 主管星 颜色 珠宝 幸运数字 性格等等 生肖查询 根据生肖名称 查询生肖详细信息 包含 五行分析 本命佛 生辰 吉祥颜色 幸
  • Vue的组件化

    组件化步骤 1 创建Vue组件 const school Vue extend template div h2 学校名称 schoolName h2 h2 学校地址 schoolAddress h2 div data return scho
  • torch.rand()和torch.randn()的区别

    torch rand 和 torch randn 是 PyTorch 中用于生成张量的两个函数 它们之间的主要区别在于生成张量元素的方式不同 1 torch rand torch rand 用于生成元素值在 0 1 之间均匀分布的随机张量
  • uniapp初级入门-flex布局学习11-骰子多点演示

    代码
  • python pdf转图片

    import fitz def pdf2img pdf path img dir doc fitz open pdf path 打开pdf for page in doc 遍历pdf的每一页 zoom x 2 0 设置每页的水平缩放因子 z
  • Android的组件、布局学习

    介绍 公司组织架构调整 项目组需要承接其他项目组的android项目 负责维护和开发新需求 故学习下基础语法和项目开发 组件学习 Toolbar header布局部分 就是app最顶部的部分 他的显示与否 是与F androidProjec