从HarmonyOSSDK根本解决TextInput(输入框)不识别飘红的问题在使用ets开发时,会发现没有输入框组件,官网的api介绍也没有添加这个组件。其实这个组件存在于本地的sdk目录下。同时,你也可以在官方codelab中找到这个组件的使用,我在网上找到了,之前发现有人写过一篇关于如何添加输入框组件的博客,就不介绍了太多了。这个组件就是TextInput,但是大家在使用的时候会发现一个问题,就是IDE会是红色的,但是在模拟器上却可以正常编译运行,如下图:那这是为什么呢?怎样才能彻底解决这个问题呢?什么?其实我之前写过一篇博客解决类似这个的问题,请看《[https://harmonyos.51cto.com/posts/9536](HarmonyOSsdk的BUG解决方法-HarmonyOSsdk的BUG解决思路AlphabetIndexer组件)》要彻底解决这个问题,我们需要弄清楚sdk目录和DevEcoStudio的关系。解决:为什么DevEcoStudio中的代码是红色的?根本原因是我们引用的组件在SDK中是不存在的,这好比在java中引入一个类,jdk中根本没有。因此,我们需要分析SDK中的组件,组件对应在哪里?sdk中的组件是如何与DevEcoStudio关联的?sdk目录结构分析这里我只分析和这个问题密切相关的目录。首先我们可以在sdk下找到一个ets目录,如下图:**api目录:**里面存放着我们要调用的api接口的相关ts文件。比如网络请求、电话调用等API。该目录与此问题无关。**build-tools目录:**ets项目编译构建的核心目录。如果编译失败,需要修改该目录下的文件。我在之前的博客中修改了这个目录下的文件。参见《[https://harmonyos.51cto.com/posts/9536](HarmonyOSsdk的bug解决方法——AlphabetIndexer组件的bug解决思路)》。**组件目录:**systemsdk自带的组件存放目录,解决这个问题的核心目录。我们来分析一下组件目录,打开目录,可以看到各种UI组件对应的ts文件,但是我们并没有找到TextInput组件对应的ts文件。一旦你发现了这一点,你就会对如何解决问题有一个线索。既然是红色,找不到组件,为什么编译运行正常?然后你需要对工作室如何编译构建它有一定的了解。编译时会先读取ets\3.0.0.0\build-tools\ets-loader下的一个component_config.json文件,对里面的各个组件进行配置关联。然后会引用ets\3.0.0.0\build-tools\ets-loader\declarations目录下相关组件对应的ts文件。该目录下还有对应各个组件的ts文件。注意,根本不会编译引用前面组件目录下的组件,编译与组件目录无关。而我们会发现ets\3.0.0.0\build-tools\ets-loader\declarations目录下有textinput.d.ts文件和TextInput组件。并且在component_config.json文件中也配置了TextInput组件,所以可以编译。至于正常运行,是因为组件的操作系统存在于模拟器安装的操作系统下。最后,要解决浮红的问题,首先我们得想办法找到TextInput组件对应的一个textinput.d.ts文件复制到组件目录下。注意:此时不要复制ets\3.0.0.0\build-tools\ets-loader\declarations目录下的textinput.d.ts文件,因为它和组件目录下的组件代码还是有些区别的。幸运的是,我们可以在OpenHarmonySdk目录下的component目录下找到textinput.d.ts文件,直接复制这个文件即可。这时候大家都会认为工作完成了,其实并没有。这时候我们会发现Studio还是很受欢迎的。后来反复研究各个目录下的文件,发现了另一个重要的文件,component目录下的index.d.ts文件,相当于一个入口列表文件,里面配置了各个系统组件的支持情况。代码如下:/**Copyright(c)2021HuaweiDeviceCo.,Ltd.*LicensedundertheApacheLicense,Version2.0(the"License");*youmaynotusethisfileexceptincompliancewiththeLicense.*YoumayobtainacopyoftheLicenseat**http://www.apache.org/licenses/LICENSE-2.0**除非适用法律要求或同意以书面形式,否则软件*根据许可证分发是在“ASIS”基础上分发的,*没有任何类型的保证或条件,无论是明示还是暗示。*请参阅许可证以了解特定语言的管理权限和*许可证下的限制。*/export*from'./alert_dialog'index'alpha;from*export*from'./animator';export*from'./badge';export*from'./blank';export*from'./button';export*from'./circle';export*from'./column';export*from'./column_split';export*from'./common';export*from'./custom_dialog_controller';export*from'./datapanel';export*from'./divider';export*from'。/椭圆';export*from'./flex';export*from'./forEach';export*from'./gesture';export*from'./grid';export*from'./grid_container';export*from'./gridItem';export*from'./hyperlink';export*from'./image';export*from'./image_animator';export*from'./lazyForEach';export*from'./line';export*from'./list';export*from'./listItem';export*from'./navigator';export*from'./navigatorView';export*从'./pageTransition';export*from'./panel';export*from'./path';export*from'./polygon';export*from'./polyline';export*from'./progress';export*from'./qrcode';export*from'./rating';export*from'./rect';export*from'./row';export*from'./row_split';export*from'./scroll';export*from'./shape';export*from'./slider';export*from'./span';export*from'./stack';export*from'./stateManagement';export*from'./swiper';export*from'./tab_content';export*from'./tabs';export*from'./text';export*from'./video';此时我们会发现里面并没有配置textinput.d.ts文件,所以我在文件中添加如下代码。导出*来自'./textinput';那么大功告成,DevEcoStudio已经不流行了,可以Ctrl+鼠标点击跳转到代码。更多信息请访问:Harmonyos.51cto.com,与华为官方合作打造的鸿蒙技术社区
