1.项目背景
在项目开发过程中,由于智能座舱的systemui都是各个主机厂定制的,会存在一些系统弹窗显示异常的情况。如下图所示,我们会发现,在app内部输入一段文字之后,选中,会弹出:复制,粘贴,全选,分享菜单,选中分享之后,会出现弹框显示不全的情况。
当然,正确的解决方法应该是调整系统弹框的位置,使得弹框能够正常显示。但是由于智能座舱没有需要分享的app或者功能,所以对于智能座舱,我们需要去掉分享的功能。那么分享这个菜单是如何显示出来的,应该怎么修改呢?
2.代码流程梳理
基本分析:这个菜单是在EditText里面弹出来的,那么肯定与EditText控件有关,而EditText又继承至TextView,并且Editor 是TextView最核心的组件,所以分享菜单的显示流程,肯定与这三个类密不可分。
Helper class used by TextView to handle editable text views.
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mAssistClickHandlers.clear();
mode.setTitle(null);
mode.setSubtitle(null);
mode.setTitleOptionalHint(true);
populateMenuWithItems(menu);
Log.w(TAG, "android200, onCreateActionMode enter");
Callback customCallback = getCustomCallback();
if (customCallback != null) {
if (!customCallback.onCreateActionMode(mode, menu)) {
// The custom mode can choose to cancel the action mode, dismiss selection.
Selection.setSelection((Spannable) mTextView.getText(),
mTextView.getSelectionEnd