Android Studio(项目收获)

取消按钮默认背景色

像按钮默认背景色为深蓝色,即使使用了background属性指定颜色也不能生效。

参考如下的解决方法:

修改/res/values/themes.xml中的指定内容如下:

<style name="Theme.TianziBarbecue" parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge">

代码方式设置边距

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(0, 16, 0, 16); // 分别为上下左右的外边距
textView.setLayoutParams(layoutParams);

设置控件边框

设置边框步骤:在drawable文件下新建xml文件 >> 设置边框样式 >> 在background属性中引入边框样式

// 1. 设置全边框
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" ><solid android:color="#FFFFFF" /><strokeandroid:width="1dp"android:color="#000000" /><paddingandroid:bottom="0.1dp"android:left="0.5dp"android:right="0.5dp"android:top="0dp" />
</shape>// 2. 设置部分边框
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" ><!-- 连框颜色值 --><item><shape><solid android:color="#000000" /></shape></item><!-- 主体背景颜色值 --><item android:top="1dp">   <!--设置只有底部有边框--><shape><solid android:color="#ffffff" /></shape></item>
</layer-list>// 3. 同时设置边框和背景色
<shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#FF0000" />  <!-- 设置背景颜色 --><strokeandroid:width="1dp"android:color="#000000" />  <!-- 边框线颜色 -->
</shape>

连接真机(手机)调试

要连接自身的 Android 设备进行测试,需要确保以下步骤已完成:
1. 在 Android 设备上启用开发者选项。
2. 在 Android 设备上启用 USB 调试模式。
3. 使用 USB 电缆将 Android 设备连接到您的计算机,华为手机需要更改USB连接方式为“MIDI”。
4. 在Tools >> Device Manager >> Physical列表找到连接手机并启动即可。

刷新页面

(1) 在Adapter中
dataList.remove(data);
notifyDataSetChanged();
(2) 在Activity中
MyAdapter myAdapter = new MyAdapter(context,data);
listView.setAdapter(MyAdapter); 

水平和竖直可滚动容器

// 水平
<HorizontalScrollView><LinearLayout>在这里添加元素</LinearLayout>
</HorizontalScrollView>// 竖直
<ScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><!-- 在这里动态添加子元素 --></LinearLayout>
</ScrollView>

Spinner设置背景色和数据集

// 1. 在layout下新建custom_spinner_item.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#FF0000"  <!-- 设置背景颜色 -->android:textColor="#000000"   <!-- 设置文本颜色 -->android:padding="8dp"android:textSize="18sp" />// 2. 定义数据集
ArrayList<String> items = new ArrayList<>();
data.add("item1");
data.add("item2");
data.add("item3");// 3. 创建一个 ArrayAdapter,并为Spinner设置自定义的下拉列表项布局
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.custom_spinner_item, items);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);// 4. 将ArrayAdapter设置为 Spinner 的适配器
Spinner spinner = findViewById(R.id.spinner);
spinner.setAdapter(adapter);

view.setTag传入多值

问题描述:

    如果使用setTag两次及其以上则会造成前后覆盖,即最终只能获取到一个最终传入值;
解决方法:

    当我们需要传入两个以上的变量值时,可以选择对象封装(创建一个内部类,把需要传的变量封装在该类的属性中),然后我们就可以通过setTag(Object)来达到传入多个值的效果;
不可行方法:

    测试过view.setTag(intKey,value)方式,该方式经过测试出现错误(IllegalArgumentException)不能达到效果

底部弹出窗口页面

BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(ChargeUpActivity.this);
View sheetView = getLayoutInflater().inflate(R.layout.cart,null);
cartList = sheetView.findViewById(R.id.cart_list);
CartAdapter cartAdapter = new CartAdapter(ChargeUpActivity.this, orderItemList);
cartList.setAdapter(cartAdapter);bottomSheetDialog.setContentView(sheetView);// 设置布局参数
FrameLayout bottomSheet = bottomSheetDialog.findViewById(com.google.android.material.R.id.design_bottom_sheet);
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) bottomSheet.getLayoutParams();
layoutParams.height = 1400; // 设置高度
bottomSheet.setLayoutParams(layoutParams);
// 清除默认动画效果
Window window = bottomSheetDialog.getWindow();
if (window != null) {window.setWindowAnimations(0);
}// 滑动弹窗页面内容不会关闭弹窗,仅点击弹窗外部区域关闭弹窗
bottomSheetDialog.setCancelable(false);
bottomSheetDialog.setCanceledOnTouchOutside(true);bottomSheetDialog.show();

计算字符串表达式

(1) 在build.gradle中引入依赖:
dependencies {
    ...
    implementation 'io.github.jarvisjin:fin-expr:1.0.1'
}
(2) 在java中使用
Expression e = new Expression("345000*0.0157");
BigDecimal result = e.calculate(); // result 5416.5000

fragment报错 

关于androidx.fragment.app.Fragment报xxx that is not a Fragment的问题:

首先去检查你调用该Fragment类的那个activity是否是继承于Activity,如果是,那么恭喜你马上找到解决方案了
1、修改继承类Activity为AppCompatActivity或者FragmentActivity
2、重新编译-部署-成功运行

英语词汇

SDK:Software Development Kit(软件开发工具包)		
AVD:Android Virtual Device(安卓模拟装置)
emulator:模拟器		
Tablet:平板		
Wear OS:穿戴操作系统			
manifest:清单			
alert:警报			
toast:弹框(烤面包)		
gravity:偏向(重力)		
hint:提示
inflate:转化			
intent:意图			  
Explicit:显式 		    
implicit:隐式
transaction:事务		 
revert:恢复			
reassgin:重新分配			
extensible:可展开的		
neutral:中立的			
instantiate:实例化

--------------

后言

 在下一节将介绍项目打包成APK的相关知识

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

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

相关文章

OSCP系列靶场-Esay-Dawn

总结 getwebshell → SMB共享无密码 → SMB存在上传功能 → 存在周期执行任务 → SMB上传反弹shell → 被执行获得webshell 提 权 思 路 → suid发现zsh → -p容器提权 准备工作 启动VPN 获取攻击机IP > 192.168.45.163 启动靶机 获取目标机器IP > 192.168.242.11 信…

51单片机-定时计数器

文章目录 前言1 原理2.编程 前言 1 原理 2.编程 定时计算&#xff1a; 50ms501000us 一个机器周期&#xff1a;1.085us 65535 - 501000/1.08546082 故 40082*1.08549998.97 /*定时器1&#xff0c;定时模式 工作模式1 16位计数器&#xff0c; 定时20秒后使能蜂鸣器*/ #include…

luckysheet的使用——13.开启表格非编辑模式(指定单元格可编辑,除此以外其他单元格全部不可编辑)

对指定单元格进行设置为可编辑&#xff0c;在开启非编辑模式后&#xff0c;只有指定的单元格才可以进行编辑&#xff0c;其余单元格全部无法编辑。 1.修改系统&#xff0c;在对应的前端页面代码中对右键菜单新增功能&#xff1a; {title: 设置可编辑,onClick: function (click…

5 Tensorflow图像识别(下)模型构建

上一篇&#xff1a;4 Tensorflow图像识别模型——数据预处理-CSDN博客 1、数据集标签 上一篇介绍了图像识别的数据预处理&#xff0c;下面是完整的代码&#xff1a; import os import tensorflow as tf# 获取训练集和验证集目录 train_dir os.path.join(cats_and_dogs_filter…

Elasticsearch 8.9 服务端接收创建索引和查询索引信息源码

一、创建索引1、接收创建索引的RestCreateIndexAction2、Master执行创建索引的类TransportCreateIndexAction3、创建一个任务(创建索引的)&#xff0c;放入一个队列4、执行创建索引时会先搜索模版5、创建索引的build&#xff0c;更新集群状态(1) initializeEmpty初始化索引的分…

AI+BI行业数字化转型研讨会 - 总结精华回顾

带您一起观看研讨会精彩内容回顾&#xff01; || 导语 AIBI行业数字化转型研讨会—引领未来&#xff0c;智慧转型 德昂信息技术(北京)有限公司于2023年10月26日成功举办了AIBI行业数字化转型研讨会。此次盛会汇聚了产业精英、企业领袖以及技术专家&#xff0c;共同探讨在快速…

Python的编码规范:PEP 8介绍及基本遵循原则

文章目录 PEP 8简介基本遵循原则1. 缩进2. 行宽3. 空行4. 导入5. 空格6. 命名约定7. 表达式和语句中的空格8. 注释9. 编码声明10. 文档字符串PEP 8简介 PEP 8,或Python Enhancement Proposal 8,是一个官方文档,发布于2001年。它由Guido van Rossum,Python语言的创始人,以…

sed过滤线上日志,根据时间段查询

文章目录 语法: sed -n ‘/开始时间:/,/结束时间:/p’ 文件名 例1 sed -n /2023-11-08 11:30:*/,/2023-11-08 11:31:*/p server.log例2&#xff08;根据上面的继续过滤也行&#xff09; sed -n /2023-11-08 11:29:*/,/2023-11-08 11:31:*/p e-chatbot-server.log | grep appSav…

前端框架Vue学习 ——(二)Vue常用指令

文章目录 常用指令 常用指令 指令: HTML 标签上带有 “v-” 前缀的特殊属性&#xff0c;不同指令具有不同含义。例如: v-if, v-for… 常用指令&#xff1a; v-bind&#xff1a;为 HTML 标签绑定属性值&#xff0c;如设置 href&#xff0c;css 样式等 <a v-bind:href"…

Spark 新特性+核心回顾

Spark 新特性核心 本文来自 B站 黑马程序员 - Spark教程 &#xff1a;原地址 1. 掌握Spark的Shuffle流程 1.1 Spark Shuffle Map和Reduce 在Shuffle过程中&#xff0c;提供数据的称之为Map端&#xff08;Shuffle Write&#xff09;接收数据的称之为Reduce端&#xff08;Sh…

MybatisPlus之新增操作并返回主键ID

在应用mybatisplus持久层框架的项目中&#xff0c;经常遇到执行新增操作后需要获取主键ID的场景&#xff0c;下面将分析及测试过程记录分享出来。 1、MybatisPlus新增方法 持久层新增方法源码如下&#xff1a; public interface BaseMapper<T> extends Mapper<T> …

js处理赎金信

给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1&#xff1a; 输入&…

自动控制原理--面试问答题

以下文中的&#xff0c;例如 s_1 为 s下角标1。面试加油&#xff01; 控制系统的三要素&#xff1a;稳准快。稳&#xff0c;系统最后不能震荡、发散&#xff0c;一定要收敛于某一个值&#xff1b;快&#xff0c;能够迅速达到系统的预设值&#xff1b;准&#xff0c;最后稳态值…

一台电脑生成两个ssh,绑定两个GitHub账号

背景 一般一台电脑账号生成一个ssh绑定一个GitHub&#xff0c;即一一对应的关系&#xff01;我之前有一个账号也配置了ssh&#xff0c;但是我想经营两个GitHub账号&#xff0c;当我用https url clone新账号的仓库时&#xff0c;直接超时。所以想起了配置ssh。于是有了今天这篇…

SQLite System.Data.SQLite和sqlite-net-pcl之间的区别

System.Data.SQLite System.Data.SQLite是一个.NET数据提供程序&#xff0c;用于操作SQLite数据库。它是在SQLite C语言库之上构建的&#xff0c;提供了以.NET方式访问SQLite数据库的功能。System.Data.SQLite提供了ADO.NET接口&#xff0c;可以与其他关系型数据库一样使用Com…

FreeRTOS总结

堆内存管理 有五种内存分配方式常用的为heap_4方式 任务管理 任务不能以任何方式实现函数返回&#xff0c;可以在任务的死循环外加上xTaskDelete( ) 创建任务&#xff1a;xTaskCreate( ) 任务堆栈的大小&#xff0c;空闲任务的最小是configMINIMAL_STACK_SIZE&#xff0c;其…

【自然语言处理】利用python创建简单的聊天系统

一&#xff0c;实现原理 代码设计了一个简单的客户端-服务器聊天应用程序&#xff0c;建立了两个脚本文件&#xff08;.py文件)&#xff0c;其中有一个客户端和一个服务器端。客户端和服务器之间通过网络连接进行通信&#xff0c;客户端发送消息&#xff0c;服务器端接收消息并…

git clone单个文件/文件夹、wget下载单文件

文章目录 1. 暂时没找到方法用git命令方便地clone单个文件/文件夹2. 通过wget手动下载单个文件 1. 暂时没找到方法用git命令方便地clone单个文件/文件夹 复杂&#xff0c;未测试 https://www.cnblogs.com/impw/p/15629514.html 2. 通过wget手动下载单个文件 在github/gitee网…

acwing 795前缀和

输入一个长度为 n&#xfffd; 的整数序列。 接下来再输入 m&#xfffd; 个询问&#xff0c;每个询问输入一对 l,r&#xfffd;,&#xfffd;。 对于每个询问&#xff0c;输出原序列中从第 l&#xfffd; 个数到第 r&#xfffd; 个数的和。 输入格式 第一行包含两个整数 …

django+drf+vue 简单系统搭建 (2) - drf 应用

按照本系统设置目的&#xff0c;是为了建立一些工具用来处理简单的文件。 1. 准备djangorestframework 关于drf的说明请参见&#xff1a;Django REST Framework教程 | 大江狗的博客 本系列直接使用drf的序列化等其他功能。 安装 conda install djangorestframework conda i…