我正在尝试使用三星Galaxy S4的新AirView功能,特别是onHover事件。我已经让它通过...正常应用了。
现在我想将它用作输入法。我的问题是输入法的视图没有得到任何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侦听器按预期工作。
任何指针?
答案 0 :(得分:1)
我遇到了同样的问题。我找到了furbyx92在xda dev上发布的解决方案:
首先要确保在设置中的设备上将AirView设置为ON,同时打开所有子集。
接下来是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>
在您的代码中:
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);