本人日常开发中总结一些细节记录。

1.JDK环境变量配置

JAVA_HOME=F:\Program Files\Java\jdk1.8.0_152

path=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

C:\ProgramData\Oracle\Java\javapath

classpath=,;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(注意:classpath要以.;开头英文状态下的“点 分号”)

2.adb/android环境变量配置

1.ANDROID_HOME法:能够类比JAVA_HOME法。

2.ANDROID_HOME=D:\adt-bundle\sdk

3.path=%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;

3.开启Java1.8 能够使用lambda表达式

1是app module 的话

1
2
3
4
5
6
7
8
9
10
11
12
13
14
defaultConfig {
//这个app
//为了开启Java8
jackOptions{
enabled true;
}
}
//开启Java1.8 能够使用lambda表达式
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

2是library module 的话 则需引用一个插件。

在项目根目录gradle 
1
classpath 'me.tatarka:gradle-retrolambda:3.7.0'

4.RecyclerView的GridView模式合并单元格

基本使用包含listview模式和GridView模式,最近使用GridView模式,
也就是使用GridLayoutManager 发现了一个有用的方法mLayoutManager.setSpanSizeLookup(),可以像word中表格合并单元格一样使用,合并掉一些单元格。 返回时占用列数
使用方法,在获取GridLayoutManager 以后调用一个方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup()
{
@Override
public
int getSpanSize(final int position) {
switch (mRecyclerViewAdapter.getItemViewType(position)) {
case ContentModel.TYPE:
return 1;
case CategoryModel.TYPE:
default:
return 3;
}
}
});

5.实现toobar 返回返顶级按钮

1
2
3
4
5
<activity android:name=".CheeseDetailActivity"
android:parentActivityName=".MainActivity">
<meta-data android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>

6. android Sudio 移除无用依赖库

1
2
3
4
5
6
7
8
9
10
11
12
android {
configurations {
all*.exclude group: 'com.android.support', module: 'support-annotations'
all*.exclude group: 'com.android.support', module: 'support-compat'
}
compile('com.android.support:appcompat-v7:25.1.1', {
exclude group: 'com.android.support', module: 'appcompat-v7'
})
compile('com.android.support:support-v4:25.1.1', {
exclude group: 'com.android.support', module: 'support-v4'
})
}

7. android Sudio 版本统一管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
allprojects {
repositories {
jcenter()
maven { url "https://dl.bintray.com/thelasterstar/maven/" }
maven { url "https://jitpack.io" }
}
project.ext {
compileSdkVersion=25
targetSdkVersion=25
buildToolsVersion='25.0.3'
minSdkVersion=14
supportVersion = "25.3.1"
}
tasks.withType(Javadoc) {
options {
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
}
}

使用示例:

1
2
3
4
5
6
7
8
9
10
11
android {
compileSdkVersion project.ext.compileSdkVersion
buildToolsVersion project.ext.buildToolsVersion
defaultConfig {
minSdkVersion project.ext.minSdkVersion
targetSdkVersion project.ext.targetSdkVersion
versionCode project.ext.versionCode
versionName project.ext.versionName
multiDexEnabled true
}

8.android studio 如何提示方法的用法

Android Studio也可以设置的。 Preferences > Editor >Generan> Show doc on mouse move:勾选上

9. svg 4.4 以下版本使用

4.4 以下版本 TextView drawableTOp 等 不能用svg

1
2
3
defaultConfig {
vectorDrawables.useSupportLibrary = true
}

10.项目新增图片后保存本地,读取相册没有更新解决方法

新增图片后,发送该广播i通知系统更新相册

1
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(path))));

11. gridView item Button 点击冲突事件

item 根布局属性

1
android:descendantFocusability=”blocksDescendants”

点击控件

1
2
3
4
5
android:focusable="false"
android:checked="false"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"

11.多屏幕适配

1
2
3
4
5
6
7
8
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true" />
</manifest>

12.解决系统改变字体大小的时候导致的界面布局混乱的问题

从android4.0起系统设置的”显示“提供设置字体大小的选项。这个设置直接会影响到所有sp为单位的字体适配,所以很多app在设置了系统字体后瞬间变得面目全非。下面是解决方案

例如:Contacts中需要在com.android.contacts.activities.TransactionSafeActivity加入以下code

1
2
3
4
5
6
7
8
@Override
public Resources getResources() {
Resources res = super.getResources();
Configuration config=new Configuration();
config.setToDefaults();
res.updateConfiguration(config,res.getDisplayMetrics() );
return res;
}

如果app中只是个别界面不需要,可改造下此方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Override
public Resources getResources() {
if(isNeedSystemResConfig()){
return super.getResources();
}else{
Resources res = super.getResources();
Configuration config=new Configuration();
config.setToDefaults();
res.updateConfiguration(config,res.getDisplayMetrics() );
return res;
}
}
// 默认返回true,使用系统资源,如果个别界面不需要,在这些activity中Override this method ,then return false;
protected boolean isNeedSystemResConfig() {
return true;
}

13.华为 手机 调试 LOCAT 日志不输出问题

用手机进行调试,在电脑上不显示logcat信息。

1
2
3
4
在拨打电话界面,录入*#*#2846579#*#*
自动进入开发界面菜单,按以下步骤:
ProjectMenu -> Background setting -> Log Setting 选择打开即可.

14.RecyclerView嵌套在ScrollView中显示不全

Android 6.0+ RecyclerView嵌套在ScrollView中显示不全
终极解决方案
终极解决办法是在RecyclerView的外部套上一层RelativeLayout

1
2
3
4
5
6
7
8
9
10
11
12
13
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants">
<android.support.v7.widget.RecyclerView
android:id="@+id/menuRv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/margin_16"
android:layout_marginRight="@dimen/margin_16"/>
</RelativeLayout>

发现RecyclerView完全显示出来了,完美解决!

15.PopUpWindow 防止导航栏显示

1
pw.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED);

16. list数快速倒叙

1
Collections.reverse()

17.kotlin 自定义listener 用法

1
2
3
4
5
6
7
8
9
10
11
12
13
class Test {
private var onActionListenerListener: ((String) -> Unit)? = null
fun setList( onActionListenerListener: (String) -> Unit){
this.onActionListenerListener=onActionListenerListener
}
fun onClick(){
onActionListenerListener?.invoke("测试回调函数")
}
}

更多总结敬请期待

最后更新: 2018年03月10日 19:32

原始链接: http://yangchaojiang.cn/2018/03/10/record-blog/