一些可能有用的Android代码
2011 年 11 月 22 日
没地儿放它们。
RingtoneManager
Custom View中的
渐隐重启Activity
// 1 startActivity(Intent(this, MainActivity::class.java)) finish() overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out) // 2 startActivity(Intent(this, MainActivity::class.java), ActivityOptions.makeCustomAnimation(this, android.R.anim.fade_in, android.R.anim.fade_out).toBundle() ) finish()
RingtoneManager
Note that the list of ringtones available will differ depending on whether the caller has the {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} permission.
val intent = Intent(RingtoneManager.ACTION_RINGTONE_PICKER) .putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Hello") .putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALL) .putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true) .putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true) .putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, Uri.EMPTY) .putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.EMPTY) startActivityForResult(intent, 0)
onActivityResult
,
val uri = data?.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) val name = if (uri != null) { val rng = RingtoneManager.getRingtone(this, uri) if (rng != null) { rng.stop() rng.getTitle(this) } else { getString(R.string.unknown) } } else { getString(R.string.unknown) }
文件选择
需要 READ_EXTERNAL_STORAGE
权限。
RecyclerView头部视差显示
使第一个View渐隐退出Window。
list.addOnScrollListener(object :RecyclerView.OnScrollListener(){ override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { super.onScrolled(recyclerView, dx, dy) val view = recyclerView.getChildAt(0) if (view != null && recyclerView.getChildAdapterPosition(view) == 0) { view.translationY = view.top / 3f view.alpha = 1 - -view.top.toFloat() / view.height } } })
ADB查看当前Activity
adb shell "dumpsys window w | grep name=" adb shell dumpsys activity | grep "mFocusedActivity" adb shell dumpsys activity your.package.name
ADB截屏并保存
adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen.png
或者
adb exec-out screencap -p > screen.png
Grab Android screenshot to computer via ADB
让一个Activity有类似Android O或P彩蛋一样的背景。
设置theme为 android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen"
。
给Layout添加Ripple
-
创建
ripple_press.xml
-
在Layout中使用
clickable
和focusable
很重要,View
之前的View会有Ripple效果,之后的View则没有。
AutoClearedValue
带清除按钮的EditText
来自 Best Practices for Using Text in Android (Google I/O’19)
Custom View中的 onSaveInstanceState
[
didn’t manage the onSaveInstanceState/onRestoreInstanceState if no id is set to the view.“`](https://stackoverflow.com/a/28586444/5507158)
## ?attr, ?android:attr, ?colorPrimary, ?attr/colorPrimary... https://developer.android.com/guide/topics/resources/providing-resources#ResourcesFromXml => Referencing style attributes` ## File - Mark As Plain Text 重构时很有用,不会影响VS。 ## `FragmentManager.setCustomAnimations()`'s Parameters - `@AnimatorRes @AnimRes int enter`: 应用到动画中进入屏幕的Fragment - `@AnimatorRes @AnimRes int exit`: 应用到动画中退出屏幕的Fragment - `@AnimatorRes @AnimRes int popEnter`: 应用到`popBackStack`时动画中进入屏幕的Fragment - `@AnimatorRes @AnimRes int popExit`: 应用到`popBackStack`时动画中退出屏幕的Fragment ## Kotlin `in` and `out` ```Kotlin // 一个RecyclerView.ViewHolder子类的List // 因为不知道到底是哪个子类,所以不能安全的添加或修改 // 但肯定能拿到一个RecyclerView.ViewHolder // 只能拿,所以叫out,Java里叫extends val outList: MutableList = mutableListOf() // 一个RecyclerView.ViewHolder父类的List // 因为不知道到底是哪个父类,所以只能强行拿到顶层的Any? // 但是可以随便添加或修改RecyclerView.ViewHolder及其子类 // 只有添加或修改方便,所以叫in,Java里叫super val inList: MutableList = mutableListOf()
clipToPadidng
Enables our items to still be drawn within the parent's padding.