首页 > 其他分享 >android view 扩展方法

android view 扩展方法

时间:2024-06-05 11:45:21浏览次数:31  
标签:ViewGroup 扩展 fun import android view View

import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.MarginLayoutParams
import android.view.ViewTreeObserver
import androidx.core.view.marginBottom
import androidx.core.view.marginLeft
import androidx.core.view.marginRight
import androidx.core.view.marginTop

/**

  • 绘制之前调用
  • 返回值onPreDraw:是否继续绘制,修改宽高的等需要返回false
  • ViewTreeObserver.OnPreDrawListener 的返回值是一个布尔值。
  • 如果返回 true,则表示绘制事件会继续进行;
  • 如果返回 false,则表示绘制事件会被取消,视图树将不会绘制。
    *通过返回 false,你可以在视图树绘制之前进行一些操作,例如修改视图的属性或者执行一些动画效果。
  • 如果你需要在绘制之前做一些准备工作或者对绘制进行干预,可以使用 ViewTreeObserver.OnPreDrawListener 来实现。
    */
    inline fun View.onPreDrawListener(crossinline onPreDraw: ((View) -> Boolean)) {
    val mPreDraw = object : ViewTreeObserver.OnPreDrawListener {
    override fun onPreDraw(): Boolean {
    viewTreeObserver.removeOnPreDrawListener(this)
    return onPreDraw.invoke(this@onPreDrawListener)
    }
    }
    viewTreeObserver.addOnPreDrawListener(mPreDraw)
    }

inline fun View.onGlobalLayoutListener(crossinline doGlobalLayout: ((View) -> Unit)) {
val mGlobalLayout = object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
viewTreeObserver.removeOnGlobalLayoutListener(this)
doGlobalLayout.invoke(this@onGlobalLayoutListener)
}
}
viewTreeObserver.addOnGlobalLayoutListener(mGlobalLayout)
}

/**

  • view 设置margin
    */
    inline fun View.setMargins(left: Int=marginLeft, top: Int=marginTop, right: Int=marginRight, bottom: Int=marginBottom): View {
    val tmp = layoutParams
    if (tmp is MarginLayoutParams) {
    tmp.setMargins(left, top, right, bottom)
    }
    return this
    }

/**

  • view 设置margin
    */
    inline fun View.removeParent() = getParentView()?.removeView(this)

/**

  • view 设置margin
    */
    inline fun View?.getParentView(): ViewGroup? = (this?.parent as? ViewGroup)

fun View.androidContent(): View =rootView.findViewById(android.R.id.content)

//val View.parentView: ViewGroup? get()= (this?.parent as? ViewGroup)

标签:ViewGroup,扩展,fun,import,android,view,View
From: https://www.cnblogs.com/lizhanqi/p/18232696

相关文章

  • android gson 扩展, 序列化int类型被转double 问题
    importcom.google.gson.Gsonimportcom.google.gson.GsonBuilderimportcom.google.gson.ToNumberStrategyimportcom.google.gson.reflect.TypeTokenimportcom.google.gson.stream.JsonReaderimportjava.io.IOExceptionimportjava.lang.reflect.Typeimportjava.m......
  • android kotlin 小数保留格式化位数
    importjava.math.RoundingModeimportjava.text.NumberFormatimportjava.util.*/**支持设置舍入模式的类型小数*/inlinefunAny?.formatDecimalRoundingMode(decimalDigits:Int=2,roundingMode:RoundingMode=RoundingMode.HALF_UP,failValue:Double=0.0):......
  • android viewbinding 自动填充工具
    `importandroid.content.Contextimportandroid.view.LayoutInflaterimportandroidx.lifecycle.*importandroidx.viewbinding.ViewBindingimportjava.lang.reflect.ParameterizedType/**查找某个类找到带有指定泛型的具体类/fungetGenericSuperclass(clazz:Class<......
  • 供应链安全论文阅读(一)Backstabber's Knife Collection: A Review of Open Source Soft
    引言该论文Backstabber'sKnifeCollection:AReviewofOpenSourceSoftwareSupplyChainAttacks发表在2020年的DIMVA上,作者为波恩大学的MarcOhm。本文是开源软件供应链安全领域较早期的一篇论文,主要针对软件供应链中恶意软件包的威胁进行了详细介绍。首先简单介绍一下软......
  • 将 Android 应用程序嵌入华为移动设备的最佳方式是什么?
    我是华为移动应用程序开发的新手。i)AndroidStudio代码是否可以移植到DevEcoIDE中?ii)请就华为移动应用程序的开发要求和期望提供一些建议。iii)AndroidStudio-kotlin和Java开发人员的最佳方法iv)有关华为移动应用程序开发指南和要求的资源指南预先感谢,请......
  • View->Canvas使用RectF方式绘制Bitmap,RectF大小和Bitmap大小不同导致绘制效果不同
    图片XML文件<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent......
  • View->Bitmap缩放到自定义ViewGroup的任意区域(RectF方式绘制Bitmap)
    XML文件<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent&quo......
  • C#开源实用的工具类库,集成超过1000多种扩展方法
    前言今天大姚给大家分享一个C#开源(MITLicense)、免费、实用且强大的工具类库,集成超过1000多种扩展方法增强.NETFramework和.NETCore的使用效率:Z.ExtensionMethods。直接项目引入类库使用在你的对应项目中NuGet包管理器中搜索:Z.ExtensionMethods安装即可使用。支持.NETS......
  • uniapp打包Android跟iOS禁用录屏截屏
    1.禁用截屏和录屏的目的保护敏感信息:防止用户截屏或录屏分享应用中的敏感信息,如个人隐私数据、金融信息、商业机密等。版权保护:保护应用中的版权内容,如视频、图片、文本内容,防止未经授权的复制和传播。数据安全:防止恶意用户利用截屏或录屏功能进行信息盗取,增加应用的数据......
  • android如何保存对象list到file
    //存储publicstaticvoidsaveObjectsToFile(List<?extendsSerializable>objects,Stringfilename)throwsIOException{Filefile1=BaseApplication.getInstance().getApplicationContext().getExternalFilesDir("");FileappDir=new......