3

私は(さらに別の!)インプットメソッドを実装しようとしています。View を拡張する KeyboardView オブジェクトの使用と拡張を実装するソフト キーボードの例から始めました。View をまったく別の方法で拡張したいので、input.xml に次のように記述します。私の目的は、UI に透明な表面を持たせることであることに注意してください。

<?xml version="1.0" encoding="utf-8"?>
<com.diffstrokes.ime.StrokeView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@null"
    android:cacheColorHint="@null" >
</com.diffstrokes.ime.StrokeView>

IME を呼び出すアクティビティは、明るい灰色の背景で隠されています。たとえば、背景色を半透明の赤に変更すると、ビューの背景の上に数行の灰色のピクセルが表示されます。この背景はどこから来ているのでしょうか? どうすれば取り除くことができますか?


ビューの代わりに LinearLayout を使用しようとしました。LinearLayout には 2 つの View タグが含まれています。私の onCreateInputView() 関数では、次のように LinearLayout を膨らませます。

LinearLayout llo = 
(LinearLayout) getLayoutInflater().inflate(
                        R.layout.dslayout, null);

問題なく完了しますが、次のonCreateInputView()ログのように、ある時点で例外が発生します。

 06-12 15:17:01.350: E/AndroidRuntime(14002): FATAL EXCEPTION: main
 06-12 15:17:01.350: E/AndroidRuntime(14002):
 java.lang.IllegalStateException: The specified child already has a
 parent. You must call removeView() on the child's parent first. 06-12
 15:17:01.350: E/AndroidRuntime(14002):     at
 android.view.ViewGroup.addViewInner(ViewGroup.java:2117) 06-12
 15:17:01.350: E/AndroidRuntime(14002):     at
 android.view.ViewGroup.addView(ViewGroup.java:2012) 06-12
 15:17:01.350: E/AndroidRuntime(14002):     at
 android.view.ViewGroup.addView(ViewGroup.java:1992) 06-12
 15:17:01.350: E/AndroidRuntime(14002):     at
 android.inputmethodservice.InputMethodService.setInputView(InputMethodService.java:1105)
 06-12 15:17:01.350: E/AndroidRuntime(14002):   at
 android.inputmethodservice.InputMethodService.updateInputViewShown(InputMethodService.java:963)
 06-12 15:17:01.350: E/AndroidRuntime(14002):   at
 android.inputmethodservice.InputMethodService.showWindowInner(InputMethodService.java:1318)
 06-12 15:17:01.350: E/AndroidRuntime(14002):   at
 android.inputmethodservice.InputMethodService.showWindow(InputMethodService.java:1293)
 06-12 15:17:01.350: E/AndroidRuntime(14002):   at
 android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInput(InputMethodService.java:392)
 06-12 15:17:01.350: E/AndroidRuntime(14002):   at
 android.inputmethodservice.IInputMethodWrapper.executeMessage(IInputMethodWrapper.java:176)
 06-12 15:17:01.350: E/AndroidRuntime(14002):   at
 com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:61)
 06-12 15:17:01.350: E/AndroidRuntime(14002):   at
 android.os.Handler.dispatchMessage(Handler.java:99) 06-12
 15:17:01.350: E/AndroidRuntime(14002):     at
 android.os.Looper.loop(Looper.java:130) 06-12 15:17:01.350:
 E/AndroidRuntime(14002):   at
 android.app.ActivityThread.main(ActivityThread.java:3806) 06-12
 15:17:01.350: E/AndroidRuntime(14002):     at
 java.lang.reflect.Method.invokeNative(Native Method) 06-12
 15:17:01.350: E/AndroidRuntime(14002):     at
 java.lang.reflect.Method.invoke(Method.java:507) 06-12 15:17:01.350:
 E/AndroidRuntime(14002):   at
 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
 06-12 15:17:01.350: E/AndroidRuntime(14002):   at
 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 06-12
 15:17:01.350: E/AndroidRuntime(14002):     at
 dalvik.system.NativeStart.main(Native Method)

ビューを膨らませると、これは起こりません。誰でも理由を説明できますか?

4

1 に答える 1

2

これは古い質問だと思いますが、透過的な IME を作成しようとしたときに誰かがこの問題に遭遇した場合に備えて、回答を投稿すると思います。明るい灰色 (または白) の背景とは何か、および透明な IME を適切に作成する方法の説明については、関連する StackOverflow の質問に対する私の回答を参照してください: https://stackoverflow.com/a/20319466/1160216

于 2013-12-02T01:29:32.457 に答える