不积跬步,无以至千里;不积小流,无以成江海;
其实早就想开一个这样的blog,这样每次写代码有感的时候就可以来记录一下。由于拖延等等问题,今天才补上这么个开始,那么,就开始吧,万事,总得有个开始才好继续。
Android隐藏标题栏的区别
Android隐藏标题栏可以在清单文件里设置:
<!--这种方式是直接移除了标题栏,不占位-->
<activity android:name=".MainActivity"
android:theme="@android:style/Theme.Black.NoTitleBar"/>
也可以在onCreate方法中设置
//这种方式只是隐藏了 但是还会占位
requestWindowFeature(Window.FEATURE_NO_TITLE);
举例
我们应该都遇到过适配华为等带有虚拟按键的屏幕,这些按键占据了屏幕的底部,使我们的底部布局被遮挡。按照网上大部分的说法是因为沉浸式布局导致的,只需要设置
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fl_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">//设置这一句
</FrameLayout>
但是这会导致虚拟按键虚拟按键背景色会变成透明色。必须关闭沉浸式布局才行(可能吧,没有研究)。
可是突然发现你有可能根本没有配置沉浸式布局,也出现了这种情况。这时候,就是我上面说的代码设置隐藏标题栏的占位的原因了。你改为使用xml设置即可更正。
#编译出的gradle问题
编译时出现Error:No service of type Factory available in ProjectScopeServices.
在根目录的build.gradle中,直接将’ classpath com.github.dcendents:android-maven-gradle-plugin:1.3’更新到1.4.1就可以解决问题了。
其实gradle出问题解决方式相对固定:
- 查看gradle版本号
- 查看build_tools版本号
- 查看gradle/gradle-wrapper.properties是否是互联网路径(有些公司可能为了保持统一,将gradle的zip包下到本地,并在此文件中配置为本地路径)
- 在settings的gradle中查看是否选择了Use local gradle distribution 一般改为Use default gradle wrapper即可
viewPager的数据更新
更新的函数就是mPager.getAdapter().notifyDataSetChanged();
。但是,并非任何情况都会生效。
- Override getItemPosition in your PagerAdapter like this:
public int getItemPosition(Object object) {
return POSITION_NONE;
}
这是为了通知viewpager所有的view失效,此时调用notifyDataSetChanged()
函数就会触发更新。如果你需要使用到这个函数,那么,你应该再去写一个public函数去实现相同的功能。
- to setTag()method in instantiateItem() when instantiating a new view. Then instead of using notifyDataSetChanged(), you can use findViewWithTag() to find the view you want to update.
这种方式相当于你自己管理viewpager的view,然后手动去更新,但是显然不适合用于删除或者添加数据的情况。
AS2.2及以后版本,Failed to crunch file !
这个问题的根本原因是文件名(包括路径)太长了,AndroidStudio里路径名不能超过240个字符,所以,尝试把工程放到根目录试试。
UnsatisfiedLinkError
你可以在这里 看到这个错误的解释,简单来说,就是虚拟机找不到native函数的声明。这时候,你可以去看看你的library有没有load对,然后看看jni里面的命名是不是正确。
System.Load(library)找不到
首先,可能是笔误,名字弄错了。
其他隐蔽的可能就是,cpu平台的问题。
arm-v8 => arm64-v8a
arm-v7 => armeabi-v7a
arm-v5 => armeabi
x86 => x86
x86-64 => x86_64
mips => mips
mips-64 => mips64
在编译so时,有时候需要你能选择正确的cpu平台。
或者去过滤你的cpu平台,下面的是删除了64bit平台,防止apk只去64bit中寻找so,导致一些so找不到。当然,这个需要看你具体需要的so包。
android {
....
defaultConfig {
....
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
}
文档信息
- 本文作者:Yawei Wang
- 本文链接:https://pfcstyle.github.io/2016/09/24/Android-Skills-Total/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)