![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android
Boml小弟自学Android笔记,希望能帮助到各位
无所事事的程序员
时间留下的痕迹
展开
-
Android---自定义ViewGroup
效果图:ViewGroup子类:创建过程:1,构造方法2,添加子View方法3,测量(onMeasure),确认父类size4,调整子View的布局(onLayout)/** * 创建过程: * 1,构造方法 * 2,添加子View方法 * 3,测量(onMeasure),确认父类size * 4,调整子View的布局(onLayout) */public class VGTest extends ViewGroup { //存放传过来的子View数据原创 2020-10-14 22:10:04 · 316 阅读 · 0 评论 -
Android---AIDL的使用
每个应用程序都运行在自己的独立进程中,并且可以启动另一个应用程序的服务。在不同的进程间传递数据对象一个进程不能直接访问另一个进程的内存空间,如果想对话,则需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界首先做一个简单的练习:不传递参数,启动另一个应用程序的服务第一步:写服务端。Service(服务端):aidl:interface StudentAIDL { void AIDL_Student(String data); String reutrnStri原创 2020-05-23 22:29:59 · 202 阅读 · 0 评论 -
Android---消息机制源码分析
ThreadLocal:一个线程内部的数据存储类,可以在指定线程中存储数据,数据存储以后,只有在指定线程中可以获取到存储的数据。先看下以下代码:主要是重写了initialValue方法(请看下面的源码) @Test public void test(){ final ThreadLocal<String> threadLocal=new ThreadLocal<String>(){ @Nullable原创 2020-05-23 00:14:21 · 109 阅读 · 0 评论 -
Android---创建右上角菜单
在资源文件报下创建menu文件。可以从视图左侧将需要的菜单拖入如果想造多一行。则找到属性showAsAction,可以选择ifRoom(如果在空间允许的情况下创建)或者always在对应avtivity写回调方法 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_menu, menu); return super原创 2020-05-08 17:39:10 · 552 阅读 · 0 评论 -
Android---Room(三)
当表的结构发生变化时处理方法:下面方法共同点就是版本号+1最简单的方法就是在数据库创建时,执行破坏式的迁移.fallbackToDestructiveMigration()//破坏式迁移INSTANCE= Room.databaseBuilder(context.getApplicationContext(),WordDatabase.class,"word database") ...原创 2020-05-07 23:06:48 · 188 阅读 · 0 评论 -
Android---Room(二)
在前一篇的基础上优化代码。前一篇数据的操作放在了主线程。这里引入了异步任务来进行数据库的操作首先是(Word)bean类,没有变化:@Entitypublic class Word { @PrimaryKey(autoGenerate = true)//标记为主键。表示让它自动生成 private int id; @ColumnInfo(name="english...原创 2020-05-07 17:53:11 · 227 阅读 · 0 评论 -
Android---初探Lifecycle
这个东西的用途简单来说就是,来封装控件的各生命周期的方法。用一个例子说明。我们开始用一个不用Lifecycle的方法:Chronomete是一个计算器。这串代码的功能是当你打开程序时,它从0开始计时。当你退出去的时候,数值“暂停”。重新打开时,从那个时间继续计时。前面所谓的暂停不是真的暂停,因为**SystemClock.elapsedRealtime()**是系统开启时就开始计时,不会停下...原创 2020-05-07 01:12:56 · 189 阅读 · 0 评论 -
Android---ViewModel实现Fragment跨页面数据共享
前面完成了Navigation实现fragement的切换在最后,我们提到数值的传递问题。这篇我们在上一篇的基础上,增加一个ViewModel来实现数据的共享。直接上代码吧。也不是很难。首先是两个fragment。要注意的是fragment返回的view对象。HomeFragment:public class HomeFragment extends Fragment { p...原创 2020-05-06 01:02:11 · 9719 阅读 · 0 评论 -
Android---Navigation实现fragement的切换
首先,我们得知道fragement依赖于activityfragment的切换就跟栈一样,进栈出栈。我们先创建两个Fragment这两个方法不要勾选:工厂方法和接口回调。如果勾选的话,会闲的内容特别乱。所以建议不要勾选。在日常开发中,我们大多都是底部导航栏然后进行fragment的切换。这次做的是跟栈一样的。创建两个fragement之后,在res目录下创建navigation包...原创 2020-05-05 23:03:57 · 3726 阅读 · 1 评论 -
Android---AndroidViewModel
AndroidViewModel是系统提供的一个类,是ViewMode的一个子类。这一篇将来介绍下用AndroidViewModel。做一个简单的sp数值保存操作。在我们关掉程序后,重新打开时数值可以重新呈现因为SharedPreferences是继承Context的一个接口。所以得到对象需要context。AndroidViewModel:public class MyViewModel...原创 2020-05-05 18:48:15 · 2923 阅读 · 1 评论 -
Android---ViewModelSavedState
此文章的代码是由LiveData和ViewModel演变过来,需要看前面的知识点。比如,导入依赖之类,布局…用途:在进程被系统杀死时,数据能够得到保存。系统杀死不代表自己去杀死进程,而是异常杀死。比如,当你打开的程序很多。然后内存不够,系统就会自动的杀死一些进程。又或者屏幕的翻转。第一种方法:java:public class MyDataBinding extends AppComp...原创 2020-05-04 14:30:59 · 794 阅读 · 0 评论 -
Android---DataBinding
根据前面LiveData,这次将用DataBinding进行代码的一大步缩减。首先要使用DataBinding,要在gradle里面添加以下字段。之后再布局文件中可以看到有个小灯泡,点击第一个:之后会自动为你添加一个<layout>和<data>之后在相应的activity里,创建ActivityMyDataBindingBinding类对象:private ...原创 2020-05-03 01:33:45 · 257 阅读 · 0 评论 -
Android---LiveData
(看次篇需先看ViewModel)经过上次可以进行一些改良,可以发现上一篇的setText偏多。也就是对数据的更新操作在展示页面上。如果可以,我们尽量把展示归展示,操作归操作。首先,是ViewModel子类的改变:public class MyViewModel extends ViewModel { private MutableLiveData<Integer> l...原创 2020-05-03 00:39:50 · 210 阅读 · 0 评论 -
Android---ViewModel
在前面我们了解了横竖屏的切换会导致暂时数据的丢失。然后解决的办法是通过Bundle键值对的形式保存下来,再取出赋值。而ViewModel也可以实现这样的效果。接下来实现的效果是由两个按键的点击,可以对一个数进行变大,然后横竖屏的切换不会使得这个值初始化。先写一个类继承ViewModel:public class MyViewModel extends ViewModel { pub...原创 2020-05-02 23:35:06 · 318 阅读 · 0 评论 -
Android---屏幕的反转
在配置文件里面添加下面代码,则页面锁定在竖直状态如果需要横屏:在实际开发中,从竖屏换成横屏时,空间利用的可能不很满意。所以可以新建一个该页面的横屏布局...原创 2020-05-02 21:25:35 · 964 阅读 · 0 评论 -
Android---语言本地化
为了程序可以随着手机的语言切换,将整个程序的文字跟着切换,所以我们来做一下这个功能:在平时开发,我们通常可能是这样写:但这样写会有黄色警告,大概意思就是不建议这么写,但是也不会出现错误。但是这样写的后果就是后期维护不是很好。所以,建议这么写:而且这么写的好处还有就是可以语言本地化:点开string.xml点击进入,之后点击上边的“地球”(添加语言适配)输入“zh”可直接跳转到...原创 2020-05-02 14:47:55 · 420 阅读 · 0 评论 -
Android---SharedPreferences(sp存储)
sp存储数据类型:boolean,float,int,long,String数据保存路径:/data/data/packageName/shared_prefs/xxx.xml可以设置的数据只能是当前应用读取,别的应用不可以应用卸载时会删除此数据public class MyLoginDemo extends AppCompatActivity implements View.OnCl...原创 2020-04-30 17:06:58 · 418 阅读 · 0 评论 -
Android--通知栏
public void notificationManagerTest(View view){ NotificationManager manager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE); //下面的频道id一定要设置为State,不然会失效 Notifi...原创 2020-04-25 17:34:25 · 177 阅读 · 0 评论 -
Android--子线程中处理ui问题是三种方法
第一种:runOnUiThread其实也就是返回主线程去更新ui, public void changeText(View view){ new Thread(){ @Override public void run() { runOnUiThread(new Runnable() { ...原创 2020-04-25 16:11:29 · 289 阅读 · 0 评论 -
Android--Fragment懒加载
private Fragment tempFragment;private BaseFragemt getFragment(int position) { if(fragments!=null&&fragments.size()>0){ BaseFragemt baseFragemt=fragments.get(positio...原创 2020-04-22 10:50:39 · 122 阅读 · 0 评论 -
Android--极光推送小练习
1,第一步当然是在官网注册账户2,创建应用,应用的包名是:build.gradle里面的defaultConfig里面的applicationId(似乎很绕口)3,然后就是下载Demo,因为你在上一步填了包名,我的操作是,在一个项目里,添加工程,然后工程的名字就是你上一步填包名里的工程名4,因为你要将这个推送放进自己的应用下,所以建议的就是先把demo运行起来,所以接下来就是调demo5,...原创 2020-03-30 02:16:01 · 124 阅读 · 0 评论 -
Android--EventBus
EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。这里介绍下 主线程发送消息、发送粘性事件。布局展示:点击任一个跳转到下面的activity操作步骤如下:主线程发送消息1,注册2,解注册3,创建发送消息类4,发布消息5,接收消息发送粘性事件:1,创建发送消息类2,发布消息3,注...原创 2020-03-29 11:08:44 · 127 阅读 · 0 评论 -
Android--WebView的使用
这里只是单纯的一个webview的简单使用。布局:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.c...原创 2020-03-20 23:27:10 · 96 阅读 · 0 评论 -
Android--NestedScrollView
这个东西的作用是用于拉动时的。举个例子,你的界面上有轮播图和一个recylerview的时候。当你的recyclerview有一定的数量需要往下拉时。你就会发现,轮播图还在那里,但是列表往下拉了。嗯,直接上代码看下吧: <androidx.core.widget.NestedScrollView android:layout_width="match_parent" ...原创 2020-03-19 23:24:37 · 2344 阅读 · 0 评论 -
Android--xml会用到的几条语句
android:ellipsize="end" 当内容超出时,用省略号代替android:lines="2" 最多显示两行原创 2020-03-19 21:57:28 · 175 阅读 · 0 评论 -
Android--手势识别器
手势识别器 1,定义出来 2,实例化-把想要的方法给重写 3,在onTouchEvent()把事件传递给手势识别器 private GestureDetector detector;将detector实例化:里面的方法可以ctrl+o,看里面有什么方法 private void initView(final Context context) { ...原创 2020-03-13 00:05:15 · 155 阅读 · 0 评论 -
Android--自定义View类做一个按钮
一个视图从创建到显示过程中的主要方法1,构造方法实例化类2,测量measure(int,int)-->onMeasure(); 如果当前View是一个ViewGroup,还有义务测量孩子 孩子有建议权3,指定位置layout()-->onLayout(); 指定控件的位置,一般View不用写这个方法,ViewGroup的时候才需要,一般View不需要重写该...原创 2020-03-12 22:02:50 · 299 阅读 · 0 评论 -
Android--项目练习(一)
用底部导航栏和fragment做一个页面效果public class BaseActivity extends FragmentActivity implements RadioGroup.OnCheckedChangeListener { private RadioGroup radioGroup; private List<BasePager> listPage...原创 2020-03-10 13:08:51 · 318 阅读 · 0 评论 -
Android--底部导航栏
一般都用RedioGroup实现<LinearLayout 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"...原创 2020-03-09 23:04:20 · 104 阅读 · 0 评论 -
Android--下拉框
public class MyEdiSelect extends AppCompatActivity { private EditText et_main; private ImageView iv_main; private PopupWindow popupWindow; private ListView list; private MyAdapte...原创 2020-03-08 17:47:20 · 295 阅读 · 0 评论 -
Android--Glide的基本使用
有一点要注意的就是,高版本不支持http明文。所以地址要写https简单使用,点击按钮,执行各种方法。例子: //加载网络图片 public void one(View view) { Glide.with(this).load("https://seopic.699pic.com/photo/50008/9194.jpg_wh1200.jpg")...原创 2020-03-08 12:22:24 · 472 阅读 · 0 评论 -
Android--TabLayout的使用
首先需要依赖:implementation ‘com.android.support:design:28.0.0’之后就是布局代码:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"...原创 2020-03-07 14:56:18 · 170 阅读 · 0 评论 -
Android--ViewPager的使用
ViewPager一般来说都是用于完成图片的翻页,画面的翻页之类的效果。布局文件:外层是一个相对布局 <androidx.viewpager.widget.ViewPager android:layout_width="match_parent" android:layout_height="200dp" android:id="@+...原创 2020-03-02 21:55:17 · 572 阅读 · 0 评论 -
Android--RecyclerView的使用
首先第一步我们要使用RecyclerView就得导包千万不能导错 <androidx.recyclerview.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/r...原创 2020-03-01 23:44:44 · 248 阅读 · 0 评论 -
Android--Retrofit
Retrofit的使用在github搜索retrofit点进去,里面有官网的链接,链接有个Gradle的依赖。嗯,在工程里导入依赖…如果有看Okhttp的依赖那部分,这里应该懂得怎么搞。之后...原创 2020-02-29 01:10:39 · 271 阅读 · 0 评论 -
Android--OkHttp
下面的get和post都必须在子线程中执行get请求: private OkHttpClient client = new OkHttpClient(); String get(String url) throws IOException { Request request = new Request.Builder() .url(url)...原创 2020-02-27 21:55:06 · 685 阅读 · 0 评论 -
Android--网络安全配置
在res目录下新建一个xml文件夹,之后在下再新建一个network_security_config(xml文件,名字规范,当然名字也可以随便取)内容为:<network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubd...原创 2020-02-27 17:54:45 · 911 阅读 · 0 评论 -
Android--Fragment
activity继承FragmentActivity,然后没有什么其余代码。布局文件为:外边是一个水平的线性布局 <fragment android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" ...原创 2020-02-26 02:21:11 · 103 阅读 · 0 评论 -
Android--Context,Application,ANR,横竖屏切换
有些没有截图是因为之前都看过:比如启动activity个service这些上一段代码来理解下:这里新建一个类继承了Application。还有一个字符串是成员变量,并定义了set和get方法。public class MyApp extends Application { private String str; @Override public voi...原创 2020-02-25 17:23:22 · 415 阅读 · 0 评论 -
Android--ListView的优化
问题:原创 2020-02-25 12:25:06 · 108 阅读 · 0 评论