前言
這只是記錄下開發(fā)過程中常用的api,是經(jīng)常可能忘了導(dǎo)致去百度的
我還是希望大家最好記在腦子里艰管,需要也提倡查找api,但我感覺只有記住了才能融會貫通途乃,滿足需求乖仇。每次查出來的娘赴,怕不了解规哲,不敢修改等等就不好了
我會記住確定不會忘了,我就會刪除一條诽表。如果第二次進來看到怎不見了呢唉锌,也不用吃驚哈,序號也會沒有
開始吧
1竿奏、禁止用戶按返回鍵關(guān)閉界面
Api: onKeyDown return true即可
代碼如下:
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
if (keyCode == KeyEvent.KEYCODE_BACK ) {
return true//不執(zhí)行父類點擊事件
}
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、動態(tài)添加布局
Api: LayoutInflater.from
平常都是工具類封裝好泛啸,希望沒有封裝時绿语,也能隨手寫出來
注意:這個方法參數(shù)還有點玄學(xué),自己研究了
示例代碼:
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都是有效的宗雇,會疊加間距昂芜。
所以一般放在初始化操作莹规,不要放在接收數(shù)據(jù)赔蒲,操作adapter時操作。
5良漱、監(jiān)聽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代替布局矾兜,動態(tài)添加
示例代碼:
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()
//隱藏當(dāng)前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單位設(shè)置TextView的textSize
TypedValue.COMPLEX_UNIT_SP
示例代碼:
bar_title.setTextSize(TypedValue.COMPLEX_UNIT_SP,17f)
12蒋失、TextView顯示html富文本
示例代碼:
String result = "實時更新中返帕,當(dāng)前股票行情:<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三者的應(yīng)用場景
new View(context) 也可以用Application的
15、Android自帶的判斷是否有某個權(quán)限
ContextCompat.checkSelfPermission
示例代碼:
if (ContextCompat.checkSelfPermission(activity!!, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
//不具有打電話權(quán)限,需要進行權(quán)限申請
ToastUtils.showCustomToast("沒有電話權(quán)限")
return
}
判斷某個權(quán)限是否永久拒絕(需要在拒絕里面進一步判斷):
if(!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CALL_PHONE)){
}
16链韭、單獨刷新某一Item
notifyItemChanged(position)
示例代碼:
if (getHeaderLayoutCount() > 0) {
notifyItemChanged(i + getHeaderLayoutCount(), "點贊成功");
} else {
notifyItemChanged(i, "點贊成功");
}
break;
17偏竟、控件執(zhí)行補間動畫
AnimationUtils.loadAnimation
示例代碼:
var translateAnim = AnimationUtils.loadAnimation(this,R.anim.view_anim)
tv_content.startAnimation(translateAnim)
18、控件執(zhí)行屬性動畫
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 :只調(diào)onDraw()褪子,在UI線程調(diào)用
postInvalidate:只調(diào)onDraw(),在子線程調(diào)用
requestLayout:onMeasure骗村、onLayout嫌褪、onDraw ,在UI線程調(diào)用
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也需要在隱式啟動時添加
只有當(dāng)<data>標(biāo)簽中指定的內(nèi)容和Intent中攜帶的Data完全一致時缨伊,當(dāng)前Activity才能夠響應(yīng)該Intent。
23进宝、在一個activity啟動模式為singleTop且本身在前臺時,再次啟動當(dāng)前activity的生命周期如下:
onPause()->onNewIntent->onResume
24刻坊、假設(shè):先啟動Activity A->在Activity A中啟動Activity B->按Back鍵
按Back鍵時的生命周期為B.onPause()->A.onRestart->A.onStart->A.onResume-> B.onStop->B.onDestroy
25、補充:滅屏?xí)r,onPause()和onStop()會依次被調(diào)用
屏亮?xí)r,onRestart()党晋,onStart()谭胚,onResume()會依次被調(diào)用
26、Arrays.asList()方法接受一個數(shù)組或者一個用逗號分隔的元素列表
Arrays.asList(1,2,3,4,5)
27未玻、不知道LinearLayout還是其他布局灾而,可以用ViewGroupParams
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams)getLayoutParams()