当前位置:   article > 正文

鸿蒙App开发,Button坑死你不偿命!_鸿蒙button不显示

鸿蒙button不显示

​本篇文章Button的常规用法就不再赘述,这里主要讲述一下作者使用时踩的坑,Button继承自Text组件,其他一些基本用法可以参考前面Text介绍的文章。

准备好了吗?开始踩坑!

少侠且慢!

容我,先阐述一个知识点:鸿蒙中,Button背景是没有默认颜色的,也就是添加了组件没显示效果,使用的时候很容易自坑!

你们说坑不坑?

这一点不知道鸿蒙怎么想的,至少我觉得应该提供一个默认效果啊!算了不吐槽了,因为,更坑的还在后面!

下面先来一轮常规操作。

 

1、 使用Shape定义Button背景

 

第一步:根据设计,先确定Button需要响应哪些状态。

 

大多数项目都是只有两个状态:所以至少需要empty状态和pressed状态,还有一些Button会与输入框内容联动(例如登录界面),会使用到disable状态,那就演示3中状态。

 

第二步、设计对应状态的背景Shape

 

emtpy状态shape文件:btn_empty_state.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape
  3. xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4. ohos:shape="rectangle">
  5. <corners
  6. ohos:radius="10vp"
  7. />
  8. <solid
  9. ohos:color="#FFFF0000"
  10. />
  11. </shape>

pressed状态shape文件:btn_pressed_state.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape
  3. xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4. ohos:shape="rectangle">
  5. <corners
  6. ohos:radius="10vp"
  7. />
  8. <solid
  9. ohos:color="#FFEE8888"
  10. />
  11. </shape>

disable状态的shape文件:btn_disable_state.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape
  3. xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4. ohos:shape="rectangle">
  5. <corners
  6. ohos:radius="10vp"
  7. />
  8. <solid
  9. ohos:color="#FFEBEBEB"
  10. />
  11. </shape>

state-container状态背景文件:btn_bg.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape
  3. xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4. ohos:shape="rectangle">
  5. <corners
  6. ohos:radius="10vp"
  7. />
  8. <solid
  9. ohos:color="#FFEBEBEB"
  10. />
  11. </shape>

布局文件:

  1. <Button
  2. ohos:id="$+id:btn"
  3. ohos:height="48vp"
  4. ohos:width="match_parent"
  5. ohos:text_color="#FFFFFF"
  6. ohos:text="登录"
  7. ohos:text_size="20fp"
  8. ohos:background_element="$graphic:btn_bg"
  9. />

java代码,设置监听器:

  1. Button button = (Button) findComponentById(ResourceTable.Id_btn);
  2. button.setClickedListener(new Component.ClickedListener() {
  3. @Override
  4. public void onClick(Component component) {
  5.         // 点击后,设置为disable状态
  6. component.setEnabled(false);
  7. }
  8. });

 

效果如下图:

 

想让按钮变成圆形,用来实现浮动圆形按钮,很简单,修改上面的代码即可。

直接将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。

 

最后效果如下图:

 

好了,今天就到这里!少侠有缘再见!

为了表示我的不舍……

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/445705
推荐阅读
相关标签
  

闽ICP备14008679号