Ответ 1
Да, это можно сделать, используя PopupWindow над мягкой клавиатурой.
Вы можете проверить эту библиотеку или эту библиотеку, где они реализовали именно то, что вы ищете.
Они добавили пользовательский вид по клавиатуре. Вы можете просто следовать их шаблону реализации и легко добавлять свое представление. Мне бы хотелось выделить какой-то важный код,
Первоначально определяя высоту клавиатуры,
// Defining default height of keyboard which is equal to 230 dip
final float popUpheight = getResources().getDimension(
R.dimen.keyboard_height);
changeKeyboardHeight((int) popUpheight);
Этот метод используется для динамической проверки высоты клавиатуры и ее видимости,
/**
* Checking keyboard height and keyboard visibility
*/
int previousHeightDiffrence = 0;
private void checkKeyboardHeight(final View parentLayout) {
parentLayout.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
parentLayout.getWindowVisibleDisplayFrame(r);
int screenHeight = parentLayout.getRootView()
.getHeight();
int heightDifference = screenHeight - (r.bottom);
if (previousHeightDiffrence - heightDifference > 50) {
popupWindow.dismiss();
}
previousHeightDiffrence = heightDifference;
if (heightDifference > 100) {
isKeyBoardVisible = true;
changeKeyboardHeight(heightDifference);
} else {
isKeyBoardVisible = false;
}
}
});
}
И этот метод изменяет высоту клавиатуры emoji на основе фактической высоты клавиатуры,
/**
* change height of emoticons keyboard according to height of actual
* keyboard
*
* @param height
* minimum height by which we can make sure actual keyboard is
* open or not
*/
private void changeKeyboardHeight(int height) {
if (height > 100) {
keyboardHeight = height;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, keyboardHeight);
emoticonsCover.setLayoutParams(params);
}
}
Я следовал этому подходу и получил именно то, что хотел. Я уверен, что вы сможете реализовать это в зависимости от требований к вашему приложению.
Надеюсь, что это поможет.