首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 天气APP(十四)修复UI显示异常、优化业务代码逻辑、增加详情天气显示

前言 在上一篇文章中增加了自定义背景的功能的同时也遗留了一些问题,为阅读者带来的不便,敬请谅解,在这一篇中将会优化这些问题,同时优化业务逻辑代码,做到用最少的代码量办最多的事情,同时对UI的用户体验进一步提升...,增加天气详情数据的显示。...实践之前,我先给生活指数加上一个紫外线的数据返回显示,首先修改activity_main.xml文件 ? 在舒适度的上方加一个显示紫外线的,深圳的紫外线太强了,讲真的。..." /> android:color="#FFF" /> ① 逐小时天气预报的详情UI 在项目的layout文件下创建window_hourly_detail.xml...OK,还是蛮简单的吧(PS:由于没有UI,大家这个都知道开发的审美,就先将就一下,如果有好的建议可以给我提)。

1.4K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Android UI】Canvas 画布 ⑦ ( Canvas 绘制显示区域 | Canvas 绘制矩形源码分析 )

    文章目录 一、Canvas 绘制显示区域 二、Canvas 绘制矩形源码分析 Canvas 状态保存机制 中 , 存在两个栈结构 , 分别是 状态栈 和 图层栈 ; 其中 图层栈 又称为 Layer 栈...; Canvas 画布中 , 有 2 套坐标系 , 分别是 : Canvas 自身坐标系 Canvas 绘图坐标系 一、Canvas 绘制显示区域 ---- Canvas 绘制时 , 并不是由 Canvas...状态栈 中 最外层的坐标系 , 组件一旦创建成功 , 该坐标系是不会改变的 ; Canvas 自身坐标系是在 绘制流程中 ViewRootImpl#draw 方法中确定的 , 是无法改变的 ; 参考 【Android...UI】Canvas 画布 ⑥ ( Canvas 绘图源码分析 | ViewRootImpl#draw 方法源码 | ViewRootImpl#drawSoftware 方法源码 ) 博客 ; Canvas..., 画出边界的元素是不显示的 ; 如下图 , 蓝色矩形框是 Canvas 自身坐标系 , 红色矩形框是 Canvas 绘图坐标系 , 两个坐标系重合部分 绿色矩形框 就是显示的部分 , 红色矩形框范围绘制的内容不显示在界面中

    1.6K10

    当 Espresso 遇见 Android 单元测试

    如果依赖Android环境,但是没有UI相关或者UI比较简单(如点击按钮)的单元测试可以使用开源库Robolectric解决依赖问题,使测试运行在JVM上,而非模拟器上,大大提高测试运行效率。...Activity& Espresso Activity是承载UI控件的Android基本组件,Espresso则是可操作Activity的Google原生UI自动化框架。...因为Android更改UI只能在UI线程中进行,所以改变控件属性的代码只能写在Activity的代码中,而不是Espresso的测试代码中。...); (2)点击提交按钮; (3)检查年正常显示; (4)检查月正常显示; (5)检查日正常显示; (6)检查星期未显示,已隐藏。...Activity中显示UI控件、解析命令与调用UI控件函数。 Espr 当然,Espresso不仅局限于此,可以一定程度上取代Robolectric与Uiautomator。

    2.5K10

    Android6.0源码分析之蓝牙

    3,Z:\R3\android\packages\apps\Settings\src\com\android\settings\bluetooth 有关蓝牙的可检测性设置,可检测时间设置,界面UI布局...mEmptyView); mEmptyView.setGravity(Gravity.START | Gravity.CENTER_VERTICAL); 当界面没有任何preference时(比如蓝牙未开启状态下不显示任何...preference)初始化一个textview,在屏幕上垂直居中,水平居左,比如在蓝牙未开启时会显示“要搜索可用设备,请打开蓝牙功能”等等 final SettingsActivity activity...) 3,addPreferencesForActivity方法 addPreferencesFromResource(R.xml.bluetooth_settings); 加载界面布局,可以看出蓝牙UI...,当蓝牙名称发生改变时,会对显示本地蓝牙的preference信息进行更改,更改操作如下,信息显示在preference的summary if (mLocalAdapter.isEnabled() &

    1K10

    项目需求讨论-标题栏上的搜索功能

    ,就知道在第一步中的标题栏的布局的上面,覆盖了一层横向布局,用来显示SearchView和取消按钮,该界面默认是隐藏的,只有当按了搜索图标按钮,再让这个横向布局显示,盖在上面,(当然同时也可以让原来的标题和搜索图标按钮隐藏...android.support.percent.PercentFrameLayout>复制代码 这下我们的布局整个都实现了。只要对相应的按钮实现点击事件,控制相关控件的显示及隐藏即可。...因为设置他们的展开与不展开,正好会自动调用键盘的显示和隐藏。...未调用setIconifiedByDefault(false) ?...Toast.makeText(aty, "你搜索了:" + query, Toast.LENGTH_SHORT).show(); return false; } @Override public boolean onQueryTextChange

    1.4K10

    Android 9.0 强势来袭,带来了哪些新特性?

    Android 9通过以下更改简化了通知渠道设置: 阻止渠道组:用户现在可以在应用的通知设置中阻止整个频道组。...此实现允许您的应用显示动画图像,而无需管理其更新或干扰应用的UI线程上的其他事件。 一个AnimatedImageDrawable可以利用的实例进行解码 ImageDecoder。...在未计量的网络上,JobScheduler可以运行预取作业以改善用户体验,例如通过预取标题。...如果窗格具有辅助功能窗格标题,则辅助功能服务会在窗格更改时收到更详细的信息。此功能允许服务向用户提供有关UI中更改内容的更详细信息。...窗口细节更改 应用程序同时重绘多个窗口时,Android 9可以更轻松地跟踪应用程序窗口的更新。

    3.5K20

    Android Sdk版本、Support包版本及常用框架最新版本汇总

    SDK Verion 数据来源于android官网,和一篇博客 Api 版本号 代号 发布时间 主要更新内容 1 1.0 无 2008-09-23 Web浏览器显示,短信,媒体播放器,相机,Wifi...,动态壁纸,支持更多屏幕尺寸 6 2.0.1 Eclair 2009-12-03 次要API更改,错误修正和框架行为更改 7 2.1 Eclair 2010-02-12 对API和错误修正的微小修改 8...Support Library Android 支持库提供了诸多未内置于框架的功能。这些库提供向后兼容版本的新功能、框架中未包含的实用 UI 元素,以及应用可以利用的一系列实用程序。...om.android.support:support-core-utils:28.0.0 v4 core-ui com.android.support:support-core-ui:28.0.0 v4...com.android.support:recommendation:28.0.0 N/A Wear UI com.android.support:wear:28.0.0 N/A multidex com.android.support

    2.8K30

    android开关按钮

    "       反之就是未选中off情况下的效果:android:drawable="@drawable/ios7_switch_off" 之后在布局文件中写控件: <ToggleButton android...="" /> 这里的     android:textOn=""   表示:选中情况下显示的文本 android:textOff=""   表示:未选中情况下显示的文本 android:checked...="false"  表示:初始化时候,默认是未选中的 android:button="@drawable/toggle_btn"  表示:button样式 android:background="@...注意:由于状态切换等,enabled属性改变等,是你自定义的方法内的话,你必须自己去调用invalidate();方法,去让UI判断是否有更改并做出相应的变化。...是否需要变化,之后在UI方法onDraw(Canvas canvas)中调用: android.graphics.Canvas.saveLayerAlpha(RectF bounds, int alpha

    4K80

    SwitchButton 开关按钮 的多种实现方式

    "       反之就是未选中off情况下的效果:android:drawable="@drawable/ios7_switch_off" 之后在布局文件中写控件: <ToggleButton android...="" /> 这里的     android:textOn=""   表示:选中情况下显示的文本 android:textOff=""   表示:未选中情况下显示的文本 android:checked...="false"  表示:初始化时候,默认是未选中的 android:button="@drawable/toggle_btn"  表示:button样式 android:background="@android...注意:由于状态切换等,enabled属性改变等,是你自定义的方法内的话,你必须自己去调用invalidate();方法,去让UI判断是否有更改并做出相应的变化。...是否需要变化,之后在UI方法onDraw(Canvas canvas)中调用: android.graphics.Canvas.saveLayerAlpha(RectF bounds, int alpha

    3.2K70

    【Flutter 混合开发】添加 Flutter 到 Android Fragment

    上面已经加载了 UI,但并不能一些交互和行为,通常情况下,需要将 Activity 的生命周期透传给 FlutterFragment: class MainActivity : AppCompatActivity...更改 FlutterFragment 的渲染模式 FlutterFragment 的渲染模式有两种:SurfaceView 和 TextureView,默认是 SurfaceView,SurfaceView...对于Flutter未绘制的任何像素,背景均为黑色。由于性能原因,首选使用不透明背景进行渲染。Android上具有透明的 Flutter 渲染会对性能产生负面影响。...但是,有的时候需要其透明,显示其底下的 UI,因此,Flutter在 FlutterFragment 中支持设置为透明。... 此时 FlutterFragment 的背景已经透明了,但运行时发现并没有透明,按钮也没有显示

    1.3K20

    使用 Android Studio 进行 Flutter 开发

    除了程序名外,在应用发布后,它将作为 Android 应用的包名,以及 iOS 应用的 Bundle ID。如果你可能发布此应用,最好现在就指定好它,应用发布后将无法更改。你的域名应该是唯一的。...“如果 Run 和 Debug 按钮不可用且未显示目标设备,则意味着 Flutter 未发现任何已连接的 iOS 、Android 设备或模拟器。你需要连接设备或启动模拟器才能继续。...对于未重载的小部件,将显示一个灰色圆圈,否则将显示一个灰色旋转圆圈。 “截图中的应用性能较差,通过重载分析器,你可以找到导致性能差的线索。重载分析器不是一个性能诊断工具,但它和性能有关。...该工具可以帮助你调试至少四个常见的性能问题: 整个屏幕(或大部分屏幕)由一个 StatefulWidget 构成,导致不必要的 UI 构建。...可将 UI 拆分成多个具有较轻量 build() 方法的 widget。 未在屏幕上显示的 widget 发生了重载。

    6.4K30

    全屏、沉浸式、fitSystemWindow使用及原理分析:全方位控制“沉浸式”的实现

    APP端之所以能够更改状态栏的颜色、导航栏的颜色,其实还是操作自己的View更改UI。...下面就来分析一下,APP层的API如何影响SystemUI的显示的,并一步步解开所谓沉浸式与全屏的原理,首先看一下如何更改状态栏颜色。...先看下关键点1跟2 ,这里是根据SystemUI的配置决定是否显示状态栏背景颜色,如果状态栏都不显示,那就没必要显示背景色了,其次,如果状态栏显示,但背景是透明色,也没必要添加背景颜色,即不满足(color..., 0 /* hideWindowFlag */); 同样mNavigationColorViewState也有显示的条件,如果设置了SYSTEM_UI_FLAG_HIDE_NAVIGATION...context.startServiceAsUser(intent, UserHandle.SYSTEM); } 之后会调用SystemUIApplication的startServicesIfNeeded(),如果服务未启动

    5.8K40

    Android入门教程 | Fragment 基础概念

    定制你的UI,在不同尺寸的屏幕上创建合适的UI,提高用户体验。 可复用,页面布局可以使用多个Fragment,不同的控件和内容可以分布在不同的Fragment上。...如果片段未提供界面,可以返回 null。 onPause() 系统会将此方法作为用户离开片段的第一个信号(但并不总是意味着此片段会被销毁)进行调用。...通常,应在此方法内确认在当前用户会话结束后仍然有效的任何更改(因为用户可能不会返回)。 可能还想扩展几个子类,而非 Fragment 基类: DialogFragment 显示浮动对话框。...一旦通过 FragmentTransaction 做出了更改,就必须调用 commit() 以使更改生效。...已暂停:另一个 Activity 位于前台并具有焦点,但此片段所在的 Activity 仍然可见(前台 Activity 部分透明,或未覆盖整个屏幕)。 已停止:片段不可见。

    3.5K40
    领券