2013-06-20 3 views
1

AirView в InputMethod не работает

Я пытаюсь использовать новый AirView особенность Samsung Galaxy S4, а именно onHover мероприятие. У меня уже есть это работает нормальное приложение, ...Galaxy S4: onHover/AirView для метода ввода не работает

  • ориентация на уровне 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, установленный в том же порядке, работает по назначению.

Любые указатели?

ответ

1

У меня была та же проблема. Я нашел решение, отправленный furbyx92 на XDA Dev:

  1. Первая вещь, чтобы убедиться, на УСТРОЙСТВЕ в настройках, что AirView устанавливается в положение ON со всеми его subsettings ON, а также.

  2. Следующая андроида манифеста:

    <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); 
    
+0

То есть именно то, что я хотел бы сделать для ** приложение **, но я стараюсь для получения событий наведения изнутри ** Метод ввода **. В стороне, вы устанавливаете фильтр намерений дважды в вашем AndroidManifest.xml. Я считаю, что в приложении нет необходимости. – Frederic