android入门学习笔记(更新中ing)(代码片段)

电烤牛上脑 电烤牛上脑     2023-01-14     358

关键词:

Android入门知识梳理

Activity篇

关于activity的理解

理解一:activity是提供界面(UI)的一种组件。

理解二:Activity用于显示用户界面,用户通过Activity交互完成相关操作。

activity的生命周期

-onCreate():在Activity第一次被创建时调用

-onStart():在Activity由不可见变为可见时调用

-onResume():这个方法在Activity准备好和用户交互的时候调用。此时的Activity一定位于返回栈的栈顶,并处于运行状态

-onPause():这个方法在系统准备去启动或恢复另一个Activity的时候调用

-onStop():这个方法在Activity完全不可见的时候调用,它和onPause()方法的主要区别在于,如果启动的新 Activity是一个对话框式的activity,那么,onPause()方法会得到执行,而onStop()方法并不会执行。

-onDestroy():这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态

-onRestart():在这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。

activity之间的传值

1.相邻activity之间的传值

方法:Intent传值(传递对象或单个属性)

代码:

//step1:在第一个activity文件内设置
Intent intent = new Intent(OneActivity.this,TwoActivity.class); //跳转
intent.putExtra("aLogin",aLogin);
intent.putExtra("aPassword",aPassword);
startActivity(intent);

//step2:在第二个activity内取值
Intent getIntent = getIntent();
String aLogin = getIntent.getStringExtra("aLogin");
String aPassword = getIntent.getStringExtra("aPassword");

2.相邻两个以上activity之间的传值

方法:自定义全局类,用于储存临时数据

代码:

public class Constant 
    public static String aLogin;
    public static String aPassword;


//step1
Intent intent = new Intent(OneActivity.this,TwoActivity.class);
Constant.aLogin = aLogin;
Constant.aPassword = aPassword;
startActivity(intent);

//step2:这样我们在其他activity里随时可以取值,不受activity的限制
String aLogin = Constant.aLogin;
String aPassword = Constant.aPassword;
mEmailView.setText(aLogin);
mPasswordView.setText(mPassword);
3.从第一个界面到第二个界面取值并取回第一个界面

代码:

//从一界面跳到二界面
startActivityForResult(intent,code);  //code是请求码,int类型

//二界面
Intent rIntent = new Intent();
rIntent.putExtra("sex",mSex);
rIntent.putExtra("address",mAddress);
setResult(resultCode,getIntent());//resultCode为返回码,用于区分从哪里返回
finish();


//使用onActivityResult方法接受此intent
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data) 
    user.setName(data.getStringExtra("sex"))
        Toast.makeText(this,data.getStringExtra("sex"),1).show();
    super.onActivityResult(requestCode,resultCode,data);

4.使用回调

说明:在two中的定义一个回调接口,one中去实现这个接口原型,two中将你需要传的值(例如email)放到接口中two中执行此接口方法就ok,这样A就拿到了email了。

可以在任何类里使用回调,不仅限于activity方法二页适用于任何类

【注意】:虽然activity的启动模式并非传值,但是当某个activt跳到其他界面,然后关闭在回到当前界面的时候,有的需求需要可以保留本界面的一些数据,比如用户输入还没提交的一些数据,比如editview,等待上传的照片等。我们可以作为一种传值的方式。

activity的四种启动模式简述

1.standard(默认)

说明:standard是默认的启动模式,即如果说明aunchMode属性,则自动就会使用这种启动模式,每次打开需开启新的activity

2.single Top

说明:如果要启动的这个Activity在当前Task中已经存在,并且还处于栈顶的位置,那么系统就不会创建一个该Activity的实例,而是调用栈顶Activity的onNewIntent()方法。声明成这种启动模式的Activity也可以被实例化多次,一个任务当中也可以包含多个这种Activity的实例。举个例子来讲,一个任务的返回栈中有A、B、C、D四个Activity,其中A在最底端,D在最顶端,这个时候如果我们要求再启动一次D,并且D的启动模式是standard,那么系统就会再创建一个D的实例放入到返回栈中,此时栈内元素为A-B-C-D-D。而如果D的启动模式是“single Top”的话,由于D已经是在栈顶了,那么系统就不会再创建一个D实例,而是直接调用D Activity的onNewIntent()方法,此时栈内元素仍然是A-B-C-D.

3.single Task

说明:这种启动模式表示,系统会创建一个新任务,并启动的Activity放入这个新任务的栈底位置。但是,如果现有任务当中已经存在一个该Activity的实例了,那么系统就不会再创建一个它的实例,而且会直接调用它的onNewIntent()方法。声明成这种启动模式的Activity,在同一个任务当中只存在一个实例。注意这里我们所说的启动Activity,都指的是启动其他应用程序中的Activity,因为“single Task”模式在默认情况下只有启动其它程序的Activity才会创建一个新任务,启动自己程序中的Activity还是会使用相同的任务。

4.singleInstance

说明:这种启动模式和“single Task”有点相似,只不过系统不会向声明成“singleInstance”的Activity所在的任务当中再添加其他Activity。也就是说,这种Activity所在的任务中始终只会有一个Activity,通过这个Activity再打开其他的Activity也会被放入到别的任务当中。

布局篇

ConstraintLayout布局

核心:使用ConstraintLayout布局的目的是为了减少嵌套。

TextView
android:gravity="center_vertical|left"  //字体左侧垂直居中
android:text="服务协议"  //文本内容
android:textSize="40sp"  //文本大小

补充:android:gravity是对自身内容的限定
     android:layout_gravity是对当前控件相对其父控件内容的限定
EditText
<EditText
                    android:id="@+id/new_password1"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_alignParentEnd="true"
                    android:layout_marginStart="0dp"
                    android:layout_marginEnd="0dp"
                    android:layout_toEndOf="@+id/textView6"
                    android:ems="10"
                    android:selectAllOnFocus="true"    //获取焦点后全选文本内容
                    android:hint="默认显示"    //默认显示值,相当于placeholder
                    android:background="@null"
                    android:inputType="textPassword" />  //设置文本输入框为密码,password
SimpleDraweeView

说明:加载网络图片

//布局代码
<com.facebook.drawee.view.SimpleDraweeView
                android:id="@+id/user_info_image"  
                android:layout_width="113dp"
                android:layout_height="113dp"
                android:layout_marginStart="56dp"
                android:layout_marginTop="26dp"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:placeholderImage="@drawable/ic_et_user_name"  //如果未加载网络图片,设置默认显示图片
                app:placeholderImageScaleType="fitXY" />    //图片默认填充满

LinearLayout线性布局

View分割线
//view实现分割线效果
<View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/gray" />

核心:适合水平数值排列,且每行(列)包含内容简单(内容少)

💙android:orientation=“horizontal”

⭐️horizontal-水平

⭐️vertical-垂直

💙android:gravity & android:layout_gravity

⭐️android:gravity是指本元素的子元素相对它的对齐方式

⭐️android:layout_gravity是指本元素相对它的父元素的对齐方式

🌟其中关于start和left的区分:这里的start和left属性,end和right属性需要注意一下,这里写的是对于中国的情况而言。实际上,他们两个是不同的,left是绝对的左边,而start会根据不同的国家习惯改变。比如在从右向左顺序阅读的国家,start代表的就是在右边

💙layout_height & layout_width & layout_weight(子控件大小)

⭐️wrap_content是根据子控件内容的大小决定大小

⭐️match_parent是子控件填满父容器

⭐️xdp是直接设置大小,dp为单位

RelativeLayout相对布局

核心:相对布局可以让子控件相对于兄弟控件或父控件进行布局,可以设置子控件相对于兄弟控件或父控件进行上下左右对齐(※必须设置id进行管理)

属性值为true或false

⭐️android:layout_centerHrizontal 水平居中

⭐️android:layout_centerVertical 垂直居中

⭐️android:layout_centerInparent 相对于父元素完全居中

⭐️android:layout_alignParentBottom 贴紧父元素的下边缘

⭐️android:layout_alignparentLeft 贴紧父元素的左边缘

⭐️android:layout_alignparentRight 贴紧父元素的右边缘

⭐️android:layout_alignParentTop 贴紧父元素的上边缘

💙属性值必须为id的引用名[“@id/id-name”]

⭐️android:layout_below 在某元素的下方

⭐️android:layout_above 在某元素的的上方

⭐️android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐

⭐️android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐

FrameLayout层布局

核心:常用于fragment组件隐藏/展示,对其填充

布局规范

数据

match_parent:与其父组件保持一致(大小)

wrap_content:与其子组件保持一致(大小)

布局尺寸尽可能选取“dp”作为单位(自适应)

文本信息尽可能选取“sp”作为单位

AndroidManifest.xml(应用清单文件)

activity标签

说明:声明实现应用部分可视化界面的Activity。必须用清单文件中的元素表示所有Activity。系统不会识别和运行任何进行声明的Activity。

1.1intent-filter标签

说明:指定Activity、服务或广播接收器可以响应的Intent类型。Intent过滤器声明其父组件的功能 - Activity或服务可执行哪些操作,以及接收器可处理哪些类型的广播。它让组件可以接收所通告类型的Intent,同时过滤掉对组件没有意义的Intent。

1.1.1action标签

说明:向Intent过滤器添加操作。元素必须包含一个或多个元素。如果Intent过滤器中没有元素,则过滤器不接受任何Intent对象。

1.1.2category标签

说明:向Intent过滤器添加类别名称。

Android开发常用快捷键

生成实例对象插件 Butterknife Injections

需求:自动生成

 @BindView(R.id.content)
    FrameLayout content;

前提条件:使用快捷键前,类一定extends Activity

操作:在activity中,将光标移动到布局文件位置,然后使用alt+insert快捷键,点击Generate Butterknife Injecctions,进行生成设置


全选格式化(规范)代码

需求:保持全局代码规范

前提条件:Ctrl+A 全选代码

操作:按住Ctrl+Alt后,依次点击I、O、L

Android开发 操作代码


🗡需求:修改TextView文本内容

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) 
        View view = inflater.inflate(R.layout.fragment_agreement, container, false);
        unbinder = ButterKnife.bind(this, view);
        //注意,操作界面信息需在上行代码下书写
        //更改文本标题
        tvTitle.setText(R.string.fragment_agreement_tv);
        return view;
    

🗡需求:隐藏图片ImageView内容

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) 
        View view = inflater.inflate(R.layout.fragment_agreement, container, false);
        unbinder = ButterKnife.bind(this, view);
        //注意,操作界面信息需在上行代码下书写
        //更改文本标题
        tvTitle.setText(R.string.fragment_agreement_tv);
        //隐藏界面内图片信息
        ivBack.setVisibility(View.GONE);
        return view;
    

🗡需求:关闭activity页面

//直接调用finish方法即可
...
    finish();

rabbitmq学习笔记(持续更新ing)(代码片段)

文章目录快速入门(java)快速入门(springboot)进阶消息确认机制消息持久化消息公平分发消息安全性Prefetch其他消息模式发布订阅模型快速入门(java)首先安装rabbitmq(单机版)rabbitmq的安装(... 查看详情

一些个人笔记,持续更新ing(代码片段)

python基础基于《Python编程从入门到实践》一书2.1~2.2P18message="hellopython!!"print(message)message="test2"print(message)2.3.title()首字母大写,中间字母转为小写.upper()将字符串全部转为大写.lower()将字符串字母全部转为小写... 查看详情

unityshader入门精要学习笔记-第16章unity中的渲染优化技术

...像素被绘制多次),PowerVR芯片(通常用于ios设备和某些Android设备)使用了基于瓦片的延迟渲染(TBDR)架构,把所有的渲染图像装入一个个瓦片中,再由硬件找到可见的片元,而只有这些可见片元才会执行片元着色器。另一些基... 查看详情

《automaticfaceclassificationofcushing’ssyndromeinwomen–anovelscreeningapproach》学习笔记(示例代码

《针对女性库欣综合征患者的自动面部分类-一种新颖的筛查方法》Abstract库兴氏综合征对身体造成相当大的伤害如果不及时治疗,还经常是诊断的时间太长。在这项研究中,我们旨在测试是否面临分类软件可以帮助识别库兴氏综合... 查看详情

ue4c++ue4c++入门(无参考项目)——技术宅阿棍儿学习笔记更新中~

...来源于B站UP主技术宅阿棍儿,课程为:UE4C++入门(无参考项目)[1/2]和UE4C++入门(无参考项目)[2/2],感谢棍哥能够免费教我们UE4C++。课程简洁无废话,特别喜欢 查看详情

初级程序员学习网站(更新ing)

go语言学习:goexample快速学习:https://gobyexample.com/《Go入门指南》中文教程:https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/directory.md开发工具IntellijIDEA:https://www.jetbrains.com/idea/vim学习:《vi/vim使用进阶 查看详情

博弈论(gametheory)入门学习笔记(持续更新)

博弈论(GameTheory)入门学习笔记(持续更新)课程介绍1-1Taste-Backoff1-2Self-InterestedAgentsandUtilityTheory1-3Define1-4Examples1-5NashEquilibriumIntro1-6StrategicReasoning1-7BestResponseandNas 查看详情

《自动驾驶入门:从建模到跟随》学习笔记小车建模及话题控制(代码片段)

《自动驾驶入门:从建模到跟随》学习笔记(一)小车建模及话题控制1.小车Xacro建模2.Topic通信在学习《自动驾驶入门:从建模到跟随》课程时,记录了学习过程中的编程练习,课后作业以及发现的问题... 查看详情

datawhalepowerful-numpy《从小白到入门》学习笔记(代码片段)

Datawhalepowerful-numpy《从小白到入门》学习笔记持续更新中文章目录Datawhalepowerful-numpy《从小白到入门》学习笔记摘自官方文档的一些话WhatisNumPy?WhyisNumPyFast?WhoElseUsesNumPy?一.创建和生成1.从python列表或元组创建从列表创建从元组创建... 查看详情

unityshader入门精要学习笔记-第8章透明效果

转载自冯乐乐的《UnityShader入门精要》透明是游戏中经常要使用的一种效果。在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道。当开启透明混合后,当一个物体被渲染到屏幕上时,每个片元出了颜色值和深... 查看详情

html入门笔记学习(代码片段)

一、JavaScript编写的位置在HTML中,JavaScript代码必须位于<script>与</script>标签之间。1.<head>中的JavaScript2.<body>中的JavaScript3.外部脚本:脚本可放置与外部文件中   JavaScript文件的文件扩展名是.js。   如需... 查看详情

html入门笔记学习(代码片段)

一、JavaScript编写的位置在HTML中,JavaScript代码必须位于<script>与</script>标签之间。1.<head>中的JavaScript2.<body>中的JavaScript3.外部脚本:脚本可放置与外部文件中   JavaScript文件的文件扩展名是.js。   如需... 查看详情

rxjava入门学习笔记(代码片段)

...通俗易懂。此文将简要记录学习RxJava的笔记。参考文献给Android开发者的RxJava详解基本概念RxJava有四个基本概念:Observable(可观察者,即被观察者) 查看详情

html入门学习笔记(代码片段)

在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏... 查看详情

html入门学习笔记(代码片段)

在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏... 查看详情

android学习笔记94.从room数据库中删除数据(代码片段)

Android学习笔记Android开发者基础知识(Java)——GoogleDevelopers培训团队文章目录Android学习笔记Android开发者基础知识(Java)——GoogleDevelopers培训团队第3单元在后台运行第10课使用Room存储数据94.从Room数据库中删除数据你会做什么94.1只有... 查看详情

k-dtree入门更新ing(代码片段)

久仰K-Dtree大名已久,终于在合适的时候遇见了合适的水题入了坑入了门K-Dtree是什么K-Dtree是什么?按名字上翻译来就是K维的树,就是一个用来维护K维空间的点的平衡二叉树K-Dtree有什么用K-Dtree可以进行空间上的操作,最经典的... 查看详情

javascript入门--慕课网学习笔记

...nbsp;       JAVASCRIPT—(慕课网)入门篇我们来看看如何写入JS代码?你只需一步操作,使用<script>标签在HTML网页中插入JavaScript代码。注意,<script>标签要成对出现,并把JavaScript代码写在<script>... 查看详情