本文将为您提供关于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 MVP架构标准,用于加载具有Android资源的Model类的UI
- Android Tangram模型:连淘宝、天猫都在用的UI框架模型你一定要懂
- Android UI框架
- Android UI框架Compose 的布局组件
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 的库,不过比他们做的更好。 强烈推荐。
- 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
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; } }
解决方法
我不太了解这个课程的目标,但是在通用的方式你应该遵循这个逻辑
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框架模型你一定要懂
前言
Tangram
是阿里出品、用于快速实现组合布局的框架模型,在手机天猫Android
&iOS
版 内广泛使用
- 今天我将对
Tangram
模型 进行全面介绍,希望你们会喜欢。
目录
1. 为什么要使用 Tangram 模型
在讲解 Tangram
模型 前,我们先来搞懂一个问题:为什么要使用 Tangram
模型
1.1 背景
- 技术 是用于 满足需求业务 的 解决方案,现有的需求业务可分为三类:基础业务、常规业务 & 临时性任务。具体细节如下:
1.2 问题
相应的解决方案的特点如下:
- 对于基础业务,采用
Native
的方案,不作过多解释 - 对于临时性业务,随着
WebView
性能的提升 和 移动端设备硬件的发展,现阶段HTML
加载速度 & 渲染速度慢的缺点将会逐渐被完善,对于临时性业务的需求能够满足
但对于常规业务,至今还没盖棺定论的方案,所以才会存在两种方案:WebView+HTML
& Dynative
方案。但这两种方案是存在问题的:
WebView+HTML
方案:随着WebView
性能的提升 和 移动端设备硬件的发展,HTML加载速度 & 渲染速度慢的缺点将会逐渐被完善,所以常规业务需要的性能还是难以满足。Dynative
(如RN
、Weex
):虽然性能能满足,但由于该技术还不成熟,稳定性差,且开发难度大,所以对于常规业务还是非常谨慎的使用。
1.3 解决方案
Tangram
正是解决 常规业务 的方案:在性能、稳定性 & 开发周期 取得较好平衡的一种折中方案。
2. 定义
-
是一种用于快速实现组合布局的框架模型
- 所谓概念模型,即只停留在定性分析的解决方案 & 思路,还未真正具体实现
Tangram
的具体实现是一种Native
(iOS
&Android
)的快速实现 组合布局 的界面开发框架,下面会详细说明
-
中文即七巧板,即该框架 提供一系列基本单元布局,通过快速拼装就能搭建出一个具备多种布局的页面
就像使用七巧板 通过现有板块 快速拼凑出 多样的形状一样。
3. 应用场景
- 常规业务 中 复杂的布局格式混排,如:浮动布局、栏格布局、通栏布局、一拖N布局、瀑布流布局,还可以组合使用这些布局
- 具体场景是:如电商平台首页、活动频道等等
Tangram
模型目前已在手机天猫 & 淘宝 Android 版内广泛使用
4. Tangram优点
4.1 高性能
在性能方面,希望 贴近Native开发,重点:页面渲染效率 & 组件回收复用
- 页面渲染:为了提升渲染效率,Tangram将在视图渲染之前把大量的计算工作在VM中完成,并缓存在VM组成的树形结构里。
- 回收和复用——Tangram在Android和iOS平台上分别开发了
VLayout
和LazyScroll
两个基础组件,通过一个双索引可见区域组件发现算法,实现了跨父节点组件的高效回收和复用。
4.2 面向业务
a. 组件业务化
根据 业务类型 将组件 封装成 能承担一定业务能力的复用单元。
如一种瀑布流布局
b. 动态化
提供 控制台 让业务方可直接控制基于Tangram的产品,如调整页面布局,切换页面数据等。
- 即 页面的排版布局 可 通过后端数据的下发来动态调整
- 服务网关的建设目标是最大程度的降低业务创建Tangram页面的压力和成本。
但这种动态化 是 面向粗粒度组件:通过 布局+组件的形式搭建整个页面,而不是一般从 基本的UI元素(如按钮blabla)搭建页面。
- 其实也很好理解,业务人员需要用到的是 能承担一定业务能力的“业务布局”,而不是单一UI元素(按钮、文本blabla)
- 好处:使用成本低,上线周期短
4.3 扩展性好
采用插件化扩展
内部本来就注册在框架里 & 外部也可注入扩展模块
4.4 多端一致性
对于业务开发,存在多端表现不一致的问题。为了解决该问题,以前需要通过复杂的网关逻辑来兼容多端逻辑不一致情况。
为了防止该问题,对于Tangram,预先制定了两个开发原则:
- 任意新功能的提出都是不区分平台,在功能设计中必须同时考虑多端功能,具体的实现方案和逻辑必须多端统一Review以保证多端表现一致。
- 任意一端的变更都必须在改动前把方案同步给其他端,而且变更必须多端同步发布。
5. 架构 & 原理讲解
-
Tangram
的架构主要由三部分组成:Tangram SDK
Tangram AC
Tangram OP
-
每部分的具体细节如下:
本文主要讲解的是用于客户端页面渲染的Tangram SDK
。
5.1 知识储备
在讲解架构前,我们需要先了解Tangram
的一些模型知识。
a. 页面概念模型
-
一个页面实体由3部分组成:页面(Page)、卡片(Card) & 组件(Item)
-
具体如下图:
-
之间的关系:组件 构成 卡片、卡片 构成 页面。
-
对于
Tangram
,他的页面概念模型可用 树状模型(3层结构) 表示:
下面主要讲解 三层结构中 的 卡片 & 组件。
b. 卡片
-
作用:负责布局逻辑
- 即对组件进行 组合 & 布局
- 只声明布局方式,不提供布局细节
-
组成
卡片由有四部分组成:header、footer、body、style
关于四个部分的细节,我将在Tangram具体使用时进行介绍
c. 组件
-
定义:最小单位的UI元素
日常使用的普通的
View
,如按钮、图片等等 -
作用:负责UI元素展示 & 业务逻辑
-
组成元素:视图模型(
ViewModel
) & 样式(Style
)
视图模型:所有组件对有一个统一视图模型(ViewModel
),主要是定义了生命周期事件:
- 组件初始化时会调用
init()
- 滑入屏幕绑定数据时,调用
bind()
- 滑出屏幕解除绑定时,调用
unbind()
关于 组件的基本样式 主要包括:组件背景、外边距、内边距、组件的宽高比等等。具体细节会在具体使用时介绍。
5.2 Tangram结构
Tangram
的结构主要由5部分组成,如下图:
5.3 原理解析
当页面数据传入时:
-
核心引擎调用 数据解析器 将 数据 转换成卡片和组件对象
- 解析过程会根据之前注册过的卡片、组件类型来解析
- 未定义的数据将会被抛弃
-
数据解析器将解析完毕的卡片、组件对象传递给布局框架,进行页面渲染。
- 布局框架 根据卡片提供的布局信息进行布局
- 布局框架 根据组件提供的组件信息获取组件实例,布局到布局容器里
6. 扩展模块
- 上面介绍的内容里是
Tangram
的核心功能 - 但当需要落实到具体业务,仅仅该核心功能是无法满足的,还需要很多辅助、扩展的功能
Tangram
采用 插件化形式 进行扩展:
7. 具体使用
- 上述讲解的 只是
Tangram
概念模型基本架构 & 原理 - 在具体实现时 会根据 不同平台 采用 不同实现 方案:
- 对于
Android
:采用基于RecyclerView
+自定义LayoutManager
的实现方案具体请看文章: Android开源库V - Layout:淘宝、天猫都在用的UI框架,赶紧用起来吧!
- 对于
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框架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中。
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勾勾去掉
大概意思就是开启无线调试,把它去掉就行了。
关于Android需要了解学习的UI框架等和android常用ui框架的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android MVP架构标准,用于加载具有Android资源的Model类的UI、Android Tangram模型:连淘宝、天猫都在用的UI框架模型你一定要懂、Android UI框架、Android UI框架Compose 的布局组件等相关知识的信息别忘了在本站进行查找喔。
本文标签: