![](https://img-blog.csdnimg.cn/20200625202924120.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android第一行代码
文章平均质量分 67
以郭大侠的《Android第一行代码》第二版为依托,基于Android Studio进行样例的学习,以及对一些知识的巩固,相关代码将托管到码云。
梦否
【@】bug修复,程序代做
展开
-
什么是协程
在上篇:子线程使用消息机制更新UI将到AsyncTask现在已经被废弃的时候提到,在Android中使用多线程建议使用ThreadPoolExecutor线程池,或者使用JUC其他类,以及最后的协程方式。对于ThreadPoolExecutor等在线程池ThreadPoolExecutor已经介绍过了,这里不再介绍。协程,英文Coroutines,是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。最重要的是,协程不是被操作系统内核所管理,而完全是由程序所控制(原创 2021-07-29 15:41:02 · 128 阅读 · 0 评论 -
WebView控件,HttpURLConnection,network-security-config配置
1. WebView案例WebView控件的最简单使用案例:<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" androi原创 2021-07-29 14:46:24 · 376 阅读 · 0 评论 -
Android从相册选择图片,播放多媒体文件
1. 从相册载入图片类似的,首先添加清单文件中的权限:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>然后在代码中动态申请权限,最后使用startActivityForResult来进行请求回调,使用onActivityResu原创 2021-07-27 16:00:33 · 563 阅读 · 1 评论 -
Android摄像头调用,和FileProvider的使用
在第一行代码书中的这一节,有比较多的触及到了我的知识盲区。就来依次整理下:在Android运行时权限中说到,自从Android 6.0即API level 23开始将权限大致分为两类,分别是普通权限和危险权限,对于危险权限需要在配置文件中申明,且运行时动态申请。从Android 6.0开始读写SD卡被列为了危险权限,而在Android中的三种常用数据持久化技术提到过,程序私有目录下存储和读取,故而不需要读写权限,永久存储,即使应用被卸载,存储的数据依然存在。故而在这篇中使用getExternalCach原创 2021-07-27 11:47:46 · 599 阅读 · 0 评论 -
Android通知的使用,
通知既可以在Activity也可以在BroadcastReceiver中创建,但是一般只有当程序进入到后台的时候才需要使用通知。故而在Activity中创建通知比较少见,一般在BroadcastReceiver或者Service中创建。使用通知需要得到Notification对象,在AndroidX库中提供了NotificationCompat类的构造器来构建Notification对象。即:new NotificationCompat.Builder(@NonNull Context context,原创 2021-07-26 21:49:47 · 281 阅读 · 0 评论 -
Android中的三种常用数据持久化技术
一共有三种技术,分别是文件、SharedPreferences和数据库。1. 文件在Context类中提供了openFileOutput和openFileInput的方法,可以存储和读取指定的文件中的数据,默认文件存储在data/data/package name/files/目录下,故而只需要指定文件名即可。文件操作模式有MODE_PRIVATE、MODE_APPEND两种可选。默认为第一个。1.1 写入@Overrideprotected void onCreate(Bundle savedI原创 2021-07-26 13:31:38 · 1283 阅读 · 0 评论 -
广播接收器BroadCastReceiver
每个应用都可以注册广播接收器(BroadCastReceiver)来接受系统和其他应用发来的广播,也可以发送广播给其他应用。广播大致有四种类型:普通广播:即一种完全异步的广播,发出之后,所有广播接收器都可以收到。优点效率高,所有广播接收器都可以收到,但是不安全,因为广播接收器不能拦截。有序广播:是一种同步执行的广播,在广播发出后,同一时刻只有一个广播接收器可以收到广播,并且该广播接收器可以对该广播进行拦截。如果不拦截,则可以继续传给下一个广播接收器。且谁先收到广播也是有先后顺序的,通常根据Andro原创 2021-07-25 16:14:17 · 685 阅读 · 0 评论 -
Fragment的使用案例,Fragment动态加载限定符,返回栈,
1. 最简单案例(静态添加方式)旨在体验流程。在一个Activity中添加左右两个Fragment。left_fragment.xml布局文件:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width=原创 2021-07-25 15:03:34 · 292 阅读 · 3 评论 -
9图制作
新版的AndroidStudio的tools下面已经没有了,集成在了AS中,复制图片到目录中,然后右键,可以看见如下:也就是,点击Cerate 9-Path即可。然后,可以打开编辑器:简单拖动,就可以完成制作了。然后使用该图片在xml代码中,进行长宽的拉伸的时候,都有理想的效果。...原创 2021-01-31 11:55:06 · 100 阅读 · 0 评论 -
Intent回调
我们都知道在Intent中可以传递字符串、对象等,那么其实还可以返回数据到上一个活动中。而这个返回是只需要按Back键就可以。 在启动第二个Activity时,使用的就不是startActivity,而是startActivityForResult这个方法。在第二个页面中使用setResult(xxx, intent)就可以向上返回一个放置了结果内容的字符串的intent,然后在第一个Activity中的onActivityResult中就可以通过相关的get方法得到。在第一个Activity中使原创 2021-01-31 10:51:57 · 706 阅读 · 0 评论 -
意图Intent
文章目录1. 显式`Intent`2. 隐式`Intent`3. 打开指定域名地址网页4. 拨打电话我们都知道,在android中有两种意图对象,分别是显式Intent和隐式Intent两种。由于显式Intent的代码耦合性比较高,往往比例于后面软件的升级和迭代开发,故而常常考虑的是隐式的Intent。隐式Intent的比较含蓄,他并不会明确指出将要启动的活动,而是指定一系列更为抽象的action和category等信息,然后由系统去分析intent的意图,最后找到合适的活动去启动。【注】需要注意的是原创 2021-01-30 23:01:25 · 164 阅读 · 0 评论 -
系统自带Menu
文章目录1. 创建对应的`menu.xml`文件2. 需要在`Activaty`中将它实例化,加载到`Activaty`的`Menu`中3. 添加处理的响应回调android自带的有默认样式的设置,这里我们可以直接使用。1. 创建对应的menu.xml文件先创建目录,然后我们添加项目,<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/andr原创 2021-01-30 22:11:34 · 134 阅读 · 0 评论 -
build.gradle文件
这里写自定义目录标题1. 前言2. `Project`下的`build.gradle`文件3. `app`下的`build.gradle`文件1. 前言Android studio采用的是gradle来构建项目。2. Project下的build.gradle文件但由于gradle这个项目构建工具却不是专门为了Android开发而写的,故而可以支持其他的语言,如Java、C++等。故而在当前项目的build.gradle文件中需要指定该项目所依赖的gradle版本。如:buildscript {原创 2021-01-30 16:54:24 · 161 阅读 · 0 评论 -
自定义veiw
在ViewPager一篇中简单使用了原点指示器,这里来仿写一个。使用自定义控件的方式来进行。然后使用attrs.xml声明的方式来进行,即(主布局文件):<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"原创 2020-12-02 13:40:07 · 316 阅读 · 0 评论 -
ViewPager自动滚动
在上篇的ViewPager一文中,我们简单了解了ViewPager的一种实现方式。接着,我们看看如何实现它的自动滚动效果。因为在一些场景中需要这种效果,如广告条。思路比较简单:使用viewPager的viewPager.setCurrentItem来设置当前的Item;使用handler来进行定时调取移动项目;而之前的下边的指示点的变化是跟着viewPager的事件来的,即:class MyListener implements ViewPager.OnPageChangeListener{原创 2020-12-01 13:07:59 · 849 阅读 · 0 评论 -
ViewPager
ViewPager的使用类似于ListView的用法:在主布局文件中定义标签;定义ViewPager对应的Item的布局文件;自定义对应的适配器类和监听类;处理对应的事件;值得注意的是我们常见的ViewPager页面均有类似于轮播图的指示点,这个东西需要自定义。那么就开始简单使用下:1.1 自定义xml布局我这里在Activity中写ViewPager自动导入的包为:androidx.viewpager.widget.ViewPager,故而在xml文件中,我写法如下activity_l原创 2020-11-30 13:07:53 · 520 阅读 · 0 评论 -
androidstudio 新建module中需要引用
按照模块化开发思想,创建module能更好的协调开发。创建方式还是粘下:File->New->New ModuleAndroid Library创建本次测试所需的Activity在app下的入口Activity中使用Intent来启动Intent intent = new Intent();intent.setClass(TestActivity.this, LunchMainActivity.class);startActivity(intent);但,确找不到Lu原创 2020-11-29 09:56:28 · 259 阅读 · 0 评论 -
Android studio gradle下载出错
在网络上看见了修改地址的什么的,但是我的问题是gradle下载出错问题,配置了下貌似是没有什么用的。于是经过反复搜索终于看见了这篇文章:Gradle 下载、Gradle 手动安装这里就可耻的复制过来了:离线使用:gradle下载地址从上面地址中下载需要的Gradle文件,保存在规范路径(不解压 ),如:D:\softwares\gradle\gradle-5.4.1-all.zip。打开Android studio工程;切换到 Android 视图;找到 Gradle Scripts ;找到转载 2020-08-31 22:47:41 · 303 阅读 · 0 评论 -
关于动态申请权限
比较有意思的是,不能直接申请权限,否则会报未知错误。需要先判断,后申请:// 请求读写权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manif.原创 2020-06-27 16:15:00 · 289 阅读 · 0 评论 -
1. 了解Android
由于我想比较成体系的来描述或者说记录Android的开发。故而就还是按照书中的排版来进行做笔记。一. Android大致可以分为四层架构: Linux内核层、系统运行库层、应用框架层和应用层。Linux内核层Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了底层的驱动,如:显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等。系统运行库层这一层通过一-些C/C++库来为Android系统提供了主要的特性支持。如SQLite库提供了数据库.原创 2020-06-25 23:20:47 · 219 阅读 · 0 评论 -
Java代码设置Android全屏
很多做全屏都是:android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"但是,在Android Studio中,使用这种方式程序会异常退出。故而,还是考虑使用Java代码的方式来使屏幕全屏。 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /原创 2020-06-18 17:53:13 · 433 阅读 · 0 评论 -
页面延迟跳转Handler实现
首次安装的延迟跳转功能,相对来说比较友好。故而这里来记录下延迟跳转的实现。具体而言,在这篇文章中将使用Handler来实现。new Handler(new Handler.Callback() { // 这里会回调它本身的一个handleMessage方法 @Override public boolean handleMessage(Message message) { // 3秒后将调用这个handleMessage函数 startActivity(new Int原创 2020-06-18 14:23:59 · 483 阅读 · 0 评论 -
xUtils3注解方式编程
偶然了解到了在android中也有注解的方式编程,相信它会极大减少无用代码的书写。官网使用还是比较简单的:① 依赖implementation 'org.xutils:xutils:3.8.11'② 为整个项目创建一个Application,在这个Application中初始化public class MyApplication extends Application { @Override public void onCreate() { super.onCre原创 2020-06-18 11:13:46 · 183 阅读 · 0 评论 -
HelloCharts for Android的简单使用
这个插件的GitHub地址:地址为了方便使用,不妨下载它的jar包。这里使用最新的版本Release 1.5.8然后,需要将这个jar导入到项目中:地址也就是:然后,找到了这篇博客:手把手教你实现折线图之------安卓最好用的图表库hellocharts之最详细的使用介绍...转载 2020-06-15 12:40:11 · 455 阅读 · 0 评论 -
ListView的点击事件
开发环境:jdk 1.8 + adt-bundle-windows-x86_64_20140101提取码: j24g运行环境:mumu模拟器使用:adb_server connect 127.0.0.1:7555 本节内容参考《第一行代码》3.5.4章 ListView的点击事件。在ListView基本用法和优化中知道了ListView的基本用法,这里来看看点击事件。@Overr...原创 2020-04-02 11:51:16 · 1365 阅读 · 0 评论 -
ListView基本用法和优化
开发环境:jdk 1.8 + adt-bundle-windows-x86_64_20140101提取码: j24g运行环境:mumu模拟器使用:adb_server connect 127.0.0.1:7555 本章节内容源自《第一行代码》3.5节最常用和最难用的控件——ListView。以后的博客就按照《第一行代码》的内容来写。感觉这本书写的还是蛮好的。需要的本书pdf的同志可...原创 2020-04-02 11:34:24 · 288 阅读 · 0 评论 -
创建自定义控件
开发环境:jdk 1.8 + adt-bundle-windows-x86_64_20140101提取码: j24g运行环境:mumu模拟器使用:adb_server connect 127.0.0.1:75551. 基础知识在《第一行代码》中,该章节有张图,如下:所有的控件都是直接或者间接的继承自View;所有的布局都是直接或者间接的继承自ViewGroup;View也是V...原创 2020-03-31 17:48:27 · 325 阅读 · 1 评论 -
ProgressDialog
开发环境:jdk 1.8 + adt-bundle-windows-x86_64_20140101提取码: j24g运行环境:mumu模拟器使用:adb_server connect 127.0.0.1:7555效果: 可以点击非对话框处或者点击返回键退出这个对话框。 需要注意的是,如果设置了progressDialog.setCancelable(false);就不能...原创 2020-03-30 14:57:06 · 258 阅读 · 0 评论 -
AlertDialog
开发环境:jdk 1.8 + adt-bundle-windows-x86_64_20140101提取码: j24g运行环境:mumu模拟器使用:adb_server connect 127.0.0.1:7555效果:代码:AlertDialog.Builder dialog = new AlertDialog.Builder(this);dialog.setTitle("标题"...原创 2020-03-30 14:48:23 · 172 阅读 · 0 评论 -
Android进度条ProgressBar
开发环境:jdk 1.8 + adt-bundle-windows-x86_64_20140101提取码: j24g运行环境:mumu模拟器使用:adb_server connect 127.0.0.1:75551. 简介 这里简单介绍ProgressBar。有时我们需要在一个页面上显示一个进度条,因为在处理一些耗时程序的时候,这样可以给用户很好的体验。故而就需要用到Progre...原创 2020-03-30 14:34:19 · 559 阅读 · 0 评论