1

InputMethod 中的 AirView 不起作用

我正在尝试使用三星 Galaxy S4 的新 AirView 功能,特别是 onHover 事件。我已经让它在正常的应用程序中运行...

  • 针对 API 级别 17
  • 提供 onHover 事件监听器
  • 为 com.sec.android.airview.HOVER 设置意图过滤器

现在我想将它用于输入法。我的问题是输入法的视图没有得到任何 onHover 事件,即使我也设置了 airview 意图过滤器:

AndroidManifest.xml 的摘录:

<application android:label="@string/ime_name"
    <service android:name="com.example.keyboard"
        android:permission="android.permission.BIND_INPUT_METHOD">
        <intent-filter>
            <action android:name="android.view.InputMethod" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.sec.android.airview.HOVER" />
        </intent-filter>
        <meta-data android:name="android.view.im" android:resource="@xml/method" />
    </service>
</application>

目前,我的输入法布局中有一个带有单个按钮的简单 LinearLayout:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hover Button"
        android:id="@+id/hoverbutton2"/>

</LinearLayout>

事件监听器设置如下:

Button hoverButton = (Button) mInputView.findViewById(R.id.hoverbutton2);
hoverButton.setOnHoverListener(new View.OnHoverListener() {
    @Override
    public boolean onHover(View v, MotionEvent event) {
        Log.d(TAG, "hoverButton2: onHover");
        return false;
    }
});

以相同方式设置的 onClick 侦听器按预期工作。

任何指针?

4

1 回答 1

1

我有同样的问题。我在 xda dev 上找到了 furbyx92 发布的解决方案:

  1. 首先要确保在“设备”的“设置”中将 AirView 设置为“打开”,并且将其所有子设置也“打开”。

  2. 接下来是android清单:

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data
            android:name="com.sec.android.airview.enable"
            android:value="true" />
        <intent-filter>
            <action android:name="com.sec.android.airview.HOVER" />
        </intent-filter>
        <activity
            android:name="edu.uanl.secondapp.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="com.sec.android.airview.HOVER" />
            </intent-filter>
        </activity>
    </application>
    
  3. 在您的代码中:

    textView.setOnHoverListener(new View.OnHoverListener() {
        @override
        public boolean onHover(View view, MotionEvent motionEvent) {
            switch(motionEvent.getAction()){
                case MotionEvent.ACTION_HOVER_ENTER : // Enter Hovered
                case MotionEvent.ACTION_HOVER_EXIT:   // Leave Hovered
                    view.setBackgroundColor(Color.TRANSPARENT);
                    view.setScaleX((float)1.0);
                    view.setScaleY((float)1.0);
                    break;
                case MotionEvent.ACTION_HOVER_MOVE:   // On Hover
                    view.setBackgroundColor(Color.RED);
                    view.setScaleX((float)2.0);
                    view.setScaleY((float)2.0);
                    break;
            }
            Log.wtf("Something", "I'm Being Hovered" + motionEvent.getAction());
            return false;
        }
    });
    textView.setHovered(true);
    
于 2013-07-11T18:25:55.253 回答