日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 调出键盘表情_Android 软键盘和emoji表情切换方案,和微信几乎一样的体验...

發布時間:2023/12/15 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 调出键盘表情_Android 软键盘和emoji表情切换方案,和微信几乎一样的体验... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注意:本項目還有一個小坑。第一次進去的時候有時候輸入框沒有得到焦點,沒有彈出軟鍵盤,所以不能更好的量取軟鍵盤高度,給了一個默認值787 軟鍵盤默認高度。所以可以忽略不計,一旦彈出了軟鍵盤,這個高度就被記錄下來了,存在本地,以便下一次用。

這幾天沒事,想到之前做im聊天的時候,表情輸入和鍵盤之間的切換體驗有些問題,看了微信的,覺得真好,就有了想描摹一下的心思,所有有了這個demo。站在巨人的肩膀上,我們才能走得更遠。

一些配置,導入相關的庫:

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])

testCompile 'junit:junit:4.12'

compile project(':library')

compile 'com.android.support:appcompat-v7:23.1.1'

compile 'com.android.support:design:23.1.1'

compile 'com.jakewharton:butterknife:7.0.1'//butterknife注解框架

compile 'com.android.support:support-v4:23.1.1'

}

鍵盤彈出方案

android:windowSoftInputMode="stateVisible|adjustResize"

提一下emoji表情輸入,其實很簡單。

調用兩個接口

EmojiconGridFragment.OnEmojiconClickedListener//點擊表情接口

EmojiconsFragment.OnEmojiconBackspaceClickedListener//刪除表情接口

然后實現一下方法,emoji就好了

@Override

public void onEmojiconBackspaceClicked(View v) {

EmojiconsFragment.backspace(emojiEditTextView);

}

@Override

public void onEmojiconClicked(Emojicon emojicon) {

EmojiconsFragment.input(emojiEditTextView, emojicon);

}

在運用前,要知道這個公式:

KeyBoard_H = Screen_H - StatusBar_H - AppRect_H

軟鍵盤高度 = 分辨率高 - 狀態欄高 - 應用可視高

于是有了這個方法

public static int getKeyboardHeight(Activity paramActivity) {

int height = SystemUtils.getScreenHeight(paramActivity) - SystemUtils.getStatusBarHeight(paramActivity)

- SystemUtils.getAppHeight(paramActivity);

if (height == 0) {

height = SharedPreferencesUtils.getIntShareData("KeyboardHeight", 787);//787為默認軟鍵盤高度 基本差不離

}else{

SharedPreferencesUtils.putIntShareData("KeyboardHeight", height);

}

return height;

}

主頁布局文件

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:emojicon="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

app:layout_behavior="@string/appbar_scrolling_view_behavior"

tools:context="com.wobiancao.keyboarddemo.MainActivity"

tools:showIn="@layout/activity_main">

android:id="@+id/emojicons_container"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1"

android:orientation="vertical">

android:id="@+id/emojicons_edit"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1"

android:gravity="left|top"

android:padding="8dp"

android:textSize="18sp"

emojicon:emojiconSize="18sp" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="10dp"

android:background="?attr/colorPrimary"

android:gravity="center">

android:id="@+id/emojicons_icon"

android:layout_width="40dip"

android:layout_height="40dip"

android:padding="8dip"

android:src="@mipmap/ic_emoticon" />

android:id="@+id/emojicons_layout"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:visibility="gone">

剩下略提一下軟鍵盤和輸入框的切換

@OnClick({R.id.emojicons_icon, R.id.emojicons_edit})

void onClick(View view) {

switch (view.getId()){

case R.id.emojicons_icon://點擊表情圖標,如果表情顯示,隱藏表情,打開軟鍵盤。反之,顯示表情,隱藏鍵盤

if (emojiconsLayout.isShown()) {

hideEmotionView(true);

} else {

showEmotionView(SystemUtils.isKeyBoardShow(this));

}

break;

case R.id.emojicons_edit://點擊輸入框,打開軟鍵盤,隱藏表情

hideEmotionView(true);

break;

default:

break;

}

}

/**

* 隱藏emoji

**/

private void hideEmotionView(boolean showKeyBoard) {

if (emojiconsLayout.isShown()) {

if (showKeyBoard) {

LinearLayout.LayoutParams localLayoutParams = (LinearLayout.LayoutParams) emojiconsContainer.getLayoutParams();

localLayoutParams.height = emojiconsLayout.getTop();

localLayoutParams.weight = 0.0F;

emojiconsLayout.setVisibility(View.GONE);

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

SystemUtils.showKeyBoard(editEmojicon);

editEmojicon.postDelayed(new Runnable() {

@Override

public void run() {

unlockContainerHeightDelayed();

}

}, 200L);

} else {

emojiconsLayout.setVisibility(View.GONE);

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

unlockContainerHeightDelayed();

}

}

}

private void showEmotionView(boolean showAnimation) {

if (showAnimation) {

transitioner.setDuration(200);

} else {

transitioner.setDuration(0);

}

emotionHeight = SystemUtils.getKeyboardHeight(this);

SystemUtils.hideSoftInput(editEmojicon);

emojiconsLayout.getLayoutParams().height = emotionHeight;

emojiconsLayout.setVisibility(View.VISIBLE);

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

//在5.0有navigationbar的手機,高度高了一個statusBar

int lockHeight = SystemUtils.getAppContentHeight(this);

lockContainerHeight(lockHeight);

}

demo apk地址:

有bug或問題,歡迎探討,謝謝

轉載注明來源即可

總結

以上是生活随笔為你收集整理的android 调出键盘表情_Android 软键盘和emoji表情切换方案,和微信几乎一样的体验...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。