赞
踩
本篇文章Button的常规用法就不再赘述,这里主要讲述一下作者使用时踩的坑,Button继承自Text组件,其他一些基本用法可以参考前面Text介绍的文章。
容我,先阐述一个知识点:鸿蒙中,Button背景是没有默认颜色的,也就是添加了组件没显示效果,使用的时候很容易自坑!
下面先来一轮常规操作。
第一步:根据设计,先确定Button需要响应哪些状态。
大多数项目都是只有两个状态:所以至少需要empty状态和pressed状态,还有一些Button会与输入框内容联动(例如登录界面),会使用到disable状态,那就演示3中状态。
第二步、设计对应状态的背景Shape
emtpy状态shape文件:btn_empty_state.xml
- <?xml version="1.0" encoding="utf-8"?>
- <shape
- xmlns:ohos="http://schemas.huawei.com/res/ohos"
- ohos:shape="rectangle">
- <corners
- ohos:radius="10vp"
- />
- <solid
- ohos:color="#FFFF0000"
- />
- </shape>
pressed状态shape文件:btn_pressed_state.xml
- <?xml version="1.0" encoding="utf-8"?>
- <shape
- xmlns:ohos="http://schemas.huawei.com/res/ohos"
- ohos:shape="rectangle">
- <corners
- ohos:radius="10vp"
- />
- <solid
- ohos:color="#FFEE8888"
- />
- </shape>
disable状态的shape文件:btn_disable_state.xml
- <?xml version="1.0" encoding="utf-8"?>
- <shape
- xmlns:ohos="http://schemas.huawei.com/res/ohos"
- ohos:shape="rectangle">
- <corners
- ohos:radius="10vp"
- />
- <solid
- ohos:color="#FFEBEBEB"
- />
- </shape>
state-container状态背景文件:btn_bg.xml
- <?xml version="1.0" encoding="utf-8"?>
- <shape
- xmlns:ohos="http://schemas.huawei.com/res/ohos"
- ohos:shape="rectangle">
- <corners
- ohos:radius="10vp"
- />
- <solid
- ohos:color="#FFEBEBEB"
- />
- </shape>
布局文件:
- <Button
- ohos:id="$+id:btn"
- ohos:height="48vp"
- ohos:width="match_parent"
- ohos:text_color="#FFFFFF"
- ohos:text="登录"
- ohos:text_size="20fp"
- ohos:background_element="$graphic:btn_bg"
- />
java代码,设置监听器:
- Button button = (Button) findComponentById(ResourceTable.Id_btn);
- button.setClickedListener(new Component.ClickedListener() {
- @Override
- public void onClick(Component component) {
- // 点击后,设置为disable状态
- component.setEnabled(false);
- }
- });
效果如下图:
想让按钮变成圆形,用来实现浮动圆形按钮,很简单,修改上面的代码即可。
直接将3种状态shape文件的ohos:shape属性改为oval,然后修改Button的宽高为相等值。
点击Run:直接闪屏退出主界面,Crash?
肯定是手滑!点到了back按钮!
再点击Run:好了!看来是真的手滑了!
程序员小哥哥:“……” 手机上的按钮呢?
一顿饭后:
程序员小哥哥:明明安卓这样做都可以,鸿蒙……SB!
注意啦!这里有坑!
鸿蒙这里不知道是设计问题,还是代码漏洞,使用oval形状时候,必须要把corner部分代码删除,如果不删除,解析xml布局文件的时候,Button就元素就会解析失败:
AGP_LayoutScatter:Create component failed: Can't create the view: ohos.agp.components.Button
言下之意,java代码中的Button对象就是null,如果再使用这个Button对象,就会报NullPointerException导致crash。
最后效果如下图:
好了,今天就到这里!少侠有缘再见!
为了表示我的不舍……
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。