Редактировать текст, который делает выбор по долгому щелчку, но не показывает контекстное меню?

я хочу предоставить пользовательские обработчики, которые вырезают, копируют текст.

Цель на длинном клике

  1. Контекстное меню не должно появляться.
  2. Текст можно выделить с помощью трекеров (или драггеров).

введите здесь описание изображения

[ОБНОВЛЕНИЕ]

 protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    edittext = (EditText) findViewById(R.id.notetext);
    . . . .

    edittext.setCustomSelectionActionModeCallback(new ActionMode.Callback()
    {
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        public void onDestroyActionMode(ActionMode mode) {
        }

        public boolean onCreateActionMode(ActionMode mode, Menu menu)
        {
            return true;
        }

        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            return false;
        }
    });

  . . . .

}

@Override
public void onSupportActionModeStarted(android.support.v7.view.ActionMode mode) {
    super.onSupportActionModeStarted(mode);
    View v = new View(MainActivity.this);
    mode.setCustomView(v);
    mode.getMenu().clear();
    mode.getMenu().close();
    mode.finish();
}

Используя приведенный выше фрагмент кода, я могу удалить «Выбрать все», «Вырезать», «Копировать» и «Вставить». Но все же он показывает «Выделение текста».

На изображении ниже показано, что требуется.

введите здесь описание изображения


person Dilroop Singh    schedule 24.12.2015    source источник


Ответы (2)


Вы хотите избавиться от ActionMode? и создать свой??

вы можете переопределить это и получать уведомления, когда будет отображаться значение по умолчанию.

  @Override
  public void onSupportActionModeStarted(ActionMode mode) {     
    super.onSupportActionModeStarted(mode);
    //you can add your custom ui here
    mode.setCustomView(....);// it takes a view
}

если вы хотите закрыть его, вы вызываете mode.finish();, вы можете вызвать его там, чтобы закрыть, если или закончить, если он вам не нужен.

когда он вот-вот умрет, он вызывает это onSupportActionModeFinished (режим ActionMode) `, методы, которые я указал, предназначены для библиотек поддержки, надеюсь, вы это знаете.

Остальное сыр

person Elltz    schedule 25.12.2015
comment
Обновленный вопрос. Пожалуйста, предложите что-нибудь. - person Dilroop Singh; 25.12.2015
comment
mode.finish() работает, но выглядит некрасиво, меню появляется и скрывается, весь вид трясется, а выбор не сохраняется - person Manohar; 09.01.2017

Наконец я разобрался с этим. Это решение отлично работает для меня. Прежде всего, вам нужно создать фон контекстного меню следующим образом.

менюбэк.xml

<?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
      <shape android:shape="rectangle">
        <solid android:color="@android:color/transparent"/>
      </shape>
    </item>
  </selector>

Затем создайте свое пользовательское меню следующим образом.

mymenu.xml

<?xml version="1.0" encoding="utf-8"?>
  <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/m" android:title=" " ></item>
  </menu>

Теперь добавьте следующие строки в свой

стили.xml

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="actionModeBackground">@drawable/menuback</item>
    <item name="actionBarSize">1dp</item>
    <item name="android:actionModeCloseDrawable">@android:color/transparent</item>

</style>

</resources>

И, наконец, установите высоту панели действий на 0 и реализуйте ActionMode.CallBack следующим образом.

       EditText editText=findViewById(R.id.ed);

    getSupportActionBar().setElevation(0);
    editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            mode.getMenu().clear();
            MenuInflater inflater=mode.getMenuInflater();
            inflater.inflate(R.menu.mymenu,menu);
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            return false;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {

        }
    });

Та...да... Вот конечный результат

скриншот

person Pallob    schedule 14.05.2018