Можно ли вставить в TextView (не EditText)?

>>> import os
>>> os.system('cd c:\mydir')

На самом деле, os.system() может выполнить любую команду, которую может выполнить команда Windows, а не только изменить каталог.

0
задан ZakTaccardi 18 January 2019 в 07:18
поделиться

3 ответа

Хотя этот будет работать, возможно, будет лучшее решение, если вы хотите, чтобы ваш TextView действовал больше как стандарт EditText и отображал контекстное меню.

Вы можете сделать что-то вроде этого

class SomeActivity : AppCompatActivity() {

    override fun onCreate() {
        // super.onCreate() and setContentView() calls ommited for clarity

        // Assuming that pastableTextView is the TextView you want to paste into
        registerForContextMenu(pastableTextView)
    }

    override fun onCreateContextMenu(menu: ContextMenu?, v: View?, menuInfo: ContextMenu.ContextMenuInfo?) {
        // oversimplified for sake of example
        if (v?.id == pastableTextView.id) {
            menu?.add(0, v.id, 0, android.R.string.paste)
        }
    }

    override fun onContextItemSelected(item: MenuItem?): Boolean {
        // again, oversimplified for the sake of example
        if (item?.itemId == pastableTextView.id) {
            val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager?
            // This is clipboard's contents
            val content = clipboardManager?.primaryClip?.getItemAt(0)?.text?
        }

        return false
    }
}

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

0
ответ дан Mikhail Olshanski 18 January 2019 в 07:18
поделиться

Другое решение, которое я хотел бы предложить, это использовать edittext и скрыть клавиатуру для этого конкретного edittext, просто включите функции копирования и вставки, и он выглядит как Textview, а если вы не хотите, чтобы курсор мигал, просто отключите это тоже.

0
ответ дан Kannan panneer selvam 18 January 2019 в 07:18
поделиться

В Android нет собственного способа для этого, но я написал пример кода того, как вы можете легко достичь того, что вы хотите. Вы просто устанавливаете прослушиватель длинных щелчков на textview, и внутри него вы показываете AlertDialog для всплывающих окон, который имеет возможность вставки, и когда вы нажимаете, он использует ClipboardManager для получения основного содержимого в буфере обмена. В зависимости от ваших потребностей вы можете настроить код и использовать что угодно вместо AlertDialog (например, мы использовали контекстное меню раньше, но оно вызывало сбои в различных версиях Android, поэтому мы заменили его на AlertDialog). Дайте мне знать, если у вас есть вопросы.

    textView.setLongClickable(true);
    textView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            AlertDialog.Builder builder;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                builder = new AlertDialog.Builder(ArticleActivity.this, android.R.style.Theme_Material_Dialog_Alert);
            } else {
                builder = new AlertDialog.Builder(ArticleActivity.this);
            }
            builder.setTitle("Paste")
                    .setMessage("Are you sure you want to paste this entry?")
                    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
                            if (clipboardManager != null) {
                                Log.e("TAG", "clipboard:" + clipboardManager.getPrimaryClip());
                            }
                        }
                    })
                    .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            // do nothing
                        }
                    })
                    .show();
            return true;
        }
    });
0
ответ дан Minas 18 January 2019 в 07:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: