HarmonyOS 鸿蒙Next ArkTs语言TextInput()组件按压时背景色改变,如何取消

HarmonyOS 鸿蒙Next ArkTs语言TextInput()组件按压时背景色改变,如何取消 尝试通过stateStyles来改变点击和按压时候的背景色,但是这个背景色设置为空也无效,好像文档设计textInput()组件的时候就是这样设计的…

类似设置了.enabled(false)属性, 大家有什么好的解决办法吗~

@Styles txtBg(){
  .backgroundColor('') // '' 和 null 和 Color.Transparent 都无效
}
TextInput({ placeholder: '请输入' })
  .backgroundColor('#c0c0c0')
  .border({ radius: 5 })
  .stateStyles({ pressed: this.txtBg, clicked: this.txtBg })

更多关于HarmonyOS 鸿蒙Next ArkTs语言TextInput()组件按压时背景色改变,如何取消的实战教程也可以访问 https://www.itying.com/category-93-b0.html

13 回复

没有特定的属性去处理,只能通过变通的其它办法处理,因为底层逻辑就是只要按压事件就会触发那个动画效果:

rawRecognizer_ = AceType::MakeRefPtr<RawRecognizer>();
auto weak = WeakClaim(this);
rawRecognizer_->SetOnTouchDown([weak = WeakClaim(this)](const TouchEventInfo& info) {
    auto textField = weak.Upgrade();
    if (textField) {
        textField->StartPressAnimation(true);
    }
});

不像按钮有个属性控制:

if (buttonEventHub->GetStateEffect()) {
    auto renderContext = host->GetRenderContext();
    if (isSetClickedColor_) {
        renderContext->UpdateBackgroundColor(backgroundColor_);
        return;
    }
}

更多关于HarmonyOS 鸿蒙Next ArkTs语言TextInput()组件按压时背景色改变,如何取消的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这个底层是在哪看到的呀,这组件不是看不到底层嘛~,

gitee上有arkui_ace_engine的源码可以翻看底层的一些东西,

找到了解决办法,要把按下/获焦的状态都设置为同一个样式

```javascript
[@Styles](/user/Styles) txtBg(){
  .backgroundColor('#FFFFFF') // 这个背景色要和父类的背景色一致
}

TextInput({ placeholder: '请输入' })
  .backgroundColor('#c0c0c0')
  .border({ radius: 5 })
  .stateStyles({ pressed:this.txtBg,focused:this.txtBg })

在别的帖子里发现个新办法,他把TextInput()本身的触摸事件给取消了,然后再点击的时候根据key把焦点移动到对应的组件上

// 第二种办法: 解决TextInput()点击的时候背景闪烁问题
Row() {
  TextInput({ placeholder: '请输入' })
    .hitTestBehavior(HitTestMode.None) // 自身不响应触摸测试,不会阻塞子节点和兄弟节点的触摸测试
    .key("focus")
}.backgroundColor('#C0C0C0')
.onClick(() => {
  // 方法语句中可使用的全局接口,调用此接口可以主动让焦点转移至参数指定的组件上。
  focusControl.requestFocus("focus") // 点击这个组件的时候,把焦点转移到绑定了"focus"的组件上
})

但是再次获取焦点的时候,键盘不会弹出来了,

2024.1.23 发现不好使! 点击的时候背景不闪烁了, 但是键盘也不弹出了,

还是发现了问题,只有背景色是白色的时候,这个TextInput()组件,点击才不会闪烁,

当背景色改为红绿蓝等,就会发现,每次点击这个TextInput()组件的时候,还是会闪烁一下

作者达达解决了吗,我的还是会闪一下,

没!
等API11 吧,API11中没有这个问题,

TextInput的父类里的属性试试?

把TextInput()的背景色和父类的背景色设置一致,也没用的,找到了其他的解决办法,还是原来的思路,

在HarmonyOS鸿蒙Next中使用ArkTS语言时,TextInput组件按压时背景色改变是由默认的交互样式引起的。要取消按压时的背景色改变,可以通过设置TextInputstateEffect属性为false来实现。具体代码如下:

TextInput()
  .stateEffect(false)

stateEffect属性控制组件在交互状态(如按压、聚焦等)下的样式变化。将其设置为false即可禁用这些状态下的样式变化,从而取消按压时背景色的改变。

回到顶部