Android开发个人总结常用的api

前言

  • 这只是记录下开发过程中常用的api,是经常可能忘了导致去百度的

  • 我还是希望大家最好记在脑子里,需要也提倡查找api,但我感觉只有记住了才能融会贯通,满足需求。每次查出来的,怕不了解,不敢修改等等就不好了

  • 我会记住确定不会忘了,我就会删除一条。如果第二次进来看到怎不见了呢,也不用吃惊哈,序号也会没有

开始吧

1、禁止用户按返回键关闭界面

Api: onKeyDown return true即可
代码如下:

override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
    if (keyCode == KeyEvent.KEYCODE_BACK ) {
        
        return true//不执行父类点击事件
    }
    return super.onKeyDown(keyCode, event)
}

2、获取资源颜色快捷方法

Api: ContextCompat.getColor(mActivity!!, R.color.m_red_one)
示例代码:

tv.setTextColor(ContextCompat.getColor(mActivity!!, R.color.m_red_one))  

3、动态添加布局

Api: LayoutInflater.from
平常都是工具类封装好,希望没有封装时,也能随手写出来
注意:这个方法参数还有点玄学,自己研究了
示例代码:

LayoutInflater.from(mActivity).inflate(R.layout.login_study_plan_job_item, ll_job, false)

4、RecyclerView添加item间距

Api: rv.addItemDecoration
示例代码:

rv_learn_direction.addItemDecoration(object :RecyclerView.ItemDecoration(){

        override fun getItemOffsets(outRect: Rect, itemPosition: Int, parent: RecyclerView?) {
            super.getItemOffsets(outRect, itemPosition, parent)
            outRect.right = UtilHelper.dip2px(mActivity,16f)
            outRect.bottom = UtilHelper.dip2px(mActivity,16f)
        }
    })

注意这个添加一次,也就是这代码只能运行一次,因为每次addItemDecoration都是有效的,会叠加间距。
所以一般放在初始化操作,不要放在接收数据,操作adapter时操作。

5、监听EditText的输入改变

Api:addTextChangedListener

6、adapter的item的点击事件

Api:onItemClickListener
示例代码:

getAdapter()?.onItemClickListener = object :BaseQuickAdapter.OnItemClickListener{
                override fun onItemClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) {
                    val item = getAdapter()!!.data[position]
                    
                        
                    }

                }
            }

8、adapter的item里面某个控件的点击事件

helper.addOnClickListener(R.id.tv_report)

getAdapter()?.setOnItemChildClickListener { _, view, position ->
                when (view.id) {
                    R.id.tv_report -> {

7、fragment代替布局,动态添加

示例代码:

val tr = supportFragmentManager.beginTransaction()
    tr.replace(R.id.fl_content, ActiveFragment.getInstance())
    tr.commitAllowingStateLoss()

8、点击切换fragment

示例代码:

fun switchFragment(posFragment: Int) {
    var fragment: Fragment? = null
    when (posFragment) {
        0 -> {
            if (ceoActiveFragment == null) {
                ceoActiveFragment = CEOActiveFragment.getInstance(source,position,sum,sheng_id,shi_id, qu_id)
            }
            fragment = ceoActiveFragment
        }
        1 -> {
            if (ceoTaskFragment == null) {
                ceoTaskFragment = CEOTaskFragment.getInstance(source,position,sum,sheng_id,shi_id,qu_id)
            }
            fragment = ceoTaskFragment
        }

    }
    if (fragment == null) {
        return
    }
    val trx = supportFragmentManager.beginTransaction()
    //隐藏当前fragment
    if (null != mCurrentFragment) {
        trx.hide(mCurrentFragment!!)
    }
    if (!fragment.isAdded) {
        trx.add(R.id.fl_content, fragment)
    } else {
        trx.show(fragment)
    }
    mCurrentFragment = fragment
    trx.commitAllowingStateLoss()

}

9、TextView也可以中间省略号

android:ellipsize="middle"
示例代码:

android:ellipsize="middle"
android:maxWidth="110dp"
android:singleLine="true"  

10、canvas绘制图片

drawBitmap
示例代码:

canvas.drawBitmap(bitmap, left, top, paintImage);  

11、以SP单位设置TextView的textSize

TypedValue.COMPLEX_UNIT_SP
示例代码:

bar_title.setTextSize(TypedValue.COMPLEX_UNIT_SP,17f)  

12、TextView显示html富文本

示例代码:

String result = "实时更新中,当前股票行情:<font color='red'>%d</font>";
result = String.format(result, (int) (Math.random() * 5000 + 1000));
mTv.setText(Html.fromHtml(result));

13、放快速双击

RxView.clicks(tv_video_price)
            .throttleFirst(2, TimeUnit.SECONDS)
            .subscribe(object : Consumer<Any> {
                override fun accept(t: Any?) {
                    //弹出视频详情,视频暂停
                    
                }

            })  

14、对于Application,Service,Activity三者的应用场景

context.png

new View(context) 也可以用Application的

15、Android自带的判断是否有某个权限

ContextCompat.checkSelfPermission
示例代码:

if (ContextCompat.checkSelfPermission(activity!!, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
        //不具有打电话权限,需要进行权限申请
        ToastUtils.showCustomToast("没有电话权限")
        return
    }  

判断某个权限是否永久拒绝(需要在拒绝里面进一步判断):
if(!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CALL_PHONE)){

}

16、单独刷新某一Item

notifyItemChanged(position)
示例代码:

        if (getHeaderLayoutCount() > 0) {
            notifyItemChanged(i + getHeaderLayoutCount(), "点赞成功");
        } else {
            notifyItemChanged(i, "点赞成功");
        }
        break;

17、控件执行补间动画

AnimationUtils.loadAnimation
示例代码:

var translateAnim = AnimationUtils.loadAnimation(this,R.anim.view_anim)
tv_content.startAnimation(translateAnim)   

18、控件执行属性动画

ObjectAnimator.ofFloat
示例代码:

ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"rotationX",0,270,0);  
animator.setDuration(2000);  
animator.start();

19、正确的List遍历方法

Iterator iterator = list.iterator();
while (iterator.hasNext()){
    System.out.println(iterator.next());
}  

20、requestLayout,invalidate,postInvalidate

invalidate :只调onDraw(),在UI线程调用
postInvalidate:只调onDraw(),在子线程调用
requestLayout:onMeasure、onLayout、onDraw ,在UI线程调用

21、Float相加减精度问题

切记float类型的相加减运算多次很容易出问题
示例代码:

public static double addTwo(double a, double b) {
    BigDecimal bd1 = new BigDecimal(Double.toString(a));
    BigDecimal bd2 = new BigDecimal(Double.toString(b));
    return bd1.add(bd2).doubleValue();
}  

22、每个Intent中只能指定一个action,但能指定多个category。新指定的category也需要在隐式启动时添加

只有当<data>标签中指定的内容和Intent中携带的Data完全一致时,当前Activity才能够响应该Intent。

23、在一个activity启动模式为singleTop且本身在前台时,再次启动当前activity的生命周期如下:

onPause()->onNewIntent->onResume

24、假设:先启动Activity A->在Activity A中启动Activity B->按Back键

按Back键时的生命周期为B.onPause()->A.onRestart->A.onStart->A.onResume-> B.onStop->B.onDestroy

25、补充:灭屏时,onPause()和onStop()会依次被调用

屏亮时,onRestart(),onStart(),onResume()会依次被调用

26、Arrays.asList()方法接受一个数组或者一个用逗号分隔的元素列表

Arrays.asList(1,2,3,4,5)

27、不知道LinearLayout还是其他布局,可以用ViewGroupParams

ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams)getLayoutParams()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,248评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,681评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,443评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,475评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,458评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,185评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,451评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,112评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,609评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,083评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,163评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,803评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,357评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,357评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,590评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,636评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,925评论 2 344

推荐阅读更多精彩内容