概述
关于前期项目中的问题,做一下总结:后续还是用MK来写,直接复制,文本样式没了。
1.List对象 排序
public interface Comparable<T> {
int compareTo(T var1);
}
让Bean执行此接口,重写compareTo() 来对比对应的属性
Collections.sort(output); 最后使用集合的sort方法即可
2. 组合View
public class HeaderViewextends RelativeLayout {
public HeaderView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
public void initView(Context context) {
View view = LayoutInflater.from(context).inflate(R.layout.header, this);
}
在子View 比较多,全部在Activity 中代码比较杂乱时,通过抽象成View的模式
set/get 一些参数和属性,代码更加清晰(配合MVP 模式)
(Contract 中定义presenter数据代理+view显示,Activity/Fragment 中只负责主要的界面显示)
3.获取布局截图
frameLayout.setDrawingCacheEnabled(true);
Bitmap tBitmap = frameLayout.getDrawingCache();
// 拷贝图片,否则在setDrawingCacheEnabled(false)以后该图片会被释放掉
tBitmap = tBitmap.createBitmap(tBitmap);
frameLayout.setDrawingCacheEnabled(false);
需要设置Activity为 android:hardwareAccelerated="false" (否则拿到的为null)
从图片缓存中获取Bitmap
4.枚举与Int
public enum MoreBean {
MoreActivity(0),
ScannerActivity(1);
private int type;
MoreBean(int iValue) {
this.type = iValue;
}
public int type() {
return this.type;
}
}
MoreBean myType = MoreBean.values()[1]; index 转化为枚举
int index = MoreBean.MoreActivity.type(); 枚举转化为 int
4.基于MigrationHelper的DB保留数据升级
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {
MigrationHelper.migrate(db, new MigrationHelper.ReCreateAllTableListener() {
@Override
public void onDropAllTables(Database db, boolean ifExists) {
DaoMaster.dropAllTables(db, ifExists);
}
}, VideosDao.class);
}
Helper直接拿来用
5.转化File与Uri
Android N以后,不能直接从文件得到Uri
需要设置manifest FileProvider 并配合
File file = new File(picturePath);
Uri uri = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
uri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID+".provider", file);
} else {
uri = Uri.fromFile(file);
}
6.WebView 与alert
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show();
result.confirm();//return true,表示拦截alert, 需要给js返回结果,否则js不会往下执行
return true;
}
WebView 中捕获js的alert 弹窗,一定要有 JsResult 的确认,否则js不会往下执行
6.屏蔽返回按键
配合style <item name="android:windowCloseOnTouchOutside">false</item> 来使用
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
return true;
}
return super.onKeyDown(keyCode, event);
}
7.Fragment 与Adapter
Fragment中,onCreate 第一次创建时,初始化一些数据
onCreateView 在每次显示,都会重新绘制view 对于一些非实时数据,不宜多次refresh 数据,而应该在onCreate
中进行请求,结合onCreate 中创建Adapter 后续只是View的渲染,数据不用变
Adapter适配器作为数据而存在,可以在onCreate 中创建,并new List 数据
后续再setData notifyDataChange()
8.ViewPager 预加载
1 ViewPager setOffscreenPageLimit 3
设置预加载量3,除了显示的Fragment ,之后的3个Fragment会被预加载
9.Debuggable 调试开关
1 android:debuggable="true"
设置参数,在编译release 版本时,覆盖安装,可以run-as 查看数据库
https://blog.csdn.net/huaxun66/article/details/52288969
10.Webview 查找数据
存在数据不高亮的情况,通过反射调用setFindIsUp 设置即可
public void toogleSetFindIsUp(WebView webView) {
try {
for (Method m : WebView.class.getDeclaredMethods()) {
if (m.getName().equals("setFindIsUp")) {
m.setAccessible(true);
m.invoke((webView), true);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
11.图片小红点
图片或文字上的小红点:自定义FrameLayout 下的ImageView 和View(红点)
配合attr 和set方法,设置红点显示与隐藏
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/red_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true" />
<View
android:id="@+id/red_point"
android:layout_width="@dimen/offset_5dp"
android:layout_height="@dimen/offset_5dp"
android:visibility="gone"
android:layout_gravity="end"
android:background="@drawable/all_item_red"/>
</FrameLayout>
最后
以上就是要减肥茉莉为你收集整理的Android 项目总结(1)_20180808的全部内容,希望文章能够帮你解决Android 项目总结(1)_20180808所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复