Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏、 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体验。而Android 5.0之后谷歌又提出了 ColorPalette 的概念,让开发者可以自己设定系统区域的颜色,使整个 App 的颜色风格和系统的颜色风格保持统一。

在没有CCSystemBar之前,用Delphi实现上面的功能,是件很麻烦的事情,前期的博文也有写这方面的实现。现在这一切变的简单了!

先看一下CCSystemBar的方法:

    procedure TranslucentStatusBar;

    function checkDeviceHasNavigationBar: Boolean;//检查是否有底部的导航条
function checkNavigationBarShow: Boolean;//检查是否显示了底部的导航行
function getStatusBarPixelHeight(): Integer;//
function getStatusBarPointHeight(): Single;//获取StatusBar顶部状态栏Point高度
function getNavigationBarPixelHeight(): Integer;
function getNavigationBarPointHeight(): Single;//获取NavigationBar底部导航栏Point高度

了解了这个控件提供的方法,现在看看怎么具体使用:

1.拖一下控件到Form上,一般就是主Form了,然后再手工填加引用的单元:CC.VirtualKeyboard

2.放一个Toolbar,设置为Top,也可以用TRectangle,反正用一个可视控件,占用屏的顶部。接下来用CCSystemBar取得的状态条的高度来设置Toolbar的内边距:

AToolBar.Padding.Top := self.CCSystemBar1.getStatusBarPointHeight;

这是作者提供的例子使用的方法,也可以换用其他实现方式,比如:就用一个TRectangle来占用状态条区域。

3.按上面的实现,同理处理底部导航条,放置一个Toolbar,Align设置为MostBottom。

procedure TMainForm.SetNavigationBarHeight(AToolBar: TToolBar);
begin
if self.CCSystemBar1.checkNavigationBarShow then
begin
AToolBar.Height := self.CCSystemBar1.getNavigationBarPointHeight;
end
else
begin
AToolBar.Height := ;
end;
end;

看代码,如果导航条显示,则设置其高度为系统导航条的高度,反之,设置为0.

4.为了适应系统虚拟键盘的显示与隐藏,我们还需要处理Form的FormVirtualKeyboardHidden及FormVirtualKeyboardShown事件:

procedure TMainForm.FormVirtualKeyboardHidden(Sender: TObject;
KeyboardVisible: Boolean; const Bounds: TRect);
begin
SetNavigationBarHeight
(self.NavigationBar);
end; procedure TMainForm.FormVirtualKeyboardShown(Sender: TObject;
KeyboardVisible: Boolean; const Bounds: TRect);
begin
SetNavigationBarHeight
(self.NavigationBar);
end;

5.在Form.OnCreate事件中,初始化状态条及导航条的高度:

procedure TMainForm.FormCreate(Sender: TObject);
begin
self.CCSystemBar1.TranslucentStatusBar;//适应低版本的android,必须调用。
SetStatusBarPadding(self.StatusBar);
SetNavigationBarHeight(self.NavigationBar); end;

6.发布配置文件:

打开Deployment窗口,如上图,取掉自带的styles.xml及styles-v21.xml,填加ChinaCock带的对应文件。

启动图片换成loading.png发布,去掉系统自带的splash_image_def.xml文件。

Ok,万事大吉,运行app!

后记:

2020-04-01,需要注意,项目设置中,Include splash image必须勾选,如下图:

我因为这个问题,造成应用不正常显示了!

ChinaCock界面控件介绍-CCSystemBar的更多相关文章

  1. ChinaCock界面控件介绍-CCNavigateTitle

    先看一下实际项目中的运行效果,如图,通过品牌的导航栏,显示不同品牌的商品列表. 完全基于ChinaCock控件包中CCNavigateTitle组件实现的,这是一个可视控件,从组件面板上拖放一个到Fo ...

  2. ChinaCock界面控件介绍-CCLoadingIndicator

    这是一个显示等待状态的控件,当在线程中执行一个稍长时间的任务,需要显示一个等待过程,免得让用户不知app在做什么?避免用户寂寞. 先看看这个控件的属性说明: BackgroundTransparenc ...

  3. ChinaCock界面控件介绍-TCCYearMonthSelector

    Delphi原生控件支持日期的选择,但对于只选择年月的情况,则没有好的实现.TCCYearMonthSelector正是为解决这个问题而产生的.看看运行效果图: 用法一如即往的简单,这是一个不可视控件 ...

  4. ChinaCock界面控件介绍-TCCImageViewerForm

    有多个图片,左右滑动可以切换,通过手势还可以放大.缩小查看,象常见的相册,就是这样子实现效果. 现在,我们有了TCCImageViewerForm组件,也可以轻松实现这样的场景应用. 现在看看TCCI ...

  5. ChinaCock界面控件介绍-CCButton

    即将发布的ChinaCock新版本,将带来一个CCButton控件,实现可视按钮.Delphi原生的Button,在上面滑动后,当释放手指时会误触发OnClick事件,这不是我们想要的结果,CCBut ...

  6. ChinaCock界面控件介绍-TCCBarcodeCreator

    条码生成器,可以生成各种条码,包括二维码.这是一个不可视控件.用起来依旧简单. 属性说明: BarCodeColor:生成条码的颜色 BarcodeFormat:生成条码的类型,支持的条码类型: Bo ...

  7. ChinaCock界面控件介绍-CCGridPictureEditor

    CCGridPictureEditor如其名,网格图片编辑控件,实现利用一个网格来显示多张图片的缩略图,这是一个非常实用的控件,实现类似微信朋友圈中发布多张图片的功能. 在没有这个控件之前,我都是用D ...

  8. ChinaCock界面控件介绍-CCNewsSilder

    上图是控件包里的Demo运行效果,轮播新闻图片. 这个控件用起来简单,拖放一个CCNewsSiler到Form上,设置Align为Top,再设置好高度,然后用代码加载图片: procedure TFo ...

  9. ChinaCock打印控件介绍-TCCFujitsuPrinter实现蓝牙针式打印

    项目中遇到,要蓝牙针式打印机,用手机打印表单.感谢专家,对厂家提供的SDK进行了封装,实现利用Delphi开发出这一功能. 现在来看看,如何利用这一控件实现打印过程: procedure startS ...

随机推荐

  1. poj-2689-素数区间筛

    Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22420 Accepted: 5954 Descr ...

  2. iphone手机在网页返回上一页时,部分字体变大问题

    最近做一个项目是,发现了一个iphone的兼容性问题,在返回上一页后,部分字体会变大,刷新就会正常. 经过总结,发现都是span标签里面的字体变大.经过查询发现,需要给span添加一个属性:displ ...

  3. python中RabbitMQ的使用(工作队列)

    消息可以理解为任务,消息发送者可以看成任务派送者(sender),消息接收者可以看成工作者(worker). 当工作者接收到一个任务,还没完任务时分配者又发一个任务,此时需要多个工作者来共同处理这些任 ...

  4. Python----list&元祖常用方法总结

    一.创建列表,把使用逗号分隔的数据用中括号[  ]括起来即为一个列表,列表也叫数组.list.array:列表里面也可以再套列表,一个列表里面套一个列表,叫二维数组:一个里面套一个列表,里面的列表再套 ...

  5. Hadoop---18/06/03 20:15:52 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable starting yarn daemons

    WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin- ...

  6. 解决maven 找不到指定路径应该如何

    如果打开每个项目都有红x!!!解决办法: 1) 2)-->点击clean ,ok!!

  7. 【转】你必须知道的EF知识和经验

    注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...

  8. IIS无法启动,应用程序池自动关闭

    问题:打开网站中的资源,对应的应用程序池就自动停止 解决方案:在应用程序池上--右键--高级设置--进程模型--标识,更改了这项里的“内置账户”.将原有的“ApplicationPoolIdentit ...

  9. 使用Postman在Chrome下进行rest请求测试

    1.首先下载postman,我已经下载好,放在云盘里了. http://pan.baidu.com/s/1c1YoGKS 密码 dgfw 2.打开Chrome,点击更多工具->扩展程序~打开. ...

  10. Linux int 最大为多大

    可以查看 /usr/include/limits.h 文件 里面定义好了各种类型的最大最小值 ... /* Minimum and maximum values a `signed int' can ...