AAPT: error: resource android:attr/dialogCornerRadius not found.
添加相应的format
上面的属性一般不会相信爱那个运行,我们搜索控件名称查看什么地方使用
这个v-28的报错,我们统一版本
build之后会显示报错,我们不要改一个翻一个,下面都是;
resource android:attr/dialogCornerRadius not found
build时引用到了v28包,导致不兼容的问题
gradle.properties文件中 添加一行
android.enableAapt2=false
This project uses AndroidX dependencies, but the 'android.useAndroidX' property is not enabled.
在这个文件里添加两行代码,
android.useAndroidX=true android.enableJetifier=true
buildscript里的repositories与allprojects里的repositories 区别:
- buildscript里是gradle脚本执行所需依赖,分别是对应的maven库和插
- 2.allprojects里是项目本身需要的依赖
1. mavenCentral():
mavenCentral()别名意味着从中央Maven 2存储库中获取依赖项.
repositories { mavenCentral() } 用于访问此存储库的URL为 https://repo.maven.apache.org/maven2 /.该存储库的名称为MavenRepo.
2. jcenter():
jcenter()别名表示从 Bintray的JCenter Maven存储库中获取依赖项
3. mavenLocal():
mavenLocal()别名意味着从本地Maven存储库中获取依赖项.
实际上,所有3个都是Maven存储库.我们通过使用其Maven存储库的URL地址或在本地文件系统中的位置来将其用于构建.
使用URL:
repositories { maven { url("https://plugins.gradle.org/m2/") } }
通过使用本地文件系统:
repositories { maven { url '../maven-repo' } }
Gradle具有三个"别名" ,当我们向构建中添加Maven存储库时可以使用它们.
Jcenter vs. mavenCentral
jcenter()和mavenCentral()是Android Studio中Gradle插件的存储库
早期的Android Studio版本使用mavenCentral(),并在一段时间后切换到jcenter.
这是因为在性能和内存占用方面,jcenter()优于mavenCentral():
- Jcenter是世界上最大的Java存储库
- 通过 https协议通过CDN服务实现Jcenter 安全和使用 http的Android Studio 0.8版本mavenCentral() 协议
- Jcenter是mavenCentral的超集,其中包括许多其他功能 罐子
- Jcenter性能优于mavenCentral
- mavenCentral将自动下载许多与IDE相关的索引, 而且不需要的次数较少.
Maven和google
这两个是一样的
maven { url 'https://maven.google.com' } google()
Failed to transform artifact 'butterknife-runtime.aar (com.jakewharton:butterknife-runtime:10.1.0)'
接入 butterknife 10.1.0 和java 版本对应,java使用8;
我们看到的1.8 就是java8
androidX迁移
修改当前项目的 gradle.properties
android.useAndroidX=true android.enableJetifier=true 复制代码
Android:你好,androidX!再见,android.support - 简书
定时器
public class TimerTest{ public static void main(String[] args){ Timer timer = new Timer(); timer.schedule(new MyTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒执行一次,如果传递一个Data参数,就可以在某个固定的时间执行这个任务. while(true){//这个是用来停止此任务的,否则就一直循环执行此任务 try{ int in = System.in.read(); if(in == 's'){ timer.cancel();//使用这个方法退出任务 break; } } catch (IOException e){ // TODO Auto-generated catch block e.printStackTrace(); } } } static class MyTask extends java.util.TimerTask{ public void run(){ System.out.println("________"); } } }
sendMessageDelayed
sendMessageDelayed是如何实现延时发送消息的?
sendMessageDelayed是通过阻塞来达到了延时发送消息的结果,那么会不会阻塞新添加的Message?
android Module之间数据传递
(1)在子module创建回调接口(参数可变)
public interface OnChangeLisener { void onChanged(Date date); }
(2)在子module 实现类设置接口回调
//设置选择回调 public void setOnChangeLisener(OnChangeLisener onChangeLisener) { this.onChangeLisener = onChangeLisener; } 实现方法 onChangeLisener.onChanged(DateUtils.getDate(year, moth, day, hour, minut)); (3)在app module设置接口回调即可 private OnChangeLisener onChangeLisener; onChangeLisener =new OnChangeLisener() { @Override public void onChanged(Date date) { String messge = “”; } }; DatePickDialog dialog = new DatePickDialog(this); //设置选择回调 dialog.setOnChangeLisener(onChangeLisener); 方法二:使用 sharedpreferences 在一个module中保存数据 SharedPreferences sp = getSharedPreferences(“sp_demo”, Context.MODE_PRIVATE);sp.edit(). putString(“name”, “梅西”).putInt(“age”, 11).commit(); 在另一个module中获取数据 SharedPreferences sp = getSharedPreferences(“sp_demo”, Context.MODE_PRIVATE); String name = sp.getString(“name”, null);int age = sp.getInt(“age”, 0);