1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/laomengzhu-EmojiLayout

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Эффект предварительного просмотра

Эффект предварительного просмотра

Описание

В этом проекте используется 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Расширить Свернуть
MPL-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/laomengzhu-EmojiLayout.git
git@gitlife.ru:oschina-mirror/laomengzhu-EmojiLayout.git
oschina-mirror
laomengzhu-EmojiLayout
laomengzhu-EmojiLayout
master