我正在创建一个富文本编辑器,因此我有一个扩展的EditText,它接收带有子组件的ViewGroup。此ViewGroup是一个工具栏,其中包含用于粗体等的toggleButtons。
EditText以这种方式接收工具栏:
private ViewGroup toolbar;
public CustomEditText(Context context, LinearLayout newToolbar) {
super(context);
toolbar = newToolbar;
}
使用此代码,CustomEditText可成功控制工具栏的可见性:
@Override
protected void onFocusChanged(boolean focused, int direction,
Rect previouslyFocusedRect) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);
if (focused)
toolbar.setVisibility(View.VISIBLE);
else
toolbar.setVisibility(View.GONE);
}
但不幸的是,举例来说,这会返回 NullPointerException :
@Override
protected void onTextChanged(CharSequence text, int start,
int lengthBefore, int lengthAfter) {
super.onTextChanged(text, start, lengthBefore, lengthAfter);
toolbar.setVisibility(View.GONE);
}
我知道可以解决在当前活动中向我的CustomEditText添加TextWatcher的问题,但我试图让CustomEditText处理与之相关的所有内容。
你知道为什么一切都适用于 onFocusChanged ,而不是 onTextChanged ?