Skip to content

ViewExtensions

燒餅 edited this page Jun 1, 2017 · 1 revision

ViewExtensions 主要提供视图(View)、界面尺寸单位计算等相关功能。

这个扩展主要功能如下:

Better findViewById(int)

为 View 重载了 get 运算符,可以使用 [] 代替传统的 findViewByIdfindViewByTag

举个例子:

Java 传统写法:

EditText editText = (EditText) view.findViewById(R.id.edit_text);

使用了扩展的 Kotlin 写法:

val editText = view[R.id.edit_text] as EditText

Q: 为什么不引入泛型函数呢,这样可以节约一个 Cast 转换?

A: 目前引入泛型函数后还有一些问题,比如 [] 无法像 Anko 里面扩展的函数 find<EditText>(R.id.edit_text) 那样声明返回值的类型。况且 Cast 加上会让代码更加清晰,暂时来说不会考虑。

扩展方法

软键盘显示状态

  • View.showKeyboard() - 显示软键盘
  • View.hideKeyboard() - 隐藏软键盘

一般 EditText 在其它 View 进行了一些操作后(比如滑动列表)应当及时收起软键盘,可以借助这个扩展方法一行解决问题。

View 可见性

  • View.makeVisible() 使视图可见性为 View.VISIBLE
  • View.makeInvisible() 使视图可见性为 View.INVISIBLE
  • View.makeGone() 使视图可见性为 View.GONE

快捷 Inflater

  • Context.inflateView(idRes)
  • ViewGroup.inflateView(idRes)

纯属只是省略了 LayoutInflater.from(context) 这一步。

dp、px、sp 单位换算

  • dpToPx
  • pxToDp
  • spToPx
  • pxToSp

支持 Int、Float 类型变量,在 dp ↔ px、sp ↔ px 之间的单位换算,需要传入 Context 获取系统 DPI。

状态栏高度

  • Context.getStatusBarHeight()

获取状态栏高度,单位为 px。

获取 View 截图

  • View.takeScreenshot() 返回当前 View 截图 Bitmap
  • View.takeScreenshotOfRootView() 返回根 View 截图 Bitmap
  • View.takeScreenshotWithoutConstrains() 返回当前 View 截图 Bitmap(不受约束)