Android中IME UI的透明背景

4

我正在尝试实现(又一个!)输入法。我从软键盘示例开始,该示例使用KeyboardView对象的扩展,并扩展View。我想以完全不同的方式扩展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>

调用输入法的活动被一个浅灰色的背景覆盖。如果我将背景颜色改为半透明的红色,例如,我会看到视图背景上方的几行像素是灰色的。这个背景是从哪里来的,我怎样才能去掉它?


我试图使用LinearLayout代替View。LinearLayout包含两个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)

当我扩展一个视图时,这种情况不会发生。有人能解释一下为什么吗?

<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> - Aharon Manne
如何使XML代码以正常格式显示? - Aharon Manne
请查看:http://stackoverflow.com/editing-help - Kev
回答我自己的(次要)问题:LayoutInflater“将布局XML文件实例化为其相应的View对象请参阅LayoutInflater文档。这让我面临着最初的问题:在我的透明视图下面,遮挡工作区域的是什么对象。 - Aharon Manne
你解决了这个问题吗?我也遇到了同样的问题。 - Mike Miller
1个回答

2

我知道这是一个老问题,但我认为我应该发布一个答案,以防有人在尝试创建透明IME时遇到此问题。请参见我对相关StackOverflow问题的答案,了解浅灰色(或白色)背景是什么,以及如何正确地创建透明IME:https://dev59.com/MGbWa4cB1Zd3GeqPSw5k#20319466


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接