GVKun编程网logo

Android需要了解学习的UI框架等(android常用ui框架)

8

本文将为您提供关于Android需要了解学习的UI框架等的详细介绍,我们还将为您解释android常用ui框架的相关知识,同时,我们还将为您提供关于AndroidMVP架构标准,用于加载具有Andro

本文将为您提供关于Android需要了解学习的UI框架等的详细介绍,我们还将为您解释android常用ui框架的相关知识,同时,我们还将为您提供关于Android MVP架构标准,用于加载具有Android资源的Model类的UI、Android Tangram模型:连淘宝、天猫都在用的UI框架模型你一定要懂、Android UI框架、Android UI框架Compose 的布局组件的实用信息。

本文目录一览:

Android需要了解学习的UI框架等(android常用ui框架)

Android需要了解学习的UI框架等(android常用ui框架)

UI
  • Awesome-MaterialDesign - MaterialDesignCenter改名为Awesome-MaterialDesign,优化了布局,新增了不少库。
  • awesome-android-ui - ui库,非常多的ui及特效。
  • ChipsLibrary - 在Android EditText中实现打Tag功能。
  • bitmapMesh - 拉窗帘效果。
  • ObservableScrollView - 在滚动的视图观测滚动事件的Android库 它易于与在Android 5.0 Lollipop中引入的工具条Toolbar相交互,并能够帮助实现Material Design apps的外观。
  • iconify - iconify 图片与文字同一行显示。
  • iosched - The Google I/O 2014 Android App,Android 5.0 and Material Design。
  • MaterialList - MaterialList 。
  • material design card - material design card 。
  • MaterialDesignExample - 本APP用来演示Material Design控件的使用。 https://www.aswifter.com/2015/07/02/Material-Design-Example-5/ , 使用说明。
  • InstaMaterial - InstalMaterial 项目(非常多的UI样式:ViewAnimator、RecyclerView、拍照), InstalMaterial学习笔记之Reveal效果。
  • NavigationDrawer-MaterialDesign - 一个Material Design的抽屉模板库,分分钟搭起一个程序框架。
  • MaterialEditText - 直接继承EditText,无需修改Java文件即能实现自定义控件颜色, 直接拿来用!十大Material Design开源项目。
  • fab - Floating Action Button library for Android。
  • labelview - 贴纸效果,如:淘宝商品侧贴折扣。
  • SearchMenuAnim - 一个很棒的带动画的搜索框。
  • SearchAnimation - 一个很棒的带动画的搜索框,支持低版本。
  • 快速支持emoji表情显示 - 让项目快速支持emojicon表情的显示,并可判断用户输入的内容中是否含有emojicon表情以及过滤掉emojicon。
  • Context-Menu.Android - 可以方便快速集成漂亮带有动画效果的上下文菜单。
  • Titanic - 可以显示水位上升下降的TextView。
  • AndroidSwipeLayout - 滑动Layout,支持单个View,ListView,GridView,demo-apk。
  • android-typeface-helper - Android Typeface Helper 可以帮你轻松实现自定义字体的库。
  • android-lockpattern - Android的图案密码解锁, 文档介绍。
  • ToggleButton - 状态切换的 Button,类似 iOS,用 View 实现。
  • android-typeface-helper - Android Typeface Helper 可以帮你轻松实现自定义字体的库。
  • GuideBackgroundColorAnimation - 实现滑动ViewPager渐变背景色。
  • Toolbar - Toolbar替换Android Toolbar,说明。
  • PagerSlidingTabStrip - 一个支持Material Design的PagerSlidingTabStrip。
  • MaterialViewPager - 一个易于使用的 Material Design ViewPager 库。
  • PinnedListView - PinnedListView悬浮Head效果修改,github pinned-section-listview。
  • APP启动引导页 - APP应用中最常用的APP启动引导页,常见的4种引导项目方式:splash,viewpage,viewflipper,scrollview。
  • GuideHelper - 实现Android新手引导页,可以在提示也绘制实际的view,在view的上下左右位置添加提示信息的图片。
  • AwesomeText - 简化TextViews中Spans使用的库。
  • dialogplus - 一个简单容易使用的对话框——DialogPlus。
  • material-dialogs - Material Design风格Dialogs。
  • CardView - 3d卡片效果-国人。
  • FilterMenu - 这是一个自定义的圆形菜单,效果非常酷。
  • GridPasswordView - 类似微信,支付宝支付时候的输入密码页面效果,带格子的密码输入框。
  • BlurLockView - 毛玻璃效果的密码解锁界面, 支持简单定制。
  • PersistentSearch - 模仿Google Now, Google Maps Google Play的SearchBar,下拉列表匹配、录音。
  • Droppy - Android 下简洁好看的 Dropdown 菜单。
  • UltimateRecyclerView - 这是一个终极的 RecyclerView,有下拉刷新、滑动删除、拖拽、加载更多、丰富动画等功能。
  • SmartTabLayout - SmartTabLayout实现viewpgaer页面导航效果,简化并实现android的TabHost效果,顶部滑动tab,引导页,可以自定义tab样式,过渡效果 实现网易tab,微博tab,微信tab等so easy。 集成了SpringIndicator拖拽效果 。
  • PagerBottomTabStrip - 一个基本按谷歌Material Design规范完成的安卓底部导航栏控件。
  • richeditor - RichEditor for Android 是 Android 平台下一个所见即所得的文本编辑器控件。
  • StatedFragment - 保存Fragment的状态。
  • PopoverView - 一个模仿iOS UIPopoverController效果的控件。
  • CreditsRoll - 实现星球大战字幕效果。
  • MatchView - 电影级TextView动画效果,绝对惊艳你的双眼!。
  • SwipeMenuListView - listView侧滑删除效果:SwipeMenuListView。
  • Side-Menu.Android - 分类侧滑菜单。
  • SlidingMenu - 炫酷侧滑菜单布局框架,iOS版本的实现:SlideMenuView。
  • ParallaxSwipeBack - 带视觉差的侧滑返回,类似于新版微信和lofter的侧滑返回效果。核心代码小于50行。
  • AndroidFlowLayout - A flow layout for Android。
  • ViewPagerIndicator - 取代TabHost,实现滑动tab,引导页等效果。
  • Android-ScreenSlidePager - Full screen slide pager to display images fetched from Internet by Picasso。
  • MaterialViewPager - MaterialViewPager。
  • FlipViewPager.Draco - FlipViewPager.Draco。
  • android-shape-imageview - 图片圆角、三角、五角、圆形、多角。
  • NotBoringActionBar - 隐藏图片的导航栏。
  • MultiCardMenu - 仿QQ手机管家首页菜单写的一个开源组件MultiCardMenu。
  • fit-chart - fit-chart 一个类似于谷歌健康应用的轮子(wheel view)视图,效果很不错。
  • BGABadgeView-Android - Badge控件分享,各式各样的徽章控件。
  • Android-ItemTouchHelper-Demo - 可拖拽 RecyclerView, 讲解。
  • 浮动操作按钮详解 - 讲解浮动操作按钮,从官方的和第三方库makovkastar/FloatingActionButton 和futuresimple/android-floating-action-button 这样的第三方库。的两方面讲解,同时还讲到了如何自定义CoordinatorLayout Behavior。
  • advanced-textview - advanced-textview各种高级功能的textview,包括动画,阴影,各种字体,艺术字,HTML格式显示,表情等。
  • QuickReturn - 给几乎所有可以滑动的 View 加上快速返回的 Header 或者 Footer,使用非常方便。
  • Android-PickerView - 仿iOS的PickerView控件,有时间选择和选项选择并支持一二三级联动效果。
  • idisfkj.picker - 滑轮选择器,教程。
  • DraggedViewPager - 可以在多个 Page 之间可以拖放元素的控件。
  • MultiViewPager - 对 ViewPager 的一个扩展,Page 可宽可窄,表现很像 gallelry。
  • Android-Week-View - Android Week View是一种用于应用程序中显示日历的安卓库。它支持自定义样式。。
  • MaterialCalendarView - 是一款遵循 Material Design 风格的 Android 日历。
  • WeekCalendar - 周模式的日历自定义控件,支持 4.0 以上。
  • DragLinearLayout - DragLinearLayout:自定义的线性布局,里面的UI可以自由拖动。
  • floatingsearchview - floatingsearchview 一个带搜索下拉列表提示的搜索控件。
  • LabelView - LabelView 一个简单的标签控件 支持自定义 文字大小(textSize), 间距(labelTopPadding), 背景色(backgroundColor), 和方向(direction)等。
  • MaterialCalendarView - 是一款遵循 Material Design 风格的 Android 日历。
  • SlideDetailsLayout - SlideDetailsLayout:高仿淘宝、京东商品详情页面的上拉加载图文详情功能。
  • MaterialDesignDemo - 基于Material Design Support Library的一个小Demo,这个Demo会慢慢的去完善,不仅仅是一个基于MD的Demo。里面会含有各种工具类,通用的一些Aadpter以及一些组件等。Android自定义View之高仿QQ健康
  • BaseRecyclerViewAdapterHelper - 集成了RecyclerViewAdapter的常用功能的基类,大量减少Adapter写的代码,轻松添加点击事件、添加RecyclerView加载动画、新增添加头部、添加尾部、新增下拉刷新、上拉加载更多、新增分组、自定义item类型。
  • ahbottomnavigation - 一个仿 Material Bottom Navigation 的类库。
  • StickyHeaderListView - 功能强大的StickyHeaderListView:标题渐变、吸附悬停、筛选分类、动态头部等。
卫星菜单
  • android-satellite-menu - 点击主按钮,会弹出多个围绕着主按钮排列的子按钮,从而形成一个弹出式菜单。子按钮弹出和消失的动画效果都很棒。这种弹出式菜单按钮应用在Path app中。
  • ArcMenu - 实现弹出式按钮群(菜单)。点击主按钮,会在住按钮旁边弹出多个按钮(菜单)。弹出的按钮有两种排列形式,一种是围绕着主按钮成圆弧形排列,一种是和主按钮并排成一字型排列, 仿Path 2.0 (for iOS)。
  • Radial Menu Widget - 实现各种圆形或者半圆形菜单,以及圆形进度条。
  • android-circlebutton - 圆形按钮,有动画点击效果。
  • CircularFloatingActionMenu - 卫星菜单。
  • ElasticDownload - 挺酷的下载进度条。
  • android-snake-menu - 仿 Tumblr 的 Android 可拖拽蛇形动画菜单。
节选器
  • SegmentView - 类似iOS的Segment Control控件,第一种方式是使用 RadioGroup 实现,O网页链接。
  • SHSegmentControl - 类似iOS的Segment Control控件,此种方式的可定制化更好。
  • android-segmentedradiobutton - 在Android中实现类似iOS的分段单选按钮(segmented control),本人以前项目一直使用,值得拥有。
  • android-segmented-control - RadioGroup实现类似ios的分段选择(UISegmentedControl)控件。
下拉刷新
  • Android-Ptr-Comparison - Android 下拉刷新开源库对比,非常nice!!
  • Android-PullToRefresh - 最经典、最多人用的下拉刷新、加载更多。
  • PullDownListView - 一个下拉刷新的控件,实现了仿微信下拉中眼睛动画的效果。
  • DragTopLayout - 实现整个layout下拉刷新。
  • @L_301_115@ - 一个顺滑又漂亮的Android下拉刷新与加载更多列表组件,增加下拉刷新及滚动到底部自动加载的功能;增加越界回弹效果;增加自定义列表项动画的功能。
  • TwitterCover-Android - Twitter Android客户端的下拉封面模糊效果。
  • android-Ultra-Pull-To-Refresh - 实现整个layout下拉刷新,没有加载更过,Demo, 源码分析。
  • StikkyHeader - 【Android控件源码:头部固定的控件列表效果】这是一个可以支持头部固定的控件列表功能,源码StikkyHeader,StikkyHeader是一个可以在滚动的时候将头部固定的控件,还可以将动画效果和StikkyHeader一起使用,api非常简单, 支持ListView,RecyclerView,ScrollView。支持2.3一下设备使用的StikkyHeader
  • PullDownListView - 实现了模仿微信眼睛下拉效果,源码PullDownListView,下拉刷新,上拉加载,模仿微信眼睛。
  • CircleRefreshLayout - 又一个下拉刷新的实现,水滴效果。
  • BGARefreshLayout-Android - 多种下拉刷新效果、上拉加载更多、可配置自定义头部广告位,目前已经实现了四种下拉刷新效果:新浪微博下拉刷新风格、网下拉刷新风格、美团下拉刷新风格、类似qq好友列表黏性下拉刷新风格。
  • Pull-to-Refresh.Rentals-Android - 提供一个简单可以自定义的下拉刷新实现。
  • Pull-to-Refresh.Tours - Taurus,很精美的下拉刷新。
  • ParallaxListView - 模仿Path的下拉刷新,Head头部图片下拉放大。
  • WaveRefreshForAndroid - 下拉刷新水波纹动画。
  • CoordinatorLayoutDemos - 收集了不少资源写了一个基于CoordinatorLayout实现的下拉刷新效果。
  • Android_PullToRefreshLibrary_Collection - 下拉刷新开源库集锦 。
  • HitBlockRefresh - 下拉刷新:打砖块和打坦克。
模糊效果
  • BlurNavigationDrawer - 背景模糊的Navigation Drawer。
HUD与Toast
  • android-UCToast - 在不申请任何权限的情况下在 Android 应用中弹出悬浮窗,实现文档。
  • sweet-alert-dialog - sweet-alert-dialog是一款清新文艺的 Android 弹窗, 灵感来自于 JS 版的 SweetAlert。
进度条
  • easyloadingbtn - 模仿了一个Dribbble上的Material Design效果,环形loading, 进度条、进度圈。
  • android-square-progressbar - 一个不错的方形进度条。
  • Radial Menu Widget - 实现各种圆形或者半圆形菜单,以及圆形进度条。
  • AnimatedCircleLoadingView - 一个有限/无限加载动画效果。基于Nils Banner的android-watch-loading-animation设计图。该设计本来是针对智能手表的。
  • circular-progress-button - 带动态效果的Button(按钮)可要比静态的按钮炫酷的多了,大家看到效果图就知道了。
  • CircularBarPager - Android实现的动态效果,一个数字圆圈进度效果,源码CircularBarPager,material 风格的数字圆圈进度显示库(api10 +)。
  • dotted-progress-bar - 一个小清新的进度条。
  • WhorlView - 一个炫酷的漩涡加载效果自定义view。
  • AVLoadingIndicatorView - AVLoadingIndicatorView整合了一些漂亮的 Android 动画加载效果。
  • MagicProgressWidget - 渐变的圆形进度条与轻量横向进度条。
  • GBSlideBar - GBSlideBar类似uber/滴滴等app的滑动选择工具条。
  • GifLoadingView - 一些好看的 loadingview。
  • HouseLoading - 一个有趣的android加载loading动画。实现原理

UI其他
  • MixtureTextView - 富文本,支持Android图文混排、文字环绕图片等效果。
  • android-ActionQueue - Action Queue 用于执行有次序的队列操作,比如按次序弹出对话框,这在 Android 中尤其有用。
  • WheelView-Android - WheelView-Android 是一款开源的 Android 滚动选择控件, 适用于不少应用场景。
  • Android Wheel - 带有刻度的旋转器:日历、三级联动。
  • CharacterPickerView - 可实现三级联动的选择器,高仿iOS的滚轮控件,可实现单项选择,并支持一二三级联动效果。
  • Highlight - Highlight一款可应用于 Android 应用上的指向性功能高亮的库, 可以快速的给应用添加上应用引导的效果。
  • HeaderAndFooterRecyclerView - 支持addHeaderView、 addFooterView、分页加载的RecyclerView解决方案 。
  • CleverRecyclerView - 是一个基于RecyclerView的扩展库,提供了与ViewPager类似的滑动效果并且添加了一些有用的特性。
  • drag-select-recyclerview - 实现了类似 Google Photos 风格的图片多选效果。
  • FlycoTabLayout - 一个Android TabLayout库,目前有两个TabLayout:SlidingTabLayout、CommonTabLayout。
  • AndroidChangeSkin - 一种完全无侵入的 Android 应用换肤方式,支持插件式和应用内换肤,无需重启 Activity。
  • Lobsterpicker - Lobsterpicker 为 Android 开发者提供了满足 Material Design 风格的颜色选择器。
  • FlycoRoundView - 一个扩展原生控件支持圆角矩形框背景的库,可以减少相关shape资源文件使用。
  • FlowingDrawer - FlowingDrawer 一个弹性效果的抽屉菜单,图片是概念图,实际效果实现了70%(侧滑菜单)。
  • TextSurface -是用 Java 写的一款借助酷炫的动画效果来完成消息展示的微型动画框架。
  • android-animate-RichEditor -android-animate-RichEditor是一款支持图片插入动画效果的 Android 富文本编辑器。
  • FlycoPageIndicator - android-animate-RichEditor是一款支持图片插入动画效果的 Android 富文本编辑器。
  • AndroidMosaicLayout - 马赛克效果 Layout,磁片风格View 自适应大小。
  • DropDownMenu - 一个实用的多条件筛选菜单,在很多App上都能看到这个效果,如美团,爱奇艺电影票等。
  • Swipe-Deck - 仿 Tinder 的可以左右滑动消除卡片效果的自定义控件。
  • IntlPhoneInput - 一个支持国际化的电话号码输入的自定义控件。
  • AndroidUI4Web - AndroidUI4Web是一个高性能的WebApp框架, 在移动浏览器上有与原生App一致的体验。
  • SmoothCheckBox - SmoothCheckBox带有切换动画的CheckBox。
  • AndroidTimelineViewx - AndroidTimelineViewx仿微信朋友圈 时间轴。
  • CityPicker - CityPicker仿美团等选择城市列表。
  • material-intro - Material Design 风格的引导页。
  • EmphasisTextView - 支持部分文字高亮的 TextView。
  • greedo-layout-for-android - 深度定制的 LayoutManager,在显示网格布局的时候会考虑屏幕宽高比。
  • Rosie - 可以让你创建遵循 Clean Architecture 的应用的框架。
  • CreditCardView - 一个交互很赞的信用卡自定义 View。
  • android-md-core - Material风格bootstrap的框架。
  • SwipeCardView - 一个带渐变层叠动画的左右滑动效果(类似于探探左右刷脸)。
  • SwipeSelector - 可以左右滑动切换 item 的 Selector。
  • ForegroundViews - 类似于 FrameLayout 的支持的前景自定义 View。
  • android-material-chips - Material Design 的 Chips 控件实现。
  • XhsEmoticonsKeyboard - 表情键盘解决方案。
  • JKeyboardPanelSwitch - 一套 Android 键盘面板冲突, 布局闪动的处理方案。
  • GestureLibray - 九宫格解锁。
  • RecyclerItemDecoration - RecyclerView相关的ItemDecorstion仍然保持高度定制性,易用性。
  • materiallogindemo - 一个炫酷的Material Design 风格的登录和注册页面 。教程
  • ScrollablePanel - 一个二维可拖动的面板控件,交互像一个二维的RecyclerView,用法也非常简单和RecyclerView的用法基本一样,横向竖向滑动也都实现了View的复用。 如果你想做房态、计划表、待办事项、课程表等需要一个二维的面板的话,这个控件应该是比较适合的。

动画

  • Android应用开发之所有动画使用详解 - Android应用开发之所有动画使用详解。
  • 动画特效大全 - Android 动画特效大全。
  • SwitchLayout - 国内开发者, Android的Activity切换动画特效库SwitchLayout,视图切换动画库,媲美IOS。
  • ActivityOptionsICS - 一个低版本activity动画兼容库——ActivityOptionsICS,可以很好的实现MD的动画效果。
  • SwipeBack - 一个可以通过手势返回到上一个Activity的开源库,支持上下左右四个方向返回,支持多个View为Child。
  • SpringIndicator - 模仿Morning Routine的引导页效果SpringIndicator;基于模仿红点拖拽的Demo实现:BezierDemo;sample中使用到 快速创建ViewPager和ListView等的第三方库:MultipleModel。
  • XhsWelcomeAnim - 国内开发者, 华丽酷炫欢迎引导界面 动画没有之一。
  • Material-Animations - Material风格动画,可以定义两个Activity之间的动画。
  • android-shapeLoadingView - android-shapeLoadingView实现高仿新版58 加载动画,loading。
  • 一个绚丽的loading - 一个绚丽的loading动效分析与实现。
  • TransitionPlayer - 一个 Transition 动画控制控制库,可以让你很轻松的创建一个可交互的动画。
  • loading-balls - loading-balls 一款支持高度配置的 Android 加载进度球。
  • SogoLoading - 仿搜狗浏览器加载动画,实现说明。
  • ExplosionField - Android中View 炸裂特效的实现分析。
  • AZExplosion - AZExplosion:模仿ExplosionField的粒子破碎效果。
  • BrokenView -玻璃碎裂动画效果。
  • SwipeCardView - SwipeCardView一个带渐变层叠动画的左右滑动效果(类似于探探左右刷脸)。类似SwipeCard
  • CRAudioVisualizationView - 水波纹效果的声音可视化自定义 View。
  • LoadingDrawable - 一些酷炫的加载动画, 可以与任何View配合使用,作为加载动画或者Progressbar, 此外很适合与RecyclerRefreshLayout 配合使用作为刷新的loading 动画。
  • Depth-LIB-Android- - 一款酷炫的 Android 界面过渡动画效果。
  • SwipeCaptcha - 自定义view,仿一个斗鱼web端滑动验证码。 博文

网络相关

网络连接
  • ion - 一个异步网络请求和图片加载的库,一个库能搞定几乎所有的网络请求。
  • 多线程下载 - Android 实现多线程下载 完美代码。
  • opandroid - android p2p的开源实现。
  • okio - square出的Okio这个库,尤其擅长处理二进制数据。如果觉得Java的输入输出流实在太复杂啰嗦,不妨试试Okio。
  • okhttp - square出的okhttp库。
  • OkHttpPlus - OkHttp 的一个工具类开源项目OkHttpPlus——支持GET、POST、UI线程回调、JSON格式解析、链式调用、文件上传下载 ,OkHttpPlus介绍。
  • Android-Download-Manager-Pro - 一个下载管理库,如果你的 App 有大量的下载工作,这个库能帮到你。
  • FileDownloader - 文件下载引擎,稳定、高效、简单易用。
  • jchat-android - 一个聊天 App,具有完备的即时通讯功能,JChat 的功能基于极光 JMessage SDK 来开发。

网络测试
  • augmented-traffic-control - Facebook宣布开源移动网络测试工具ATC,该工具支持利用Wi-Fi网络模拟2G、2.5G、3G以及LTE 4G移动网络环境,让测试工程师们能够快速对智能手机和App在不同国家地区和应用环境下的性能表现进行测试。

图像获取
  • glide - glide google出品,使用教程、GlidePalette。5 个顶级 Android 开源库
  • Universal Image Loader - Universal Image Loader 是一个强大的、可高度定制的图片缓存,简称:UIL,可以高度配置的网络图片缓存库,非常灵活,用户量最多 。
  • picasso - picasso 功能单一,没有缓存过期,同AndroidQuery一样链式调用,载入本地文件速度慢(没有生成thumbnails) ,Picasso and Android-Universal-Image-Loader,另外的一些诸如裁剪图片:Picasso.with(context) .load(url) .resize(50, 50) .centerCrop() .into(imageView)。
  • fresco - Facebook 又放出的一个新项目,一个类似 Picasso, Glide 的库,不过比他们做的更好。 强烈推荐![Fresco集成示例](https://github.com/liaohuqiu/fresco-demo-for-gradle)。
  • tape - 类似于图片加载库(例如UIL、Picasso等)实现异步加载,但是加载的不一定是图片。!
  • ImageLoader - ImageLoader 。
  • Volley - Volley 综合框架,包含图片部分,Volley与Picasso的对比
  • enif - enif 。
  • wqgallery - wqgallery实现类似微信选择照片功能,可以通过相机或相册选择,支持单张裁剪,支持单选模式、支持多选模式。
  • httplite - A android http library。Android网络框架httplite使用指南

响应式编程

  • RxAndroid - RxAndroid:函数响应式编程 ,RxJava - Rx和RxJava文档中文翻译项目, RxJava 详解, RxJava资料汇总。Rxjava+Retrofit 实现全局过期 Token 自动刷新

地图

  • 百度地图 - Android百度地图 线路规划,模拟运动轨迹,及全景效果。
  • AirMapView - 支持多个本地地图提供者包括谷歌地图V2和亚马逊地图V2。如果设备没有任何受支持的本地地图提供者,AirMapView会回退到基于web的地图提供者(目前谷歌地图)。

数据库

  • ORMLite - Ormlite做的最棒但是学习成本有点儿高,Ormlite的文档有点儿烂。
  • SugarORM - SugarORM比较轻便, 支持Has a 和 Has many映射,但无法保存集合,没有映射关系。
  • GreenDAO - GreenDAO要先建立一个java项目来生成对应的表,一变动又要生成,很不方便。
  • ActiveDriod - ActiveDriod也不错 官网。
  • ORMDroid - ormdroid 。
  • sqlbrite - 良心企业Square的又一开源项目,当你不想给用ContentProvider,只想简单监听sqlite表增删改的数据变更时可以试试它。
  • sqlbrite - DBExecutor android ORM数据库 1.使用了读写锁,支持多线程操作数据。 2.支持操作多个数据库 3.支持事务 4.缓存sql,缓存表结构。
  • Iron - 一个快速和易用的 Nosql 数据存储框架。
  • hawk - 一个快速和易用的键值对数据存储框架,支持AES加密,支持SharedPreferences或sqlite存储,支持Gson解析。
  • AndroidKeyValueStore - 一个基于 sqlite 的 Key/Value 存储框架。
  • DBFlow - 一个速度极快,功能强大,而且非常简单的 Android 数据库 ORM 库,为你编写数据库代码,DBFlow 已被证明是最好的解决方案。5 个顶级 Android 开源库

图像浏览及处理

  • MPAndroidChart - MPAndroidChart是一个功能强大的图表开源类库:曲线图、柱形图、环形图。
  • XCL-Charts - (国人开发)基于Android Canvas来绘制各种图表,使用简便,定制灵活。
  • WilliamChart - 绘制图表的库,支持LineChartView、BarChartView和StackBarChartView三中图表类型,并且支持 Android 2.2及以上的系统。
  • CropImageView - 原生ImageView只支持centerCrop,这里有支持9个方向裁剪的ImageView。
  • SimpleCropView - 一个Android的图片裁剪库,使用简单,易于定制。
  • @L_708_301@ - DrawableView实现画板功能,可以改变画笔粗细,颜色,支持撤销功能。
  • ImageCoverFlow - ImageCoverFlow效果不错的画廊控件 可以设置画廊一次可见图片的张数,和其他第三方gallery控件不同的是,该控件直接继承自View,而不是sdk中的gallery控件。
  • FancyCoverFlow - 支持Item切换动画效果的类似gallery View。改进版本可以无限轮播,可以选择自动轮播或者 手动滑动。
  • BGABanner-Android - demo中演示了引导页、以及通过fresco、android-async-http、gson实现广告条的自动轮播效果(splash 、 ViewPager切换动画) 。
  • RecyclerViewPager - 重写后的 RecyclerViewPager 完全继承自RecyclerView,可以自定义触发翻页的距离,可自定义翻页速度,支持VerticalViewPager,支持Fragment。
  • StickerCamera - 可以说是一个完整的相机、图片编辑的 APP,集成了大部分市面上有的同类 APP 的功能,裁剪、滤镜、贴纸应有尽有。
  • demo6_PhotoRiver - 图片流动显示的demo,可以点击流动中的图片放大显示,双击空白处图片以九宫格排列。
  • glide-transformations - 一个基于Glide的transformation库,拥有裁剪,着色,模糊,滤镜等多种转换效果。
  • ColoringLoading - 一个用纯代码实现自动绘画效果动画的项目。
  • SmartDrawing - 一个轻量级的手绘板,加入了一点截图功能。这只是一个Demo。并不能作为类库,也不是完整的项目工程,仅供学习或参考使用。
  • SlidingCard - 漂亮的卡片滑动翻页特效。
  • LargeImage - 加载大图 可以高清显示10000*10000像素的图片。
  • GalleryFinal - 自定义相册,实现了拍照、图片选择(单选/多选)、 裁剪(单/多裁剪)、旋转、ImageLoader无绑定任由开发者选 择、功能可配置、主题样式可配置。galleryFinal为你定制相册。
  • AndroidAlbum - AndroidAlbum图片选择器:1、MVP结构设计;2、工厂模式对载图框架进行封装抽象,方便替换其他载图框架;3、闪退日志的搜集,方便揪BUG。
  • uCrop - ucrop 是 Yalantis 推出的又一款力作, 用于裁剪 Android 系统上的图片, 致力于打造最佳的图片裁剪体验。
  • crop-image-layout - crop-image-layout:图片裁切布局。
  • RenderscriptHistogramEqualization - RenderScript :简单而快速的图像处理

视频音频处理

  • ijkplayer - B站开源的视频播放器,支持Android和iOS。
  • DanmakuFlameMaster - 这里是Android上最好的开源弹幕引擎·烈焰弹幕使。
  • YouTubePlayerActivity - 一个可以播放YouTube视频的Activity,支持屏幕旋转、声音控制、播放失败处理、可以自定义Activity关闭动画以及在横屏播放的时候自动隐藏status bar。
  • AndroidVideoPlayer - 开源的 Android 视频播放器,支持 DLNA。
  • Hide-Music-Player - Hide音乐播放器。
  • JamsMusicPlayer - 是一个功能强大的 Android 开源播放器, 作者将原本收费的项目拿出来开源, 实在令人敬佩。
  • RxAndroidAudior - RxAndroidAudior目前最鲁棒的Android声音录制和播放封装库了,说明。
  • Timber - 一款遵循了Material Design并且设计精美的播放器 Timber Music Player,已经在google play上架。
  • LandscapeVideoCamera - 一款功能强大的 Android 视频录制库, 仅允许横屏录制, 提供细粒度控制视频的质量与文件大小。

测试及调试

  • DevelopQuickSetting - 快速开启关闭开发者设置的工具,提供了app界面和桌面widget,能快速打开关闭overdraw,layout border,gpu rendering,adb wifi,不保存activity实例等功能。
  • decompileandroid - 在线反编译apk文件。
  • jadx - 一个Android反编译神器,不同于常见的dex2jar,这个反编译器生成代码的try/catch次数更少,View也不再是数字id了,可读性更高。
  • Androguard - androguard使用Python写的一系列逆向工具集,功能很强大哦,对逆向工程感兴趣的小伙伴可以这个系列,教程。
  • logger - 一个简单、漂亮、功能强大的Android日志程序。
  • stf - WEB 端批量移动设备管理控制工具 STF 的环境搭建和运行,使用说明 。
  • DecompileApk - 一键反编译 APK,输出所有反编译后的代码、资源,使用方便。
  • AppCrashTracker - 一个异常追踪器,可以生成一个 JSON 格式的日志并可以上传到服务器。

动态更新热更新

  • dexposed - 淘宝 支付宝的Android底层技术团队即将为Dexposed开源项目贡献一个重要的扩展能力 —— 方法粒度的完整替换,大幅度降低基于AOP方式替换大型方法的开发成本,使用教程,Android平台免Root无侵入AOP框架Dexposed使用详解 。 Android Hotpatch系列之-项目介绍 - 客户端例子实现,服务器简易实现 。热更新。
  • Xposed - Xposed是一款可以在不修改APK的情况下影响程序运行的框架服务,Android Hook神器:XPosed入门与登陆劫持演示 。热更新。
  • code-push -大微软推出的一套可以为用 React Native 和 Cordova 开发的 App 提供代码热更新的方案。
  • DynamicAPK - 实现Android App多apk插件化和动态加载,支持资源分包和热修复。
  • AndFixDemo - AndFix是alibaba出品的开源热更新技术。
  • gradle_plugin_android_aspectjx - 通过Gradle Transform和aspectj来实现代码动态修改,业务逻辑数据埋点、性能数据统计等侵入性修改从此不再需要修改业务代码,完美解决Dexposed兼容性问题,实现代码自动插桩。AspectJX-Demo
  • RoboAspectJ - 美团出品的开源热更新技术。

 

复制于网友:https://blog.csdn.net/hanj456/article/details/53484819

Android MVP架构标准,用于加载具有Android资源的Model类的UI

Android MVP架构标准,用于加载具有Android资源的Model类的UI

我在应用程序中跟随MVP架构.我的HomeActivity包含一个滑动面板,列表图标具有选择器,在选择滑动面板项目时,图标状态已更改,我没有使用任何列表选择器.

I am keeping a model class NavItemData for populating the
navigation drawer and using a class SlidingPanelItemSelector that
extends StateListDrawable generates the appropriate selector for the
sliding panel icon.

在MVP架构中,我们有一个演示者类与模型进行通信,并生成视图的输入.在我的情况下,如果我使用演示者获取Sliding Panel的数据,我正在从演示者调用一个类,使用android上下文这是一个很好的方法,或者我们有任何替代解决方案严格遵循MVP架构?

Currently i am using a ViewBinderUtils class
and injected it directly to the activity class and gets the list of
data for Sliding Panel. Is it following Mvp Architcture?

SlidingPanelItemSelector.class

public class SlidingPanelItemSelector extends StateListDrawable {
    private Context mContext;

    public SlidingPanelItemSelector(Context mContext){
        this.mContext = mContext;
    }

    public StateListDrawable getHomeSelector(){
    StateListDrawable stateListDrawable = new StateListDrawable();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            stateListDrawable.addState(new int[]{android.R.attr.state_pressed},mContext.getDrawable(R.drawable.ic_nav_home_active));
            stateListDrawable.addState(new int[]{},mContext.getDrawable(R.drawable.ic_nav_home));
        }else{
            stateListDrawable.addState(new int[]{android.R.attr.state_pressed},mContext.getResources().getDrawable(R.drawable.ic_nav_home_active));
            stateListDrawable.addState(new int[]{},mContext.getResources().getDrawable(R.drawable.ic_nav_home));
        }

        return stateListDrawable;
    }
}

ViewBinderUtils.class

public class ViewDataBinderUtils {
    Context mContext;
    @Inject
    public ViewDataBinderUtils(@ActivityContext Context mContext) {
        this.mContext = mContext;
    }
    public List<SlidingPanelData> getListData(String [] titles){
        List<SlidingPanelData> items = new ArrayList<>();
        items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getHomeSelector(),titles[0],true));
        items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getConfigurationSelector(),titles[1],false    ));
    items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getConfigurationSelector(),titles[2],false));
        items.add(new SlidingPanelData(true));
        items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getQuoteSelector(),titles[3],false));
        items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getEquipmentInventorySelector(),titles[4],false));
        items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getCustomerSelector(),titles[5],false));
        items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getQuoterSelector(),titles[6],false));
        items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getSalesProgramsSelector(),titles[7],false));
        items.add(new SlidingPanelData( new SlidingPanelItemSelector(mContext).getCreditAppsSelector(),titles[8],false));
        items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getRetailOffeRSSelector(),titles[9],false));
        items.add(new SlidingPanelData(true));
        items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getPayOffeRSSelector(),titles[10],true));
        items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getAlertsSelector(),titles[11],true));
        items.add(new SlidingPanelData(true));
        items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getTermofUseSelector(),titles[12],false));
        items.add(new SlidingPanelData(new SlidingPanelItemSelector(mContext).getLegalInfoSelector(),false));
        return items;
    }
}

解决方法

演示者应与上下文的东西隔离,因为应该知道的上下文的唯一部分是View(V)部分.
我不太了解这个课程的目标,但是在通用的方式你应该遵循这个逻辑

if am using the presenter for getting the data for Sliding Panel i am
calling a class from presenter that using android context

创建一个负责管理View(V)与Presenter(P)之间的通信的接口.

Communication.java

public interface Communication {
    void showLoading();
    void hideLoading();
    void setSlidingData(String [] titles);
}

你的视图应该实现这个接口通信,并且有一个Presenter的参考.如果您需要使用Interactor(I)的上下文,则应该有一个管理此类的类(在我的情况下为RequestHolder).

View.java

public View implements Communication{
    private Presenter mPresenter;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
           // your view already implements the Comunication interface
           mPresenter = new Presenter(this);
        }
        (...)
       private void getData(){
         mPresenter.getData(new RequestHolder(getApplicationContext()));
       }

       @Override
       public void setSlidingData(String [] titles){
          List<SlidingPanelData> items = new ArrayList<>();
          items.add(new SlidingPanelData(new SlidingPanelItemSelector(getApplicationContext()).getHomeSelector(),true));
       }
    }

在演示者有你的界面的参考

Presenter.java

private Communication mView;

public Presenter(Communication view) {
    mView = view;
}

/** event to receive data from the model **/
public void onEvent(GetDataMessage event){
   mView.setSlidingData(event.getData());
} 

public void getData(final RequestHolder holder){
   new GetDataInteractor(holder);
}

RequestHolder.java

// you can put the data important to the interactor
public RequestHolder(final Context context,int accountId) {
    super(context); 
}
//getters and setters

通过这种方式,您可以访问交互器中的上下文,而不需要混合概念

总共,

> View是唯一提供上下文的视图
>视图引用了Presenter
>演示者“与会者”与界面之间的视图

在具体情况下,为什么不创建需要在View部分中的上下文的列表,并填充List items = new ArrayList?();在你的主持人的一部分?与此你保持一切孤立

Android Tangram模型:连淘宝、天猫都在用的UI框架模型你一定要懂

Android Tangram模型:连淘宝、天猫都在用的UI框架模型你一定要懂

前言

  • Tangram 是阿里出品、用于快速实现组合布局的框架模型,在手机天猫 Android & iOS版 内广泛使用

电商图

  • 今天我将对Tangram 模型 进行全面介绍,希望你们会喜欢。 

目录

目录

1. 为什么要使用 Tangram 模型

在讲解 Tangram模型 前,我们先来搞懂一个问题:为什么要使用  Tangram模型

1.1 背景

  • 技术 是用于 满足需求业务 的 解决方案,现有的需求业务可分为三类:基础业务、常规业务 & 临时性任务。具体细节如下:

示意图1

1.2 问题

相应的解决方案的特点如下: 
示意图2

  • 对于基础业务,采用 Native 的方案,不作过多解释
  • 对于临时性业务,随着WebView性能的提升 和 移动端设备硬件的发展,现阶段 HTML 加载速度 & 渲染速度慢的缺点将会逐渐被完善,对于临时性业务的需求能够满足

但对于常规业务,至今还没盖棺定论的方案,所以才会存在两种方案:WebView+HTML & Dynative方案。但这两种方案是存在问题的:

  1. WebView+HTML方案:随着WebView性能的提升 和 移动端设备硬件的发展,HTML加载速度 & 渲染速度慢的缺点将会逐渐被完善,所以常规业务需要的性能还是难以满足。
  2. Dynative(如RNWeex):虽然性能能满足,但由于该技术还不成熟,稳定性差,且开发难度大,所以对于常规业务还是非常谨慎的使用。

1.3 解决方案

Tangram 正是解决 常规业务 的方案:在性能、稳定性 & 开发周期 取得较好平衡的一种折中方案。

2. 定义

  • 是一种用于快速实现组合布局的框架模型

    1. 所谓概念模型,即只停留在定性分析的解决方案 & 思路,还未真正具体实现
    2. Tangram的具体实现是一种 NativeiOS & Android)的快速实现 组合布局 的界面开发框架,下面会详细说明
  • 中文即七巧板,即该框架 提供一系列基本单元布局,通过快速拼装就能搭建出一个具备多种布局的页面

    就像使用七巧板 通过现有板块 快速拼凑出 多样的形状一样。

示意图

3. 应用场景

  • 常规业务 中 复杂的布局格式混排,如:浮动布局、栏格布局、通栏布局、一拖N布局、瀑布流布局,还可以组合使用这些布局
  • 具体场景是:如电商平台首页、活动频道等等 

    Tangram 模型目前已在手机天猫 & 淘宝 Android 版内广泛使用

4. Tangram优点

示意图

4.1 高性能

在性能方面,希望 贴近Native开发,重点:页面渲染效率 & 组件回收复用

  • 页面渲染:为了提升渲染效率,Tangram将在视图渲染之前把大量的计算工作在VM中完成,并缓存在VM组成的树形结构里。
  • 回收和复用——Tangram在Android和iOS平台上分别开发了VLayout和 LazyScroll两个基础组件,通过一个双索引可见区域组件发现算法,实现了跨父节点组件的高效回收和复用。

4.2 面向业务

a. 组件业务化

根据 业务类型 将组件 封装成 能承担一定业务能力的复用单元。

如一种瀑布流布局

b. 动态化

提供 控制台 让业务方可直接控制基于Tangram的产品,如调整页面布局,切换页面数据等。

  1. 即 页面的排版布局 可 通过后端数据的下发来动态调整
  2. 服务网关的建设目标是最大程度的降低业务创建Tangram页面的压力和成本。

但这种动态化 是 面向粗粒度组件:通过 布局+组件的形式搭建整个页面,而不是一般从 基本的UI元素(如按钮blabla)搭建页面。

  1. 其实也很好理解,业务人员需要用到的是 能承担一定业务能力的“业务布局”,而不是单一UI元素(按钮、文本blabla)
  2. 好处:使用成本低,上线周期短

4.3 扩展性好

采用插件化扩展

内部本来就注册在框架里 & 外部也可注入扩展模块

4.4 多端一致性

对于业务开发,存在多端表现不一致的问题。为了解决该问题,以前需要通过复杂的网关逻辑来兼容多端逻辑不一致情况。

为了防止该问题,对于Tangram,预先制定了两个开发原则:

  1. 任意新功能的提出都是不区分平台,在功能设计中必须同时考虑多端功能,具体的实现方案和逻辑必须多端统一Review以保证多端表现一致。
  2. 任意一端的变更都必须在改动前把方案同步给其他端,而且变更必须多端同步发布。

5. 架构 & 原理讲解

  • Tangram的架构主要由三部分组成:

    1. Tangram SDK
    2. Tangram AC
    3. Tangram OP
  • 每部分的具体细节如下:

示意图

本文主要讲解的是用于客户端页面渲染的Tangram SDK

5.1 知识储备

在讲解架构前,我们需要先了解Tangram的一些模型知识。

a. 页面概念模型

  • 一个页面实体由3部分组成:页面(Page)、卡片(Card) & 组件(Item)

  • 具体如下图:

页面元素拆解

  • 之间的关系:组件 构成 卡片、卡片 构成 页面。

  • 对于Tangram,他的页面概念模型可用 树状模型(3层结构) 表示:

示意图

下面主要讲解 三层结构中 的 卡片 & 组件。

b. 卡片

  • 作用:负责布局逻辑

    1. 即对组件进行 组合 & 布局
    2. 只声明布局方式,不提供布局细节
  • 组成 
    卡片由有四部分组成:header、footer、body、style

示意图1

示意图2

关于四个部分的细节,我将在Tangram具体使用时进行介绍

c. 组件

  • 定义:最小单位的UI元素

    日常使用的普通的View,如按钮、图片等等

  • 作用:负责UI元素展示 & 业务逻辑

  • 组成元素:视图模型(ViewModel) & 样式(Style

视图模型:所有组件对有一个统一视图模型(ViewModel),主要是定义了生命周期事件:

  • 组件初始化时会调用init()
  • 滑入屏幕绑定数据时,调用bind()
  • 滑出屏幕解除绑定时,调用unbind()

关于 组件的基本样式 主要包括:组件背景、外边距、内边距、组件的宽高比等等。具体细节会在具体使用时介绍。

5.2 Tangram结构

Tangram的结构主要由5部分组成,如下图:

示意图

5.3 原理解析

当页面数据传入时:

  • 核心引擎调用 数据解析器 将 数据 转换成卡片和组件对象

    1. 解析过程会根据之前注册过的卡片、组件类型来解析
    2. 未定义的数据将会被抛弃
  • 数据解析器将解析完毕的卡片、组件对象传递给布局框架,进行页面渲染。

    1. 布局框架 根据卡片提供的布局信息进行布局
    2. 布局框架 根据组件提供的组件信息获取组件实例,布局到布局容器里

6. 扩展模块

  • 上面介绍的内容里是Tangram的核心功能
  • 但当需要落实到具体业务,仅仅该核心功能是无法满足的,还需要很多辅助、扩展的功能
  • Tangram 采用 插件化形式 进行扩展:

示意图

7. 具体使用

  • 上述讲解的 只是Tangram概念模型基本架构 & 原理
  • 在具体实现时 会根据 不同平台 采用 不同实现 方案: 
    1. 对于Android:采用基于RecyclerView+自定义LayoutManager的实现方案 
       具体请看文章: Android开源库V - Layout:淘宝、天猫都在用的UI框架,赶紧用起来吧!
    2. 对于iOS:采用 基于自定义的 LazyScrollView 的实现方案 

8. 总结

  • 本文主要详细讲解Tangram的概念模型
  • 关于具体实践 & 落实到业务使用,请看文章:Android开源库V - Layout:淘宝、天猫都在用的UI框架,赶紧用起来吧!

  • 下面我将继续对 阿里开源的框架模型Tangram进行 跟踪 & 详细分析 ,有兴趣可以继续关注Carson_Ho的安卓开发笔记

请帮顶或评论点赞!因为你的鼓励是我写作的最大动力!

参考文章: 
1. http://pingguohe.net/2017/03/30/what-is-tangram.html 
2. http://pingguohe.net/2016/12/20/Tangram-design-and-practice.html?from=timeline 
3. http://pingguohe.net/2017/04/24/tangram-1.0.html?from=timeline

Android UI框架

Android UI框架

Android酷炫实用的开源框架(UI框架)

Android UI框架Compose 的布局组件

Android UI框架Compose 的布局组件

Android UI框架Compose 的布局组件

一:Row和Column和Box

Box 组件
Box 是一个能够将里面的子项依次按照顺序堆叠的布局组件。

@Composable
inline fun Box(
//修饰符
    modifier: Modifier = Modifier,
//对齐方式
    contentAlignment: Alignment = Alignment.TopStart,
    propagateMinConstraints: Boolean = false,
    content: @Composable BoxScope.() -> Unit
){
}

Row组件

@Composable
inline fun Row(
//修饰符
    modifier: Modifier = Modifier,
//水平对齐方式
    horizontalArrangement: Arrangement.Horizontal = Arrangement.Start,
//垂直对齐方式
    verticalAlignment: Alignment.Vertical = Alignment.Top,
    content: @Composable RowScope.() -> Unit
){
}

horizontalArrangement 设置水平方向上的子view跟主轴的关系。默认是水平放置子view,居左开始布局Arrangement.Start。主要有如下几种取值

Arrangement.START 水平放置子对象,使其尽可能靠近主轴左边。
Arrangement.END 水平放置子对象,使其尽可能靠近主轴右边。
Arrangement.CENTER 水平放置子对象,使其尽可能靠近主轴的中间。
Arrangement.SpaceBetween 水平放置子对象时,使它们沿主轴均匀分布,在第一个子对象之前或最后一个子对象之后没有可用空间。意思是第一个在最左边,最后一个在最右部。而中间的按同等间隔去均分放置。
Arrangement.SpaceEvenly 水平放置子对象,使他们同等间隔均分放置
Arrangement.SpaceAround 水平放置子对象,第一个放置在距离顶部x间隔的地方,最后一个放置在距离底部x间隔的地方。中间的按同等间距均分放置。

Column组件
Column 是一个布局组件,它能够将里面的子项按照从上到下的顺序垂直排列。

@Composable
inline fun Column(
    modifier: Modifier = Modifier,
//高度,那么就能使用 verticalArrangement 参数来定位子项在 Column 中的垂直位置。
    verticalArrangement: Arrangement.Vertical = Arrangement.Top,
//宽度,那么就能使用 horizontalAlignment 参数来定位子项在 Column 中的水平位置
    horizontalAlignment: Alignment.Horizontal = Alignment.Start,
    content: @Composable ColumnScope.() -> Unit
){
}

二:Compose-Modifier(基础)

Modifier是一个装饰或者添加行为的有序的,不变的集合,例如background、padding 、宽高、焦点点击事件等。或者给Text设置单行、给Button设置各种点击状态等行为。其实就是所有控件的通用属性都在Modifier中。
image.png
1.Modifier.width(100.dp)
2.Modifier.height(100.dp)
3.Modifier.size(100.dp,100.dp)
设置自身的高度,单位dp,值可以被覆盖
4.Modifier.background(Color.Blue)//设置背景色
5.Modifier.shadow(elevation: Dp, shape: Shape, clip: Boolean)//设置阴影,阴影大小,形状,是否裁剪clip = elevation>0
6.Modifier.alpha(alpha: Float)//设置透明度
7.Modifier.clip(shape: Shape)//设置切角shape
8.Modifier.border(width: Dp, color: Color, shape: Shape)//设置设置边框宽度width,颜色color,边框形状shape
9.Modifier.padding(start: Dp, top: Dp, end: Dp, bottom: Dp)//等效于"android:padding",偏移出父控件会被裁剪

Modifier类调用不同的修饰函数
1.clickable 使得可组合响应用户输入

//第一种
Modifier.background(Color.Blue).size(100.dp).shadow(15.dp, RectangleShape).clickable(){
                                                                                                                                
                }
//第二种

 modifier = Modifier.background(Color.Blue).size(100.dp)
                    .shadow(15.dp, RectangleShape).combinedClickable(
                        onClick = {
                            //单击

                        },
                        onDoubleClick = {
                            //双击

                        },
                        onLongClick = {
                            //长按

                        }

                    ),

2.padding 在元素周围流出控件
3.fillMaxWidth 使得可组合项填充其父项为它提供最大宽度

三:Scaffold(脚手架)

@ExperimentalMaterial3Api
@Composable
fun Scaffold(
//布局装饰
    modifier: Modifier = Modifier,
//屏幕顶部的标题栏
    topBar: @Composable () -> Unit = {},
//屏幕底部的标题栏
    bottomBar: @Composable () -> Unit = {},
//用来展示SnackBar的一个组件
    snackbarHost: @Composable () -> Unit = {},
//悬浮按钮
    floatingActionButton: @Composable () -> Unit = {},
//    悬浮按钮在屏幕上的位置
    floatingActionButtonPosition: FabPosition = FabPosition.End,
//脚手架组件内容的背景色
    containerColor: Color = MaterialTheme.colorScheme.background,
//脚手架组件内容的背景色
    contentColor: Color = contentColorFor(containerColor),
    contentWindowInsets: WindowInsets = ScaffoldDefaults.contentWindowInsets,
/脚手架中的组件
    content: @Composable (PaddingValues) -> Unit
){

}
 @OptIn(ExperimentalMaterial3Api::class)
    @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
    @Composable
    fun scaffold() {
        val scope = rememberCoroutineScope()
        Scaffold(
            modifier = Modifier,
            topBar = {//屏幕顶部的标题栏
                TopAppBar(
                    title = {
                        Text("脚手架")
                    },
                    navigationIcon = {
                        Icon(
                            imageVector = Icons.Default.Menu,
                            contentDescription = "Menu",
                            tint = Color.Black
                        )
                    })
            },
            bottomBar = {
                BottomAppBar(content = {
                })

            },
            floatingActionButton = {
                ExtendedFloatingActionButton(
                    content = { Text("点击") },
                    onClick = {
                        scope.launch { }
                    })
            },
            //悬浮按钮位于屏幕的

            floatingActionButtonPosition = FabPosition.End,

            content = {
                ContentText()
            }


        )
    }

    @Composable
    fun ContentText() {
        Column(
            verticalArrangement = Arrangement.Center,
            horizontalAlignment = Alignment.CenterHorizontally,
            modifier = Modifier
                .fillMaxSize()
                .background(Color.White)
        ) {
            Text(text = "Content", color = Color.Black)
        }
    }

四:Spacer空白组件,TopAppBar头组件,BottomAppBar底布局

Spacer空白布局

@Composable
@NonRestartableComposable
fun Spacer(modifier: Modifier) {
    Layout({}, measurePolicy = SpacerMeasurePolicy, modifier = modifier)
}

//用法
Spacer(modifier=Modifier.width(20.dp))

TopAppBar头部布局

@ExperimentalMaterial3Api
@Composable
fun TopAppBar(
//标题
    title: @Composable () -> Unit,
    modifier: Modifier = Modifier,
//左边图标
    navigationIcon: @Composable () -> Unit = {},
//右边图标
    actions: @Composable RowScope.() -> Unit = {},
    windowInsets: WindowInsets = TopAppBarDefaults.windowInsets,
    colors: TopAppBarColors = TopAppBarDefaults.smallTopAppBarColors(),
    scrollBehavior: TopAppBarScrollBehavior? = null
)


//栗子
TopAppBar(
                    title = {
                        Text("脚手架")
                    },
                    navigationIcon = {
                        Icon(
                            imageVector = Icons.Default.Menu,
                            contentDescription = "Menu",
                            tint = Color.Black
                        )
                    },
                actions = {
                    IconButton(onClick = {}){
                        Icon(Icons.Filled.Search,null)
                    }
                    IconButton(onClick = {}){
                        Icon(Icons.Filled.MailOutline,null)
                    }
                })

BottomAppBar 脚布局

@Composable
fun BottomAppBar(
    modifier: Modifier = Modifier,
    containerColor: Color = BottomAppBarDefaults.containerColor,
    contentColor: Color = contentColorFor(containerColor),
    tonalElevation: Dp = BottomAppBarDefaults.ContainerElevation,
    contentPadding: PaddingValues = BottomAppBarDefaults.ContentPadding,
    windowInsets: WindowInsets = BottomAppBarDefaults.windowInsets,
    content: @Composable RowScope.() -> Unit
)

//栗子
bottomBar = {
                NavigationBar() {
                    NavigationBarItem(
                        icon = {
                            Icon(
                                imageVector = Icons.Filled.Home,
                                contentDescription = null
                            )
                        },
                        onClick = {},
                        selected = true
                    )

                }

            },

NavigationBar 底部布局

@Composable
fun NavigationBar(
    modifier: Modifier = Modifier,
    containerColor: Color = NavigationBarDefaults.containerColor,
    contentColor: Color = MaterialTheme.colorScheme.contentColorFor(containerColor),
    tonalElevation: Dp = NavigationBarDefaults.Elevation,
    windowInsets: WindowInsets = NavigationBarDefaults.windowInsets,
    content: @Composable RowScope.() -> Unit
){

}

//栗子
 bottomBar = {
                NavigationBar() {
                    NavigationBarItem(
                        icon = {
                            Icon(
                                imageVector = Icons.Filled.Search,
                                contentDescription = null
                            )
                        },
                        onClick = {},
                        selected = true
                    )
                    NavigationBarItem(
                        icon = {
                            Icon(
                                imageVector = Icons.Filled.Home,
                                contentDescription = null
                            )
                        },
                        onClick = {},
                        selected = true
                    )

                }

            },

五:FloatingActionButton组件

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun FloatingActionButton(
    onClick: () -> Unit,
    modifier: Modifier = Modifier,
    shape: Shape = FloatingActionButtonDefaults.shape,
    containerColor: Color = FloatingActionButtonDefaults.containerColor,
    contentColor: Color = contentColorFor(containerColor),
    elevation: FloatingActionButtonElevation = FloatingActionButtonDefaults.elevation(),
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
    content: @Composable () -> Unit,
)

栗子:
  floatingActionButton = {
                ExtendedFloatingActionButton(
                    content = { Text("点击") },
                    onClick = {
                        scope.launch { }
                    })
            },
            //悬浮按钮位于屏幕的

            floatingActionButtonPosition = FabPosition.End,

小知识:
Android Studio Adb connection Error 导致一直弹USB调试或断了连上
解决:
ile -- Settings -- Build, Extension, Deployment -- Debugger下面的 Enable adb mDNS for wireless debugging勾勾去掉
大概意思就是开启无线调试,把它去掉就行了。
image.png

关于Android需要了解学习的UI框架等android常用ui框架的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android MVP架构标准,用于加载具有Android资源的Model类的UI、Android Tangram模型:连淘宝、天猫都在用的UI框架模型你一定要懂、Android UI框架、Android UI框架Compose 的布局组件等相关知识的信息别忘了在本站进行查找喔。

本文标签: