2015-03-13 1 views
12

Я работаю над Android SoftKeyboard. Я создал макет для клавиатуры, но не знаю, как включать предложения, которые появляются, если мы введем слово в EditText.
Например, если я пишу «Kn», то «Известные» и «Известные» показаны в разделе «Предложения».
Так что мои вопросы -
1) Как включить предложения в Android Softkeyboard?
2) Есть ли способ включить наш собственный список предложений?
Thanx много вперед.
Я уже проверил this и this, но не смог найти правильный ответ. Любая помощь будет оценена по достоинству.Как включить предложения в Android-клавиатуру

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

Suggestions in keyboard

+0

Я думаю, вы хотите использовать [AutoCompleteTextView] (http://developer.android.com/reference/android/widget/AutoCompleteTextView.html), вместо этого ... –

+0

Итак, я хочу подтвердить, что AutoCompleteTextView показан ниже EditText, в который мы вводим текст, или его можно использовать выше Клавиатура также как «Предложения», которые показаны непосредственно над макетом клавиатуры. – Kunal

+0

Я не думаю, что есть способ. Я задал аналогичный вопрос раньше и сказал, поскольку он зависит от индивидуальной клавиатуры и ее реализации, и нет никакого способа обеспечить это. (Я хотел скрыть это вместо добавления предложений, но это тот же принцип). И AutoCompleteTextView похож на поле со списком с предложениями. Он не добавляет предложений на клавиатуру. – kha

ответ

21

Вы можете использовать статический метод UserDictionary.Words.addWord(....): Link

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
    // On JellyBean & above, you can provide a shortcut and an explicit Locale 
    UserDictionary.Words.addWord(this, "MadeUpWord", 10, "Mad", Locale.getDefault()); 
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) { 
    UserDictionary.Words.addWord(this, "MadeUpWord", 10, UserDictionary.Words.LOCALE_TYPE_CURRENT); 
} 

Вам нужно будет добавить это разрешение манифеста:

<uses-permission android:name="android.permission.WRITE_USER_DICTIONARY"/> 

Добавлены слова будут появляться в Settings > Language & input > Personal dictionary.

Если вы используете свою собственную мягкую клавиатуру, я предлагаю вам пройти через Creating an Input Method. Предложения обычно отображаются в Candidates View. По умолчанию InputMethodService#onCreateCandidatesView() возвращает null. Вы должны переопределить этот метод, чтобы вернуть реализацию панели предложений.

Вот пример проекта, который реализует вид кандидатов: SoftKeyboard.

Больше информации:

слов и фраз предложения идут в кандидаты просмотра. Информация о том, как создать &, заселяет его в примерном проекте, упомянутом выше.

Насколько я знаю, выбор того, какие слова/фразы предложить, является ответственностью разработчика. Android не предоставляет их для вас. Вам, вероятно, понадобится набор словарей - по одному для каждого языка/локали, которые вы планируете поддерживать. Вы также можете сохранить словарь пользовательских слов.

по умолчанию клавиатура для Android использует эти: Link

Если вы загрузите один из них, распаковать его и открыть с помощью текстового редактора:

dictionary=main:en,locale=en,description=English,date=1402373178,version=47 
word=the,f=222,flags=,originalFreq=222 
word=to,f=215,flags=,originalFreq=208 
word=of,f=214,flags=,originalFreq=214 
word=and,f=212,flags=,originalFreq=212 
word=in,f=210,flags=,originalFreq=210 
.... 165,635 more lines 

Как видно, частота играет решающую роль в определении пригодность слова как предложения. Вероятно, вы не хотите предлагать tachometer, когда пользователь вводит ta. Вы, вероятно, do хотите предложить take - частота помогает вам там.

автоисправление:

word=id,f=99,flags=,originalFreq=99 
shortcut=I'd,f=whitelist 

Флаги указывают уместность:

word=goddamn,f=0,flags=offensive,originalFreq=62 

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

Две статьи (оба Питера Kankowski), которые говорят о predictive text input & spelling correction:

Using DAWG for predictive text input

Using Ternary DAGs for Spelling Correction

CandidatesView:

Первое, что вы должны знать о CandidatesView : это необязательно. Фактически, LatinIME (специальная клавиатура по умолчанию для Android) не использует его. Вместо этого LatinIME имеет собственную реализацию - SuggestionStripView - что похоже. Поведение InputMethodService#onCreateCandidatesView() по умолчанию - возврат null. Если вы решите предоставить свою собственную реализацию, не переопределяйте этот метод.

Вам нужно решить, как выглядит ваш кандидат. Одна из возможных реализаций может быть HorizontalScrollView. После того, как вы оцениваете свои предложения (например, пользователь начинает писать «как», и ваша логика предложений дает вам List<String>, содержащий «имеет», «было», «помогать», «спрашивать», «спрашивать», «спрашивать», «предположим»), создайте &, добавьте TextViews, удерживая эти строки до HorizontalScrollView(LinearLayout). Таким образом, пользователь может прокручивать по горизонтали и выбирать нужное слово, щелкая по нему.

Вам решать, использовать ли API или обрабатывать CandidatesView самостоятельно. Если вы хотите использовать API, переопределите InputMetodService#onCreateCandidatesView(), раздуйте свой собственный макет, а затем верните его. Держите ссылку на нее, поэтому вы можете обновить ее по мере необходимости. Чтобы контролировать видимость, используйте метод setCandidatesViewShown(boolean).

+0

Поблагодарите u @Vikram за ваш ответ, но код «UserDictionary» здесь вы предлагаете добавить слова в словарь, но я хочу получить слова из словаря, используя исходные алфавиты слова. Пожалуйста, помогите сделать это – Kunal

+0

@ Kunal Hi Kunal, я добавил дополнительную информацию. – Vikram

+0

Спасибо за ваш ответ. Но не могли бы вы помочь мне объяснить, как использовать «CandidateView», чтобы добавить наш собственный макет. Я использовал код клавиатуры, который вы указали в своем ответе, но их код очень суетливый. Не в состоянии понять это. Я хочу только немного помочь, отдохну, я сделаю это сам. И еще одна вещь, если вы не можете ответить на вопросы этого комментария, ваш ответ все еще приемлем. – Kunal

1

Если вы создаете пользовательскую клавиатуру, я предлагаю вам пройти через Creating Input Method, есть sample code, который вы можете переместить. Вероятно, CandidateView - это то, что вы ищете. Это объясняется в ссылке выше.

Если вы хотите, чтобы обеспечить встроенные средства проверки орфографии, вы хотели бы, чтобы проверить Spellchecker framework

Надеются, что это помогает.

+0

Я не хочу добавлять проверку орфографии, я хочу добавить предложения из Словаря, данные в устройствах Android. Просьба привести пример. – Kunal