首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fireOS firetv上的颤动文本字段/文本字段顶部的firestick

fireOS firetv上的颤动文本字段/文本字段顶部的firestick
EN

Stack Overflow用户
提问于 2020-04-10 23:34:55
回答 1查看 535关注 0票数 1

当在fire tv设备的fireOS中调用flutter上的textfield时,例如,要进行搜索,fireOS虚拟键盘会弹出到textfield的顶部,并且不像其他安卓设备那样工作,因为键盘在底部,textfield是可见的。

例如,我可以使用android的旧版本edittext widget,相同的键盘会弹出顶部,但无论我用控制器输入什么,都会在虚拟键盘上更新,因为键盘有自己的文本字段或edittext。所以我的问题是如何用flutter更新firetv虚拟键盘上的edittext。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-02 01:42:07

好吧,我在任何地方都没有找到答案,所以我不得不做一些老生常谈的事情,这里是我如何让它工作的,因为flutter是不可能的。

解决方案概述:

1.-所以首先要检查的是你是在安卓上运行的,你可以在flutter上使用if (Platform.isAndroid)来做这件事。

2.-如果你真的在android上运行,那么你可以打开一个到原生android的平台通道,以检查实际的制造商(我将在下面发布如何编码)。

3.-检查制造商或设备名称中的“亚马逊”或"Kindle“或任何(string.contains(”“))是否可以做到这一点。

4.-再次打开到Native Android的平台通道,打开带有Edittext的Alert对话框,捕获结果字符串并将其返回到flutter。

这就是我如何让firetv的键盘在flutter下工作的。

代码语言:javascript
复制
    if (Platform.isAndroid){

      checkOs().then((String osName){
        print("Device running on: $osName");
        if(osName.contains("Amazon") || osName.contains("AFTN")){
          fireTvKeyboardInput().then((String result){
            buscarTitulo(result);
          });
        }else{
          _showDialog(); // Keyboard for NON FIREOS devices on Android.
        }
      });

    }else{
      //IF Device is not Android Eg. IOS
      _showDialog();
    }

现在我使用了两个函数"checkOs“和"fireTvKeyboardInput”,代码如下:

代码语言:javascript
复制
Future<String> checkOs() async {
  String myResult = "";
  try {
    myResult = await platform.invokeMethod("checkOS", <String, dynamic>{
      'param1': "hello",
    });
  }catch (e){
    print ("exception: $e");
  }
  return myResult;
}

Future<String> fireTvKeyboardInput() async {
  String myResult = "";
  try {
    myResult = await platform.invokeMethod("fireKeyBoard", <String, dynamic>{
      'param1': "hello",
    });
  }catch (e){
    print ("exception: $e");
  }
  return myResult;
}

在Native Android上,代码如下:

代码语言:javascript
复制
                    if(call.method == "checkOS"){
                    val operatingSystem = android.os.Build.MANUFACTURER + "- " + android.os.Build.MODEL
                    result.success(operatingSystem)
                }

                if(call.method == "fireKeyBoard"){

                        val alert = AlertDialog.Builder(this)
                        alert.setMessage("Search")
                        // Set an EditText view to get user input
                        val input = EditText(this)
                        input.hint = "Enter Text"
                        input.inputType = InputType.TYPE_CLASS_TEXT
                        alert.setView(input)
                        input.setOnKeyListener { view, keyCode, keyEvent ->
                            if (keyCode == 66) {
                                val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
                                imm.hideSoftInputFromWindow(input.windowToken, 0)
                            }
                            false
                        }
                        alert.setPositiveButton("Ok") { dialog, whichButton ->
                            result.success(input.text.toString());
                        }
                        alert.setNegativeButton("Cancel") { dialog, whichButton ->
                            // Canceled.
                        }
                        alert.show()

                }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61143607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档