Android键盘替换Web视图

Bil*_*oon 12 javascript android android-softkeyboard

是否可以将网络视图嵌入到Android键盘替换应用程序中?

我有一个用javascript编写的界面,并希望将其嵌入到Android键盘替换应用程序中.它需要能够检测触摸事件,并从Web视图将文本字符串发送回本机UI.

我已经搜索了谷歌这个,但无法找到有关如何在键盘替换应用程序中创建Web视图的任何信息.


编辑:根据@ckozl的答案创建了样板的github项目

https://github.com/billymoon/javascript-android-keyboard-boilerplate

cko*_*ozl 6

是.简而言之.不是一个好主意,但技术上可行.让我向您介绍一个快速示例项目,该项目改编自Android SDK附带的SoftKeyboard示例.现在还有许多其他技术问题需要解决,但这应该为您提供一个基本的起点....

首先,让我们创建一个基本布局作为我们的键盘使用:

\水库\布局\ input.xml中:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>

    <WebView
      android:id="@+id/myWebView"
      android:layout_width="match_parent"
      android:layout_height="600dp"
    />

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

这是android要求接受我们的IME

\水库\ XML\method.xml:

<?xml version="1.0" encoding="utf-8"?>
<input-method xmlns:android="http://schemas.android.com/apk/res/android"  />
Run Code Online (Sandbox Code Playgroud)

现在进入我们的manifest \ AndroidManifest.xml

<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.android.softkeyboard">

    <uses-sdk android:minSdkVersion="13" android:targetSdkVersion="13" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application android:label="SoftKeyboard">

        <service 
            android:name="SoftKeyboard"
            android:permission="android.permission.BIND_INPUT_METHOD"
        >
            <intent-filter>
                <action android:name="android.view.InputMethod" />
            </intent-filter>

            <meta-data android:name="android.view.im" android:resource="@xml/method" />      
        </service>
    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

很明显,uses-sdk并且user-permission取决于应用程序,而不是这个代码所要求的(我这里没有使用任何互联网文件,但你可以,我测试它,它工作......)

现在定义一个简单的键盘 \ src ...\SoftKeyboard.java:

package com.example.android.softkeyboard;

import android.inputmethodservice.InputMethodService;
import android.inputmethodservice.KeyboardView;
import android.view.View;
import android.webkit.WebView;

public class SoftKeyboard extends InputMethodService implements KeyboardView.OnKeyboardActionListener {

    private WebView myWebView = null;

    @Override 
    public View onCreateInputView() {

        View view = getLayoutInflater().inflate(R.layout.input, null);
        myWebView = (WebView) view.findViewById(R.id.myWebView);
        myWebView.getSettings().setJavaScriptEnabled(true);
        myWebView.addJavascriptInterface(jsInterface, "android");

        return view;
    }

    private Object jsInterface = new Object() {

        @SuppressWarnings("unused")
        public void sendKeys() {
            getCurrentInputConnection().setComposingText("how do ya like me now?", 1);
        }

    };

    @Override
    public void onWindowShown() {

        super.onWindowShown();      
        myWebView.loadUrl("file:///android_asset/keyboard_test.html");
    }

    @Override
    public void onKey(int primaryCode, int[] keyCodes) {}

    @Override
    public void onPress(int primaryCode) {}

    @Override
    public void onRelease(int primaryCode) {}

    @Override
    public void onText(CharSequence text) {}

    @Override
    public void swipeDown() {}

    @Override
    public void swipeLeft() {}

    @Override
    public void swipeRight() {}

    @Override
    public void swipeUp() {}

}
Run Code Online (Sandbox Code Playgroud)

这里我们基本上创建一个webview,然后从资产文件填充它,并在启用javascript后绑定一个简单的界面

这是资产html: *\assets\keyboard_test.html*

<!DOCTYPE html>
<html>
<head>
<title>test</title>
<style>
button {

    display:block;
    margin:300px auto;
    width:400px;
    padding:60px;

}
</style>
</head>
<body>

<button onclick="android.sendKeys()">yeah buddy!</button>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

就是这样,运行它,你会得到一个带有单个按钮的键盘,当你按下它时,javascript会将文本发送到输入作曲家......

希望有所帮助