我正在尝试在全屏模式下为自定义Android键盘提供修改后的视图。因此,我正在尝试替换提取视图。在文档中,我发现了以下方法:setExtractView(View view) - 所以我假设它是一个公共API调用。
但是,正如您可以从Android操作系统源代码中看到的那样(剪下来粘贴),我只能访问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;
}
}
所以,我想知道,这是一个错误,这个方法是在公共API中,如果没有,我如何在com.android.internal。* space中创建一个带ID的自定义视图?
更新:没关系,刚找到this。稍后会检查并报告它是否有效。
答案 0 :(得分:1)
有点晚了,但仍然在这里答案(感谢塞缪尔为我打电话)。解决方案实际上非常简单:
ExtractEditText extractEditTextView = new ExtractEditText(this);
extractEditTextView.setId(android.R.id.inputExtractEditText);