Как установить курсор для android

Cursor

Изучим объект Cursor. Не путайте его с курсором мыши, который бегает у вас на экране.

Работа с курсором

  • Курсор — это набор строк в табличном виде
  • Для доступа курсора вы должны использовать метод moveToFirst(), так как курсор размещается перед первой строкой
  • Вы должны знать названия столбцов
  • Вы должны знать типы столбцов
  • Все методы доступа к массивам основываются на номере столбца, поэтому сначала нужно преобразовать название столбца в номер столбца
  • Курсор является случайным (random cursor) — вы можете переходить вперед, назад и со строки на строку
  • Поскольку курсор является случайным, у него можно запрашивать количество строк (row count)

Класс Cursor содержит немало возможностей для навигации (но не ограничивается только ими):

  • moveToFirst() — перемещает курсор на первую строку в результате запроса;
  • moveToNext() — перемещает курсор на следующую строку;
  • moveToLast() — перемещает курсор на последнюю строку;
  • moveToPrevious() — перемещает курсор на предыдущую строку;
  • getCount() — возвращает количество строк в результирующем наборе данных;
  • getColumnIndexOrThrow() — возвращает индекс для столбца с указанным именем (выбрасывает исключение, если столбец с таким именем не существует);
  • getColumnName() — возвращает имя столбца с указанным индексом;
  • getColumnNames() — возвращает массив строк, содержащий имена всех столбцов в объекте Cursor;
  • moveToPosition() — перемещает курсор на указанную строку;
  • getPosition() — возвращает текущую позицию курсора

Также Android предоставляет следующие методы:

  • isBeforeFirst()
  • isAfterLast() — полезный метод, сигнализирующий о достижении конца запроса. Используется в циклах
  • isClosed()

И другие методы, о которых можно узнать в документации или из примеров.

Курсор обязательно следует закрывать методом close() для освобождения памяти.

Наглядно о курсорах

Чтобы было проще понять, что такое курсоры, представляйте их в виде таблицы. Пусть у нас есть таблица из столбцов: _id (идентификатор) и catname (имя котов). Допустим, мы ввели в базу имена четырех котов и таблица базы данных выглядит таким образом:

_id catname
1 Мурзик
2 Васька
3 Барсик
4 Рыжик

Как было сказано выше, при работе с курсорами необходимо вызвать метод moveToFirst() (перейти к первой строке), после чего таблица будет выглядеть следующим образом:

_id catname
1 Мурзик
2 Васька
3 Барсик
4 Рыжик

Как видите, после вызова метода первая строчка таблицы подсвечена. Именно данные этой строки и содержит сейчас курсор. Можно проверить следующим образом. Добавим новую кнопку в проект и напишем код:

На первой строке содержатся данные 1, Мурзик. Мы не знаем, как хранятся данные в курсоре, но нам это и не нужно. С помощью метода getColumnIndex() с указанием имени колонки мы можем извлечь данные, которые хранятся в них.

Теперь вызовем метод moveToNext() (перейти к следующей строке). Таблица будет выглядеть уже так:

_id catname
1 Мурзик
2 Васька
3 Барсик
4 Рыжик

Код для проверки:

Если вызвать метод moveToNext() ещё раз, то переместимся на третью позицию. А теперь представьте ситуацию, что у нас в базе более ста котов, и чтобы узнать имя 85-го кота, нам придётся 85 раз вызывать метод. Не удобно. К счастью, есть метод moveToPosition() (перейти в позицию), в котором сразу можно указать нужную строку (отсчет идет от 0):

Читайте также:  Смайлики для андроид расшифровка

А таблица выглядит уже так:

_id catname
1 Мурзик
2 Васька
3 Барсик
4 Рыжик

Надеюсь, вы поняли общий принцип работы с курсором. Теперь вы можете понять, как выглядит курсор после вызова метода moveToLast() (перейти на последнюю запись).

Если нам надо получить имена всех котов из таблицы базы данных, то нужно последовательно вызывать методы moveToNext(). Это проще сделать через цикл. Условием для остановки цикла является проверка возвращаемого значения метода. Если вернётся значение false, значит мы дошли до конца таблицы. В данном случае не нужно вызывать метод moveToFirst(), чтобы не пропустить первую запись:

Цикл можно переписать по другому. Метод isAfterLast() возвращает true, когда курсор с последней записи пытается переместиться в никуда. А пока курсор возвращает false, можно двигать его на следующую позицию. Пример будет выглядеть так:

В примерах мы извлекали строковое значение записи через метод getString():

По аналогии можно получить числовое значение, например, номер ресурса изображения.

Думаю, приведённых примеров достаточно, чтобы понять с чем едят курсоры. Они совсем не страшные.

Устаревшие методы (deprecated)

Начиная с Android 3.0, многие методы для работы с курсором считаются устаревшими.

  • startManagingCursor()
  • stopManagingCursor()
  • managedQuery()
  • reQuery()

При использовании устаревших методов вы можете получить исключение типа:

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

Наиболее распространён метод managedQuery(), в сети постоянно натыкаюсь на примеры с использованием данного метода.

Обычно, код выглядит следующим образом:

Данный код следует переработать следующим образом:

Метод reQuery() следует заменить на вызов LoaderManager.

Класс CursorLoader и связанный с ним LoaderManager гарантируют, что запросы будут выполняться асинхронно.

Мне пока не приходилось использовать данный приём в своей практике, поэтому просто скопирую из других источников:

  • реализуйте интерфейс в вашем классе как LoaderManager.LoaderCallbacks
  • в методе onCreate() инициализируйте loader как First implement the interface in your class as getLoaderManager().initLoader(0, null, this);
  • вместо reQuery используйте getLoaderManager().restartLoader(0, null, this);
  • переопределите три метода onCreateLoader(), onLoadFinished(), onLoaderReset()

MatrixCursor

Иногда попадаются примеры с использованием класса MatrixCursor. Сам пока не изучал, оставлю вам в качестве домашнего задания. Небольшой пример на память:

Источник

Как облегчить управление Android-смартфоном с помощью курсора

Тренд на увеличение высоты дисплеев, которому оказались подвержены почти все производители смартфонов, по мнению многих потребителей, оказал негативное влияние на удобство взаимодействия с интерфейсом. Еще бы, ведь эквилибристика со смартфоном не только создает дополнительную нагрузку на пальцы, но и увеличивает риск непроизвольного выпадения аппарата из рук. Чтобы оградить своих клиентов от подобных неудобств, Apple придумала функцию Reachability, в отличие от Google, которая переложила эту обязанность на сторонних разработчиков.

Приложение Reachability Cursor от разработчиков студии NiftyUI переносит привычный пользователям компьютеров курсор на Android, который позволяет не тянуться до самых отдаленных элементов операционной системы и сторонних приложений вручную, а сделать это с помощью курсора.

Как добавить курсор на Android

После установки приложения на экране появляется небольшая округлая область, которая располагается с правого или левого края экрана и выполняет роль тачпада. Прикосновение к ней активирует курсор, который можно перемещать по интерфейсу, двигая палец с небольшой амплитудой. Как и реальный, программный тачпад обеспечивает не только перемещение курсора и нажатия, но и жесты прокручивания и длительные удерживания.

Лично мне тачпад больше напомнил не режим Reachability, а виртуальную клавишу Home в iOS в рамках функции AssistiveTouch, которая тускнеет, если ей не пользоваться, и проявляется более отчетливо при использовании. Во многом такие ассоциации возникли из-за неприметности тачпада, который никоим образом не мешает взаимодействию с операционной системой, когда надобность в нем отсутствует.

Читайте также:  Удаление рабочего стола android

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

Обсудить эту и другие новости Android можно в нашем Telegram-чате.

Приложение: Reachability Cursor

Разработчик: NiftyUI Категория: Инструменты Цена: Бесплатно Скачать: Google Play Приложением уже заинтересовались: 550 человек

Источник

Как установить позицию курсора в EditText?

Есть два EditText , при загрузке страницы текст устанавливается в первом EditText, поэтому теперь курсор будет в исходном месте EditText , я хочу установить позицию курсора во втором EditText, который не содержит данных. Как это сделать?

Где позиция int:

Я сделал так, чтобы установить положение курсора в конец текста после обновления текста EditText программно здесь, etmsg – EditText

Как установить позицию курсора EditText в Android

Ниже кода установлен курсор для EditText в EditText :

Ниже кода установлен курсор до конца EditText :

Ниже кода устанавливается курсор после некоторой 2-й позиции символа:

Я хочу установить позицию курсора в edittext, которая не содержит данных

В пустом EditText есть только одна позиция, это setSeletion(0) .

Или вы имели в виду, что хотите сосредоточиться на своем EditText когда открывается ваша деятельность? В этом случае его requestFocus()

Пусть editText2 – это ваш второй вариант EditText. Затем введите следующий фрагмент кода в onResume ()

В вашем xml-макете второго представления EditText.

SetSelection (int index) в Edittext должен позволить вам сделать это.

В качестве напоминания: если вы используете edittext.setSelection() чтобы установить курсор, и он НЕ работает при настройке alertdialog например, убедитесь, что вы alertdialog selection() ПОСЛЕ того, как диалог был создан

Используйте нижнюю строку

e2 – текст редактирования Название объекта

Я не получаю метод setSelection () напрямую, поэтому я сделал, как показано ниже, и работал как шарм

Если вы хотите установить курсор после n символа справа налево, вам нужно сделать это следующим образом.

Если текст edittext

И вы хотите переместить курсор на 6-ю позицию справа

Затем он переместит курсор в положение-

Некоторое время редактирование текстового курсора donot приходит в конкретное положение, если мы непосредственно используем editText.setSelection(position); , В этом случае вы можете попробовать

Помните вызов requestFocus() перед setSelection для edittext.

Установите курсор в строку и столбец

Вы можете использовать следующий код, чтобы получить позицию в вашем EditText, которая соответствует определенной строке и столбцу. Затем вы можете использовать editText.setSelection(getIndexFromPos(row, column)) чтобы установить позицию курсора. Следующие вызовы метода могут быть сделаны:

  • getIndexFromPos(x, y) Перейдите к столбцу y строки x
  • getIndexFromPos(x, -1) Перейти к последнему столбцу строки x
  • getIndexFromPos(-1, y) Переход к столбцу y последней строки
  • getIndexFromPos(-1, -1) Перейти к последнему столбцу последней строки

Обработка всех строк и столбцов осуществляется; Ввод столбца, превышающего длину строки, будет возвращать позицию в последнем столбце строки. Ввод строки, превышающей количество строк в EditText, будет переходить к последней строке. Он должен быть достаточно надежным, так как он был сильно протестирован.

Вопрос уже был дан, но я думал, что кто-то захочет это сделать.

Он работает путем циклического прохождения каждого символа, увеличивая количество строк каждый раз, когда находит разделитель строк. Когда количество строк равно требуемой строке, оно возвращает текущий индекс + столбец или индекс конца строки, если столбец находится за пределами границ. Вы также можете повторно использовать метод getTrueLineCount() , он возвращает количество строк, игнорируя перенос текста, в отличие от TextView.getLineCount() .

Читайте также:  Блокирование нежелательных звонков андроид

В kotlin вы можете создать функцию расширения следующим образом:

А затем просто вызовите myEditText.placeCursorAtLast()

Я считаю, что самый простой способ сделать это – просто использовать прописку.

Скажем в разделе edittext вашего xml, добавьте android: paddingLeft = «100dp». Это переместит вашу начальную позицию курсора 100dp справа от левого края.

Точно так же вы можете использовать android: paddingRight = «100dp» Это переместит ваше конечное положение курсора 100dp влево от правого конца.

Для более подробной информации, прочтите эту статью в своем блоге : Android: настройка курсора Запуск и завершение позиции в EditText Widget

Источник

Как установить положение курсора в EditText?

есть два EditText , при загрузке страницы текст устанавливается в первый EditText, поэтому теперь курсор будет находиться в начальном месте EditText , Я хочу установить положение курсора во втором EditText, который не содержит данных. Как это сделать?

17 ответов:

Я сделал этот способ, чтобы установить положение курсора в конец текста после обновления текста EditText программно вот, etmsg Это EditText

Как установить позицию курсора EditText в Android

код установите курсор в положение пуск на EditText :

код установить курсор в конец на EditText :

ниже кода устанавливается курсор после некоторого 2-го символа позиции:

Я хочу установить положение курсора в edittext, который не содержит данных

есть только одна позиция в пустом EditText, это setSeletion(0) .

или вы имели в виду, что вы хотите, чтобы сосредоточиться на вашем EditText когда открывается ваша активность? В таком случае его requestFocus()

используйте нижеприведенную строку

e2 изменить имя текстового объекта

пусть editText2 — это ваше второе представление EditText .затем поместите следующий фрагмент кода в onResume()

в вашем XML-макете второго представления EditText.

некоторое время редактировать текстовый курсор донот приходит в определенное положение, если мы непосредственно используем editText.setSelection(position); . В этом случае вы можете попробовать

setSelection(int index) метод Edittext должен позволить вам сделать это.

как напоминание: Если вы используете edittext.setSelection() установить курсор, и он не работает при настройке alertdialog например, убедитесь в том, чтобы установить selection() после создания диалогового окна

помните вызов requestFocus() до setSelection для edittext.

этот код поможет вам показать курсор в последней позиции редактирования текста.

Я не получу метод setSelection() напрямую , поэтому я сделал, как показано ниже и работа как шарм

если вы хотите установить курсор после n персонаж из справа налево, то вы должны сделать такой.

если текст edittext нравится

и вы хотите переместить курсор на 6-й позиции справа

затем он переместит курсор на-

установите курсор на строку и столбец

вы можете использовать следующий код, чтобы получить позицию в вашем EditText, которая соответствует определенной строке и столбцу. Затем вы можете использовать editText.setSelection(getIndexFromPos(row, column)) для установки положения курсора. Следующие вызовы метода могут быть:

  • getIndexFromPos(x, y) перейти к столбцу y строки x
  • getIndexFromPos(x, -1) перейти к последнему столбцу строки x
  • getIndexFromPos(-1, y) перейти к столбцу y последней строки
  • getIndexFromPos(-1, -1) перейти к последний столбец последней строки

обрабатываются все границы строк и столбцов; ввод столбца, превышающего длину строки, возвращает позицию в последнем столбце строки. Ввод строки, превышающей количество строк EditText, приведет к последней строке. Он должен быть достаточно надежным, поскольку он был сильно протестирован.

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

Источник

Оцените статью