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

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

Что, если я хочу, чтобы моя клавиатура состояла из нескольких фигур, а не просто располагалась внизу экрана? Я обречен с самого начала, или я могу делать то, что хочу?

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

ваше здоровье!


person Community    schedule 02.11.2010    source источник
comment
Прошу прощения, если вам действительно было жарко создать замену Android-клавиатуре. :) Интересный вопрос, кстати.   -  person MusiGenesis    schedule 03.11.2010
comment
mwah ха-ха, я, но я приму ваше редактирование!   -  person    schedule 03.11.2010


Ответы (2)


IME — это просто окно. Он расположен относительно нижней части экрана, поэтому вы не можете его контролировать. Но вы можете рисовать в нем все, что хотите, или нет для мест, которые вы хотите, чтобы они были прозрачными. Вы можете контролировать, сколько приложений перемещается из вашего IME, с помощью этого: rel="nofollow">http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html#onComputeInsets(android.inputmethodservice.InputMethodService.Insets)

Android не позволяет окнам по одному решать, будут ли события обрабатываться ими или отправляться в окно позади них; единственный элемент управления, который вам нужен, чтобы предотвратить потребление событий всем вашим окном, - это константы Insets.touchableInsets, чтобы сообщить оконному менеджеру разрешить событиям за пределами данных вставок проходить к тому, что за ними.

person hackbod    schedule 03.11.2010
comment
Привет, спасибо, Хакбод, этого я и боялся. По крайней мере, с моей точки зрения, было бы здорово, если бы я мог создать окно с клавиатурой — или, если уж на то пошло, плавающее окно (окна) для любых целей — которое могло бы появляться на любой стороне экрана и уменьшать размер экрана. пространство, доступное для основной деятельности, в область, которую они не перезаписывают. - person ; 03.11.2010
comment
Это долгий путь, но можно ли использовать прозрачную полноэкранную активность в качестве поддельного IME? Он отправляет любые символы, введенные в действие непосредственно под ним? Или вы можете придумать какой-нибудь другой способ взломать то, что я хочу? - person ; 03.11.2010
comment
Хорошо, я вижу немного в вашей ссылке о полноэкранном IME. Я полагаю, что это позволит мне технически делать то, что я хочу, без основного взаимодействия на лету с базовой активностью. Эта последняя часть может быть нарушителем условий сделки, трудно сказать, не попробовав ее, чтобы увидеть, на что она похожа. - person ; 03.11.2010
comment
Ограничения очень преднамеренны, чтобы избежать огромной сложности со стороны приложений для обработки произвольного поведения IME. Даже имея способ отодвинуть приложение в сторону вместо приложения, вы не будете довольны результатом, потому что подавляющее большинство приложений не знают, как с этим справиться. Иногда работать в рамках ограничений полезно. - person hackbod; 03.11.2010
comment
Конечно. Таким образом, в Android отсутствует класс возможных действий, из которых IME является одним из специализированных случаев, и это класс действий, которые предназначены для работы одновременно с текущим действием — назовите их соавторами или что-то в этом роде. Как вы говорите, людям было бы очень легко писать приложения, которые не будут хорошо работать. Это позор, потому что такие вещи остаются в руках очень занятых разработчиков, которые не могут придумать/сделать каждую потенциально крутую вещь. - person ; 04.11.2010
comment
Это не имеет ничего общего с отсутствующим классом действий, а просто с тем, что если бы IME было разрешено продвигать приложение любым способом, разработчикам приложений пришлось бы намного больше работать, чтобы правильно написать приложение, которое имело бы дело со всеми из тех возможностей. Это не оставляет вещи в руках занятых разработчиков, это разумный компромисс, который упрощает работу для всех. Другими словами... Я не думаю, что то, что вы хотите делать со своим IME, разумно. Есть много вещей, которые вы можете сделать в IME; воспользоваться тем. - person hackbod; 05.11.2010
comment
Я понимаю это, но есть и другие способы приблизиться к этому, если вы хотите сделать такое поведение универсальным. Как мне пришло в голову, предположим, что вы разрешили совместному действию занимать определенное пространство вокруг любого края (краев) экрана, при этом основное действие все еще видно и может использоваться в любом месте. не был покрыт. Чтобы взаимодействовать с закрытыми частями основного действия, он может автоматически прокручивать это действие таким образом, чтобы оно центрировалось вокруг любого места, где вы его коснулись, открывая ранее закрытые области. - person ; 05.11.2010
comment
Моя идея с клавиатурой — это просто вертикальная полоса клавиатуры вдоль каждой стороны экрана, с клавишами A-M внизу с одной стороны и клавишами N-Z вверх с другой. Точность и прогнозирование лучше, чем у двумерной сетки, потому что у каждого ключа есть только два соседа, и он находится в нормальном алфавитном порядке, поэтому его нетрудно «выучить». Я думаю, вы могли бы довольно быстро стучать двумя большими пальцами. - person ; 05.11.2010
comment
Когда вы касаетесь клавиши, выдвигается горизонтальный список возможных символов. если вы проведете пальцем, вы можете выделить один из них, а затем отпустить, чтобы выбрать. Для английского языка это может быть только заглавная буква, но для других языков (например, японский, который использует 5 групп символов) это может быть полезным способом выбора между связанными группами символов, где весь алфавит слишком велик, чтобы поместиться на экране. сразу. Пробел, цифры и символы можно было разместить вдоль нижнего и/или верхнего края горизонтальной полосой, оставляя большую часть экрана видимой внизу. - person ; 05.11.2010
comment
Может быть невозможно, но я думаю, что это разумно. мысли? - person ; 05.11.2010
comment
Вы можете многое сделать с помощью IME. Вы не сможете заставить приложения отодвигать свои левый и правый края от вашего IME таким образом. Взгляните на портретный экран. Как вы думаете, где в мире приложения разместят свой пользовательский интерфейс, если попадут в такую ​​ситуацию? Почему бы вам не поиграть с IME и посмотреть, что вы можете сделать. - person hackbod; 05.11.2010
comment
Кроме того, мы не говорим о совместной деятельности. Во-первых, IME не является действием. Во-вторых, это самостоятельные вещи. Они только поверхностно сотрудничают в том, что приложение обнаруживает, что оно должно изменить размер и справиться с этим. Как я уже сказал, поставить разработчиков приложений в ситуацию, когда им нужно спроектировать свой пользовательский интерфейс, чтобы они могли хорошо работать с любым IME, было бы для них огромным увеличением проблем. Тривиально бросать такие вещи в приложение. Плохо заставлять каждое приложение иметь дело с этим. Впрочем, хватит этого разговора. - person hackbod; 05.11.2010

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

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

Насколько я понимаю, есть два способа справиться с UI. - Передавайте события базовой активности, когда они "должны пройти"... Так как ваша программная клавиатура может иметь свой собственный процесс, это может стать немного тернистым. - Составьте клавиатуру из более чем одной прямоугольной области, чтобы события пользовательского интерфейса проходили естественным образом. Я не уверен, что это вообще возможно. Я все еще довольно новичок в разработке Android.

person Mark Storer    schedule 02.11.2010
comment
Насколько я понимаю, действия являются полноэкранными, а клавиатура и некоторые другие подобные вещи - это нечто иное, чем действия. Эти «что-то еще» предназначены для работы поверх действий, так что область, которую они не затеняют, можно использовать. - person ; 03.11.2010
comment
ОДНАКО - Должны ли эти «что-то, кроме действий», быть прямоугольником внизу экрана? Поскольку вы заметили, что при появлении типичной программной клавиатуры поля ввода текста сдвигаются вверх, чтобы они были видны в верхней половине экрана, которая не закрыта клавиатурой. Если я не хочу, чтобы мои части клавиатуры отображались внизу, как работает это взаимодействие с базовыми полями ввода? Сделали ли разработчики Android предположения о форме и расположении клавиатуры, которые делают форму и размещение не по умолчанию непрактичными/невозможными? - person ; 03.11.2010