这篇文章将介绍如何使用Android Studio创建第一个Android应用,重点介绍Android Studio的目录结构。...在欢迎页面点击New Project按钮。 进入下一个界面之后选中Basic Activity 按钮,创建一个基本视图的Android应用。...选择好窗口之后,从该窗口的下拉列表中选择Android视图。然后,你就能看到如下文件。...这里其实还涉及到FirstFragment和SecondFragment两个Fragment。它们两个是用来控制图7中的点击按钮的。...FloatingActionButton是图7中右下侧的邮箱图标的按钮。
无状态Widget和有状态Widget之间的重要区别在于StatefulWidgets具有一个State对象,该对象存储状态数据并将其传递到树重建中,因此状态不会丢失。...当构建 Widget 树时,你会把 Animation 指定给一个 Widget 的动画属性,比如 FadeTransition 的 opacity,并告诉控制器开始动画。...= points; } 以上代码片段的完整部分可以在课程源码中查找。 绘制圆形和方形 在Flutter中,你可以使用 CustomPaint 和 CustomPainter 类去绘制到画布。...以下示例显示如何使用CustomPaint widget在绘制阶段绘制。 它实现了抽象类CustomPainter,并将其传递给CustomPaint的painter属性。...参考资料 Flutter从入门到进阶实战携程网App
Android Compose 新闻App(六)导航动画、WebView、浮动按钮、底部导航 前言 正文 一、导航动画 ① 添加依赖 ② 使用 二、WebView使用 ① 导航传递URL参数 ② 配置WebView...popEnterTransition:当前页面在另一个页面弹出后重新出现的动画。 popExitTransition:当前页面弹出栈后隐藏时的动画。...这些动画可以直接设置在NavHost中,下面我们设置一下: 下面我们运行一下: 可以看到当前页面进入到详情页面有动画效果,而返回之前的页面时也是这个动画效果,两者一样,我们再试试其他的动画...然后是设置点击跳转的地方,如下图中所示: 这里的列表数据中的new中是有url的,因此我们几点将title和url传递过去,在EpidemicNewsListPage中添加如下图所示的代码...三、FloatingActionButton使用 浮动按钮在日常开发中,也是很常见的,下面在我们的EpidemicNewsListPage中添加一个浮动按钮。
与单一样式的关键区别在于分片,即如何把一段字符串分为几个片段,给每个片段单独设置样式: Android中使用SpannableString实现 iOS中使用NSAttributedString来实现...FadeInImage控件提供图片占位功能,并支持在图片加载完成时淡入淡出视觉效果。由于Image支持gif格式,还可将一些炫酷加载动画作占位图。...ImageStream开始异步加载,加载完毕后,更新缓存 最后,通知_ImageState刷新UI 图片展示流程: ImageCache使用LRU缓存更新策略,默认最多存储1000张图片,最大缓存限制...分别定义FloatingActionButton、FlatButton与RaisedButton,功能完全一样,点击时打印文字: FloatingActionButton(onPressed: () =...在阅读Flutter SDK中Text、Image、FadeInImage、FloatingActionButton、FlatButton和RaisedButton的源码时,可以发现它们的build函数中都有一个内部真正承载其视觉功能的控件
面对这样的需求,在Android中,我们使用 SpannableString来实现;在iOS中,我们使用NSAttributedString来实现;而在Flutter中国也有类似的概念,即TextSpan...FadeInImage控件提供了图片占位的功能,并且支持在图片加载完成时淡入淡出的视觉效果。此外,由于Image支持gif格式,我们甚至还可以将一些炫酷的加载动画作为占位图。...图片加载过程由 ImageProvider 触发,而 ImageProvider 表示异步获取图片数据的操作,可以从资源文件、网络等不同的渠道获取图片。...最大缓存限制为100MB,当限定的空间已经存满数据时,把最久没有被访问到的图片清除。图片缓存只会在运行期间生效,也就是只缓存在内存中。...下面代码中,我分别定义了FloatingActionButton、FlatButton和RaisedButton,它们的功能完全一样,在点击时打印一段文字: FloatingActionButton(
enterAnim:跳转时的目标页面动画 exitAnim: 跳转时的原页面动画 popEnterAnim:回退时的目标页面动画 popExitAnim:回退时的原页面动画 然后,打开Code面板,生成的代码如下...在Android中,页面之间如果要传递数据,建议传递最少量的数据,因为在 Android 上用于保存所有状态的总空间是有限的。...如果您需要传递大量数据,可以使用 ViewModel。...3.1 使用Bundle传递数据 使用Bundle传递数据时,首先创建 Bundle 对象,然后使用 navigate() 将它传递给目的地,如下所示。..." /> 然后,我们在FragmentA.java中使用如下代码传递数据,如下所示。
进行展示的 3.NavController:用于在代码中完成Navigation Graph中具体的页面切换工作 当想要切换Fragment时,使用NavController对象,指定跳转Navigation...中的action添加即可 image.png 3.参数传递 NavController的navigate方法可以传递一个bundle,接受的Fragment和以前一样可以用getArguments方法获取...中的action navController.navigate(R.id.action_homeFragment_to_detailFragment, bundle); 还可以使用插件的方式: 在主工程的...中定义参数了 xml中定义好后,在fragment跳转时使用 button.setOnClickListener(new View.OnClickListener() {...在NavigationGraph中使用deepLink标签,params可以以参数传递的方式获取: <fragment android:id="@+id/settingFragment
6.4 屏幕间的跳转和事件的传递 在一般情况下,Android 的每一个屏幕基本上就是一个活动(Activity),屏幕之间的切换实际上就是在活动间互相调用的过程,Android 使用 Intent 完成这个动作...点击“Go”按钮从 Forward 跳转到 ForwardTarget,这个内容在 Java 源文件 Forward.java 的以下片段中处理: public void onClick(View v)...本例中使用了 finish()函数表示当前的活动结束,这样在第二个活动(ForwardTarget)启动时,第一个活动(Forward)已经不存在了。...6.4.2.带有返回值的跳转 在某些时候,从跳转的对象返回时,跳转源头需要得到其返回的结果,这样两个屏幕才可实现一些交互。...的代码片段如下所示: private OnClickListener mCorkyListener = new OnClickListener() { public void
6.4 屏幕间的跳转和事件的传递 在一般情况下,Android 的每一个屏幕基本上就是一个活动(Activity),屏幕之间的切换实际上就是在活动间互相调用的过程,Android 使用 Intent 完成这个动作...点击“Go”按钮从 Forward 跳转到 ForwardTarget,这个内容在 Java 源文件 Forward.java 的以下片段中处理: public void onClick(View v)...本例中使用了 finish()函数表示当前的活动结束,这样在第二个活动(ForwardTarget)启动时,第一个活动(Forward)已经不存在了。...6.4.2.带有返回值的跳转 在某些时候,从跳转的对象返回时,跳转源头需要得到其返回的结果,这样两个屏幕才可实现一些交互。...的代码片段如下所示: private OnClickListener mCorkyListener = new OnClickListener() { public void onClick(
Activity的onUserInteraction方法 该方法为空,从注释可以知道,当此activity在栈顶时,触屏点击按home、back、menu键等都会触发此方法,一般会用于屏保。...如果event为空,则将动作设为ACTION_CANCEL,接着用一个for循环不断向下传递触摸事件,然后再清除所有触摸目标,最后在回收拷贝的对象。...从最开始到这里,我们大概分析了一下事件分发流程,通过调用Activity的dispatchTouchEvent方法,事件会首先被派发到最顶级的DecorView也就是ViewGroup,再由ViewGroup...方法,最终将事件从ViewGroup传递到 View,那么事件在后续如何传递的,接下来继续分析。...Android事件分发机制简图 事件从Activity.dispatchTouchEveent()开始传递,只要没有拦截,就会从最上层(ViewGroup)开始一直往下传递,子View通过onTouchEvent
Safe Args插件传递参数 使用Safe Args Gradle插件,该插件可以生成简单的对象和构造器类,支持在destination之间进行类型安全的导航和参数传递。...|| super.onOptionsItemSelected(item); } 当我们在Fragment中添加菜单跳转目标页时,需要覆盖目标页面onCreateOptionsMenu...当用户通过显式深层链接打开您的应用时,任务返回堆栈会被清除,并被替换为相应的深层链接页面。当用户从深层链接页面按下返回按钮时,他们会返回到相应的导航堆栈。...在触发隐式深层链接时,返回堆栈的状态取决于是否使用 Intent.FLAG_ACTIVITY_NEW_TASK 标志启动隐式Intent。...定制FragmentNavigator 阅读FragmentNavigator的源码时,可以看到页面切换的时候使用的是replace(),这会造成Fragment生命周期的重启,界面数据重新加载,不能复用
基本使用 虽然在之前的文章中已经很详细的介绍了Navigation,但是这里也简单的叙述一下我在项目中的具体使用: 2.1 Navigation+DrawerLayout+ToolBar 我们可以通过使用...,但是需要你填写类的全路径,同时你要保证实体类实现了序列化 我们可以通过把参数传递封装到Bundle中,然后再执行navigate()方法时传递过去,例如: val args = Bundle() args.putString...我们一般手动切换Fragment时可以调用这个方法,最后就是跟踪到这里。...= null && isTopLevelDestination); } } 原来如此,到这里就应该清楚了,当我们切换Fragment时,大概流程如下: 切换目标fragment到栈顶...总结 4.1 流程 考虑到我们开始如果直接从setupWithNavController 入口进行分析的话,可能不太容易找到怎么创建的graph布局中的fragment,以及NavHostFragment
纯代码的方式使用起来不是特别友好,并且Fragment和App bar在管理和使用的过程中显得很混乱。 ...:当你想要切换Fragment时,使用NavController对象,告诉它你想要去Navigation Graph中的哪个Fragment,NavController会将你想去的Fragment展示在...5.使用NavController完成导航 经过以上的步骤后,我们还需要通过NavController对象,在代码中完成具体的页面跳转工作,我们需要在MainFragment的布局文件中添加一个...四.使用safe args插件传递参数 在使用这个插件前,需要在project下的build.gragle文件中添加以下代码: buildscript { dependencies {...我们强烈建议您将 Safe Args 用于导航和数据传递,因为它可以确保类型安全。这是Android Studio官网的原话。
相信你在很多的博客上或者自己的项目上看过或者使用过。而现在可以通过另一个更简洁的方式,那就是Activity+ Navigation + Fragment。...NavController:在得知切换目标时,控制NavHost去显示B这个Fragment。 这么一说,你是否有一些理解了呢? 2....NavController控制显示Fragment 进入到MainActivity,在onCreate添加一句代码: //获取navController NavController...很明显,跳过去了,不过感觉还少了点什么,因为平常Fragment之间跳转时都会传递参数过去,那么这个也要传参数,而Navigation也提供了这个功能,可以通过Bundle进行传参。...然后这个时候你再试一下,从A到B,然后点击系统返回键,就会返回到A,然后再点一下返回键就会退出当前应用。 神不神奇?
基本使用 虽然在之前的文章中已经很详细的介绍了Navigation,但是这里也简单的叙述一下我在项目中的具体使用: 2.1 Navigation+DrawerLayout+ToolBar 我们可以通过使用...,但是需要你填写类的全路径,同时你要保证实体类实现了序列化 我们可以通过把参数传递封装到Bundle中,然后再执行navigate()方法时传递过去,例如: val args = Bundle()...我们一般手动切换Fragment时可以调用这个方法,最后就是跟踪到这里。...= null && isTopLevelDestination); } } 原来如此,到这里就应该清楚了,当我们切换Fragment时,大概流程如下: 切换目标fragment到栈顶...总结 4.1 流程 考虑到我们开始如果直接从setupWithNavController 入口进行分析的话,可能不太容易找到怎么创建的graph布局中的fragment,以及NavHostFragment
3.4 使用:当成FrameLayout使用即可,替换FrameLayout原来的位置....它默认会使用colorAccent来作为按钮的颜色, 我们还可以通过给按钮指定一个图标来表明这个按钮的作用是什么。 下面开始来具体实现。...下面实战悬浮按钮的点击事件: 在MainActivity的onCreate()中添加以下代码: //悬浮按钮点击事件 FloatingActionButton fab = (FloatingActionButton...打个比方,如果我们在执行删除操作的时候只弹出一个Toast提示,那么用户要是误删了某个重要数据的话肯定会十分抓狂吧,但是如果我们增加一个Undo按钮,就相当于给用户提供了一种弥补措施,从而大大降低了事故发生的概率...可以看到,Snackbar从屏幕底部出现了,上面有我们所设置的提示文字,还有一个Undo按钮,按钮是可以点击的。 ? 过一段时间后Snackbar会自动从屏幕底部消失。
今天,我们将使用 Flutter 构建一个动态的 todo list 的应用。 开发完成的效果如下: 我们直接进入正题。...回到 _TodoListState 中,我们开始让我们的挂件展示点东西。...在上面代码片段中,通过 map 方法返回每个元素的 TodoItem。 然后,在应用的底部,我们定义了一个按钮。当按钮被点击时候,将调用 _displayDialog 方法。...然后我们使用 ListTile 挂件来展示内容和添加点击事件。 展示 Dialog 去添加列表项 点击应用的右下角的按钮,将会调起 _displayDialog 方法。...Future 表明在将来的某个时候将返回潜在的值或者错误信息。
以及Android Studio3.3的使用 在更新之后,其中还有一大亮点就是Navigation Editor(导航编辑器) Navigation 说到Navigation Editor我们就不得不先简单说一下...NavController: 管理NavHost中的应用程序导航的对象。 当用户在整个应用程序中移动时,NavController会协调NavHost中目标内容的交换。...当我们通过导航浏览我们的应用程序的时候,我们可以通知NavController我们要沿着导航图当中的特定的路径进行导航,或者直接导航到特定的目的地。...接下来NavController可以在NavHost当中显示出适当的目标视图。 导航组件有很多的好处: 可以处理fragment的事务。 默认情况下可以正确的处理好各个事物之间前后的操作。...Safe Args - 一种Gradle插件,可在目的地之间导航和传递数据时提供安全的数据类型。
FloatingActionButton FloatingActionButton从本质讲就是一个ImageView,从FloatingActionButton的继承来看,它首先继承了ImageButton...默认正常显示时的背景颜色 app:elevation :FloatingActionButton阴影的深度,默认时的阴影 app:rippleColor:FloatingActionButton点击时的背景颜色...app:pressedTranslationZ:FloatingActionButton点击时阴影的深度 例子效果图 ?...FloatingActionButton显示与隐藏 那如何实现滑动列表时,下滑显示和上滑隐藏的效果呢?...到这里,关于FloatingActionButton和Snackbar基本就讲完了。非常简单,我相信大家都很容易理解。
领取专属 10元无门槛券
手把手带您无忧上云