В этом проекте используется https://github.com/rockerhieu/emojicon в качестве элемента управления для отображения и редактирования эмодзи.
Отслеживается изменение высоты макета при появлении клавиатуры, при появлении клавиатуры отображается кнопка эмодзи, а при скрытии клавиатуры кнопка эмодзи скрывается.
См. этот блог: http://blog.csdn.net/bear_huangzhen/article/details/45896333.
Чтобы высота макета изменялась при появлении клавиатуры, необходимо установить свойство android:windowSoftInputMode активности в значение adjustResize. Это позволит изменять размер экрана при отображении клавиатуры, что приведёт к изменению высоты макета.
<activity
android:name=".MainActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
См. этот блог: http://blog.csdn.net/bear_huangzhen/article/details/45896333.
Реализуйте интерфейс View.OnLayoutChangeListener для активности или фрагмента и установите слушатель на корневой макет:
private EmojiconEditText etContent;
private View vEmojiContainer, vEmojiBar;
private ImageView ivEmojiSwitch;
/**
* Высота клавиатуры
*/
private int softKeyboardHeight = 0;
/**
* Отображается ли контейнер эмодзи
*/
private boolean emojiContainerShown = false;
/**
* Скрывать ли контейнер эмодзи после закрытия клавиатуры
*/
private boolean showEmojiView = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View contentView = View.inflate(this, R.layout.activity_main, null);
setContentView(contentView);
// Установить слушателя на корневой макет
contentView.addOnLayoutChangeListener(this);
etContent = (EmojiconEditText) findViewById(R.id.et_content);
vEmojiBar = findViewById(R.id.ll_emoji_bar);
vEmojiContainer = findViewById(R.id.fl_emoji_container);
ivEmojiSwitch = (ImageView) findViewById(R.id.iv_emojicon);
ivEmojiSwitch.setOnClickListener(this);
// Добавить элемент управления Emoji
getSupportFragmentManager().beginTransaction().replace(R.id.fl_emoji_container, new EmojiconsFragment()).commitAllowingStateLoss();
}
Отображение кнопки эмодзи при появлении клавиатуры и скрытие её при закрытии клавиатуры:
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
// Теперь считаем, что клавиатура появляется, если высота, на которую активность сдвинута вверх, больше трети высоты экрана
int keyHeight = getResources().getDisplayMetrics().widthPixels / 3;
if (oldBottom != 0 && bottom != 0 && (oldBottom - bottom > keyHeight)) {
// Отслеживаем появление клавиатуры
if (softKeyboardHeight == 0) {
softKeyboardHeight = oldBottom - bottom;
}
// Скрыть контейнер эмодзи
hideEmojiLayout(false);
ivEmojiSwitch.setImageResource(R.drawable.ic_emoji);
vEmojiBar.setVisibility(View.VISIBLE);
} else if (oldBottom != 0 && bottom != 0 && (bottom - oldBottom > keyHeight)) {
// Отслеживаем закрытие клавиатуры
if (showEmojiView) {
// Если клавиатура была скрыта нажатием на кнопку эмодзи, показать контейнер эмодзи
showEmojiView = false;
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) vEmojiBar.getLayoutParams();
lp.bottomMargin = softKeyboardHeight;
vEmojiBar.setLayoutParams(lp);
lp = (RelativeLayout.LayoutParams) vEmojiContainer.getLayoutParams();
lp.height = softKeyboardHeight;
vEmojiContainer.setVisibility(View.VISIBLE);
emojiContainerShown = true;
} else {
// В других случаях скрыть клавиатуру, затем скрыть кнопку эмодзи
ivEmojiSwitch.setImageResource(R.drawable.ic_emoji);
vEmojiBar.setVisibility(View.GONE);
}
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_emojicon: {
if (emojiContainerShown) {
// При повторном нажатии на кнопку эмодзи показать клавиатуру
ivEmojiSwitch.setImageResource(R.drawable.ic_emoji);
hideEmojiLayout(false);
showSoftInput(this, etContent);
} else {
// Иначе показать контейнер эмодзи
ivEmojiSwitch.setImageResource(R.drawable.ic_keyboard);
...
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )