2010-10-26 130 views
2

我正尝试在全屏模式下为自定义Android键盘提供修改后的视图。因此,我试图替换提取视图。在文档中我找到了以下方法:setExtractView(View view) - 所以我认为这是一个公共API调用。Android:InputMethodService如何使用setExtractView(View视图)设置视图?

然而,正如你从Android OS源代码中可以看到的那样(它被粘贴在下面),它让我只能访问在com.android.internal。*空间中查看带有id的视图项的视图。否则,我会,当然,会得到一个NullPointerException。

public void setExtractView(View view) { 
    mExtractFrame.removeAllViews(); 
    mExtractFrame.addView(view, new FrameLayout.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT, 
      ViewGroup.LayoutParams.MATCH_PARENT)); 
    mExtractView = view; 
    if (view != null) { 
     mExtractEditText = (ExtractEditText)view.findViewById(
       com.android.internal.R.id.inputExtractEditText); 
     mExtractEditText.setIME(this); 
     mExtractAction = (Button)view.findViewById(
       com.android.internal.R.id.inputExtractAction); 
     if (mExtractAction != null) { 
      mExtractAccessories = (ViewGroup)view.findViewById(
        com.android.internal.R.id.inputExtractAccessories); 
     } 
     startExtractingText(false); 
    } else { 
     mExtractEditText = null; 
     mExtractAccessories = null; 
     mExtractAction = null; 
    } 
} 

所以,我想知道,这是一个bug,这种方法是公共API中如果还是不行,我怎么可以创建在com.android.internal ID的自定义视图。*空间?


更新:没关系,刚发现this。稍后检查并报告是否有效。

+0

你有没有得到这个工作? – Samuel 2011-06-02 20:11:59

+0

感谢塞缪尔提醒我。我刚刚发布我的解决方案。 – znq 2011-06-03 09:33:40

回答

1

有点晚了,但仍然在这里的答案(感谢塞缪尔ping我)。解决方案其实很简单:

ExtractEditText extractEditTextView = new ExtractEditText(this); 
extractEditTextView.setId(android.R.id.inputExtractEditText); 
+0

如何获得InputMethodService的实例以调用setExtractView()? – Samuel 2011-06-03 12:29:51

+0

我正在构建自己的IME,因此扩展了[InputMethodService](http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html) – znq 2011-06-04 11:22:22