我正在创建一个富文本编辑器,所以我有一个扩展的 EditText,它接收一个带有子组件的 ViewGroup。这个 ViewGroup 是一个工具栏,带有用于粗体等的切换按钮。
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吗?