; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity..., android.R.anim.slide_out_right); // overridePendingTransition(android.R.anim.fade_in...> android="http://schemas.android.com/apk/res.../android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com.../android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com
希望在 GitLab 中对 2 个 branch 进行合并,如何创建 Pull Request 并且如何进行合并呢?...在 GitLib 的 Web 界面中选择 Merge Requests 然后再界面中选择新建一个 Merge Request。...在弹出的界面中,单击提交合并按钮来进行合并 随后将会显示合并的按钮来进行合并,你需要单击这个按钮,否则的话是没有办法进行合并的。
前言 TableView界面可以说是移动App中最常用的界面之一了,物品/消息列表、详情编辑、属性设置…… 几乎每个app都可以看到它的身影,如果不做分层处理,眉毛胡子一把抓,最后的扩展和维护简直是个噩梦...所以如何优美地实现一个TableView界面,就成了iOS开发者的必备技能。...那篇文章中的思路是极好的,但是看了Dome并不感觉有多简单,新方式下的代码还是一样负责,我个人觉得可以优化的,但是其中使用 tableViewModel封装cell的布局逻辑,将所有的布局逻辑集中起来,...UITableViewController中的实例使用 cell的ViewModel 以及Model的代码设置。...(如 刷新和公用设置的逻辑)。
希望在 GitLab 中对 2 个 branch 进行合并,如何创建 Pull Request 并且如何进行合并呢? 在 GitLib 的 Web 界面中选择 Merge Requests ?...然后再界面中选择新建一个 Merge Request。 在左侧选择需要合并的 Branch,在右侧选择合并到的 Branch, 选择完成后单击按钮比较 branch 并且合并。 ?...在弹出的界面中,单击提交合并按钮来进行合并 ? 随后将会显示合并的按钮来进行合并,你需要单击这个按钮,否则的话是没有办法进行合并的。 ?
前言 Android 开发中我们普遍使用今日头条的适配框架。...转换为 px 的公式 px = dp * density 来实现适配,通过在运行时动态修改 density 值的大小,使得修改后计算出的屏幕宽度就等于设计稿的宽度,从而使得在不同屏幕尺寸下我们都可以直接使用设计稿给出的...所以Jetpack Compose中我们也可以参考这种方式做适配。 只适配单方向 假如屏幕 长是817dp,应用只显示为横屏。...在主题中设置 我们也可以抽取到 MaterialTheme 中,使其默认生效,进一步减少代码量。
之前曾介绍过Android的UI设计与后台线程交互,据Android API的介绍,service一般是在后台运行的,没有界面的。那么如何实现service动态更新UI界面呢?...案例:通过service向远程服务器发送请求,根据服务器返回的结果动态更新主程序UI界面,主程序可实时关闭或重启服务。...;// 注册Broadcast Receiver 8 super.onStart(); 9 } 停止service命令 主程序activity可发布广播,用于向后台service传递数据或控制信息,如停止...调用方法启动线程,自己来完成 8 return super.onStartCommand(intent, flags, startId); 9 } 实时发送 后台service在doJob()方法中连接服务器并向主程序实时发送广播...com.szy.ui.service"); 7 intent.putExtra("data", data); 8 sendBroadcast(intent);//发送广播 至此,我们实现了主程序通过接收广播实时更新应用的UI界面
前言 在 Android开发中,绘制UI时常需各种布局 今天,我将全面介绍Android开发中最常用的五大布局 含 Android Studio 2.2中新增的布局:约束布局(ConstraintLayout...能够接受触摸或者点击事件 android:state_checked 被checked了,如:一个RadioButton可以被check了。... 在布局文件main.xml中控件的属性设置: <Button android:id="@+id/startButton" android:layout_width=...布局形状(Shape) 作用:设置布局的颜色、边框线 使用:通过 xml编写 = shape.xml 具体使用 android="http://schemas.android.com...、大小 <stroke android:width="1dp" android:color="#000000" /> 在布局文件main.xml中控件的属性设置:
题目部分 如何在Oracle中写操作系统文件,如写日志? 答案部分 可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。...若想普通用户使用该包,则需要在SYS用户下执行“GRANT EXECUTE ON DBMS_LOCK TO USER_XXX;”命令。 Oracle使用哪个包可以生成并传递数据库告警信息?...在CLIENT_INFO列中存放程序的客户端信息;MODULE列存放主程序名,如包的名称;ACTION列存放程序包中的过程名。该包不仅提供了设置这些列值的过程,还提供了返回这些列值的过程。...如何在存储过程中暂停指定时间? DBMS_LOCK包的SLEEP过程。例如:“DBMS_LOCK.SLEEP(5);”表示暂停5秒。 DBMS_OUTPUT提示缓冲区不够,怎么增加?...如何在Oracle中写操作系统文件,如写日志? 可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。
ConstraintLayout 可使用扁平视图层次结构(无嵌套视图组)创建复杂的大型布局。...指定位置的字眼,如Top、Bottom、End、Start,它们组合使用可用来确定相对位置:app:layout_constraint{}_to{}Of 相对父 layout 的定位 将子 view 对齐到父...id/tv2" /> 引导线约束 Guideline 在 ConstraintLayout 中添加引导线...因此,它与使用 Wrap Content(上面)之间的区别在于,将宽度设为 Wrap Content 会强行使宽度始终与内容宽度完全匹配;而使用 layout_constraintWidth_default...layout 中设置 android:layout_width="0dp"和android:layout_height="0dp"。 确定好周围的参照线。
.gradle\wrapper\dists 目录 gradle-x.xx-all 的文件夹 Gradle在android中基本使用 Gradle在android中基本使用 1.mobile-stage.../app/build.gradle apply plugin: 'com.android.application' //声明是Android程序 android { //编译sdk的版本 compileSdkVersion...build.gradle中添加maven仓库的位置 2.项目中的build.gradle引用jar 用冒号分割: groupId:artifactId:version 在项目中就可以使用jar了...Build时失败了两次,对比下demo和依赖库中是没有lint检查。...task代表着Gradle构建过程中可执行的最小单元。例如当构建一个组件时,可能需要先编译、打包、然后再生成文档或者发布 等,这其中的每个步骤都可以定义成一个task。
DeepLink 一个在Telegram中的dribbble链接, 点击后直接跳转到我的 Mango中, 是不是很神奇? 为什么要使用DeepLink?...我们使用@DeepLink注解并且标注出将会有一个参数被标识为id....使用方法 将下面的代码添加至build.gradle文件中: dependencies { compile 'com.airbnb:deeplinkdispatch:3.1.0' annotationProcessor...应用包含了多个module(例如独立的Android library工程), 我们需要为应用中的每一个Module都添加一个@DeepLinkModule注解类, 只有那样DeepLinkDispatch...com.airbnb.deeplinkdispatch.* { ; } -keepclasseswithmembers class * { @com.airbnb.deeplinkdispatch.DeepLink ; } 小贴士: 不要忘记在混淆规则中包含我们使用过的自定义注解
如果你使用的是Java,那么就在build.gradle中引入如下配置: dependencies { implementation 'org.litepal.android:java:3.0.0...' } 而如果你使用的是Kotlin,那么就在build.gradle中引入如下配置: dependencies { implementation 'org.litepal.android:kotlin...T.class这样的语法在Java中是不可能的,而在Kotlin中借助泛型实化功能就可以使用T::class.java这样的语法了。...而通过刚才泛型实化部分的讲解,我们知道Kotlin中是可以使用T::class.java这样的语法的,因此我在LitePal 3.0.0中扩展了这部分特性,允许通过指定泛型来声明查询哪张表中的内容。...另外也可以阅读我写的专栏《Android数据库高手秘籍》,同样对LitePal的各种使用方法进行了详细地剖析。
背景 如何在 Android 模拟器中模拟 GPS 位置?本文记录了使用方法。 2.实现方法 2.1 方案一:使用 telnet 可以通过 Telnet 连接到仿真器。...我们借助谷歌地图的链接来实现: 1、打开谷歌地图,选择一个开始位置,和一个结束位置,出现 “路线”后,复制 浏览器中的连接地址。...image.png 在 mapstogpx 中粘贴路线网址并下载gpx文件的图例。 image.png 4....扩展 使用 telnet 连接 模拟器,进入 模拟器的控制台( Android Console ) windows 下使用 telnet,mac 下使用 nc,指令如下: nc localhost 5554...5..参考: https://newbedev.com/how-to-emulate-gps-location-in-the-android-emulator https://developer.android.com
介绍 之前介绍了如何使用命令行将Jar包根据配置文件进行ProGuard,以及ProGuard的过程,会遇到的问题等。接下来会介绍常用的ProGuard如何配置参数。...不常用的可以在官网中查询如何使用。 java -jar proguard.jar @myconfig.pro Filter 每一个类、属性、方法都会有一个全名,例如java.lang.String。...这些文件不会被打包到output jar包中。指定的Library应该至少包含一个Class文件被Application Class文件中使用extended继承了。...所以你不能使用这个option。如果因为这个option无法找到那个class的话 ,ProGuard会打印出来Warning的。..., android.util.AttributeSet, int); public void set*(...); } -keepclassmembers Keep住类中的成员。
前言 经常我们会有这样的需求,B页面操作后,要求A页面处理相关数据,像这样一般我们都是,要么B页面保留A页面的引用,要么使用广播,但是写起来还是想对麻烦的,用Rxbus就可以很容易和优雅的解决 相同功能的组件用的比较多的有...Otto(不再维护不推荐使用)和EventBus 如果我们的项目使用Rxjava的话 我就比较推荐用Rxbus了 如果项目中没有使用Rxjava 那还是使用EventBus 吧 毕竟Rxbus...只有500+的Star 而EventBus可是1W+ 而且Rxbus`很多地方还不完善 使用 总的来说 我们要做的无外乎两件事:发送事件 和 接受事件 但是接受事件的对象一定要先注册到Rxbus中
在特定场合下,并不是所有类型都被使用,如果没有被使用,可以用java.lang.Void类型代替。...在使用的时候,有几点需要格外注意: 1.异步任务的实例必须在UI线程中创建。 2.execute(Params... params)方法必须在UI线程中调用。...:name="android.permission.INTERNET"/> 我们来看一下运行时的界面: ?...以上几个截图分别是初始界面、执行异步任务时界面、执行成功后界面、取消任务后界面。执行成功后,整个过程日志打印如下: ? 如果我们在执行任务时按下了“cancel”按钮,日志打印如下: ?...mFuture对象的done()方法里,构建一个消息时,这个消息包含了一个AsyncTaskResult类型的对象,然后在sHandler实例对象的handleMessage(Message msg)方法里,使用下面这种方式取得消息中附带的对象
使用intent在活动间传递值 首先是 MainActuvity 活动(注册界面 写完个人信息点击注册 ) 跳转到 In 活动 (通过 intent 获得 MainActivity 中的信息 ) 效果图如下...:id="@+id/root" 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" android:layout_width..." android:layout_height="wrap_content" android:text="用户名" android...> android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android
前言 Android原生的多线程和异步处理简直糟透了,反复的嵌套让代码看起来十分不明了,多线程上也没有iOS的dispatch好用,但是用了Rxjava后就会有所改善,虽然代码量看起来会多一点,但是逻辑就清晰多了...在一个正确运行的事件序列中, onCompleted() 和 onError() 有且只有一个,并且是事件序列中的最后一个。...但是不能就都用Flowable 因为Observable的性能较高 Single: 和Observable,Flowable一样会发送数据,不同的是订阅后只能接受到一次 普通Observable可以使用...,主线程中使用数据生成页面 Observable .create(new ObservableOnSubscribe() { @Override...那我们只会接受到错误 而不是错误的前一个事件 Android中应用 添加依赖 implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' implementation
Android中SharedPreferences使用小记 一、引言 Android中使用SharedPreferences来进行简单数据的持久化处理,从名字就可以了解,其设计目的是为了保存应用程序的一些偏好设置...,如音量,主题等信息。...其与iOS开发中的NSUserDefault十分类似,并且,他们的实质都是采用XML格式的文件来存储数据。...如果要保证数据立马存入磁盘,要使用commit()方法。 ...} }; //进行注册 sharedPreferences.registerOnSharedPreferenceChangeListener(listener); 温馨提示:可以在Android
使用Android studio3.2,在gradle中中配置: 在project的bulid.gradle中增加: classpath 'com.google.protobuf:protobuf-gradle-plugin...在APP目录下的buid.gradle中,增加: apply plugin: 'com.google.protobuf' android { sourceSets { main {...如: syntax = "proto3"; option java_package = "com.newcapec.protobuf"; message gps_data { int64 id...最后给个使用的demo,序列化和反序列化: package com.newcapec.testsqllite.protobuf; import com.google.protobuf.InvalidProtocolBufferException
领取专属 10元无门槛券
手把手带您无忧上云