В этом проекте используется 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);
...
You can comment after Login
Inappropriate content may be displayed here and will not be shown on the page. You can check and modify it through the relevant editing function
If you confirm that the content does not involve inappropriate language/advertisement redirection/violence/vulgar pornography/infringement/piracy/false/insignificant or illegal content related to national laws and regulations, you can click submit to make an appeal, and we will handle it as soon as possible.
Comments ( 0 )