2016-01-20 2 views
2

Я работаю над андроидным чат-приложением. Я успешно реализовал основные функции этого. Теперь я добавил панель смайликов, используя библиотеку compile 'com.rockerhieu.emojicon: library: 1.3.3'. Я использую FrameLayout в моем XML-файле для отображения смайликов.Как сделать переход между клавиатурой emoji и мягкой клавиатурой

1. activity_chat.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FCAB26" 
    android:orientation="vertical" 
    android:weightSum="1"> 

    <ListView 
     android:id="@+id/list_view_messages" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight=".60" 
     android:background="@null" 
     android:divider="@null" 
     android:stackFromBottom="true" 
     android:transcriptMode="alwaysScroll"></ListView> 


    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" 
     android:layout_weight=".10" 
     android:orientation="horizontal" 
     android:weightSum="1"> 

     <ImageView 
      android:id="@+id/imgSmile" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight=".10" 
      android:src="@drawable/ic_msg_panel_smiles" 
      android:layout_gravity="center_vertical" 
      android:layout_marginRight="-10sp"/> 

     <com.rockerhieu.emojicon.EmojiconEditText 
      android:id="@+id/edtMessage" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      android:hint="Enter Message" 
      android:layout_weight=".60"></com.rockerhieu.emojicon.EmojiconEditText> 

     <Button 
      android:id="@+id/btnSendMessage" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      android:layout_weight=".30" 
      android:gravity="center" 
      android:onClick="onClick" 
      android:text="Send Message" /> 
    </LinearLayout> 

    <FrameLayout 
     android:id="@+id/emojicons" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight=".30" 
     android:visibility="gone" /> 

</LinearLayout> 

Здесь даже после указания видимости, как ушел, FrameLayout оккупирует некоторое пространство.

Код, который отображает панель смайликов через упомянутые выше библиотеки приведен ниже:

// This method will set a panel of emoticons in the fragment 
private void setEmojiconFragment(boolean useSystemDefault) { 
    // Replacing the existing fragment having id emojicons with the fragment of emoticons library containing emoticons 
    getSupportFragmentManager().beginTransaction().replace(R.id.emojicons, EmojiconsFragment.newInstance(useSystemDefault)).commit(); 
} 

3.Screenshot

enter image description here

Как и можно видеть на снимке экрана , у меня есть кнопка просмотра изображений, кнопка редактирования и отправки сообщения. При нажатии на изображение, отображается панель emoji и при нажатии кнопки editingxt enoji клавиатура скрыта и отображается мягкая клавиатура ed. Следующий код обрабатывает это.

Показаны смайлики окна:

public void showEmojiPopUp(boolean showEmoji) { 
    FrameLayout frameLayout = (FrameLayout) findViewById(R.id.emojicons); 
    frameLayout.setVisibility(View.VISIBLE); 
} 

скрытия softkeyboard:

public void hideKeyboard() { 
     InputMethodManager inputManager = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE); 
     inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
    } 

Моя проблема заключается в том, что я хочу, Emoji клавиатуры и экранную клавиатуру занимает равное место .А время, только один должен быть видимым. Я хочу сделать переход между клавиатурой emoji и мягкой клавиатурой. Как вы можете видеть в коде, я добавляю клавиатуру emoji в FrameLayout. Я не могу сделать размер мягкой клавиатуры и клавиатуры emoji здесь. Пожалуйста, помогите мне исправить проблему.

Edited Код: Я сделал некоторые изменения в моем коде:

shoEmojiPopUp() метод: Здесь мы регулировка высоты FrameLayout, содержащую панель смайликов, так что высота мягкой клавиатуры и клавиатура emoji такая же.

public void showEmojiPopUp(boolean showEmoji) { 
    Display display = getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    deviceHeight = size.y; 
    Log.e("Device Height", String.valueOf(deviceHeight)); 
    frameLayout = (FrameLayout) findViewById(R.id.emojicons); 
    frameLayout.getLayoutParams().height = (int) (deviceHeight/2.5); // Setting the height of FrameLayout 
    frameLayout.requestLayout(); 
    frameLayout.setVisibility(View.VISIBLE); 
    hideKeyboard(); 
} 

2. hideKryboard() метод

// Hiding the keyboard 
public void hideKeyboard() { 
    InputMethodManager inputManager = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE); 
    inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
} 

Это работает для меня.

+0

привет ... вы найти решение? У меня такая же проблема –

+0

thanx много .... –

+0

Скажите, пожалуйста, работает ли она для вас или нет. –

ответ

0

Я использую этот код, который я нашел здесь .... link

public Spannable parse(String text) { 
     CharSequence fromCache = cache.get(text); 
     if (fromCache != null) { 
      return (Spannable) fromCache; 
     } else { 
      CharSequence parsed = emoji.replaceEmoji(text); 
      Matcher matcher = userReference.matcher(text); 
      Spannable s; 
      if (parsed instanceof Spannable) { 
       s = (Spannable) parsed; 
      } else { 
       s = Spannable.Factory.getInstance().newSpannable(parsed); 
      } 

      while (matcher.find()) { 
       s.setSpan(new ForegroundColorSpan(0xff427ab0), matcher.start(), matcher.end(), 0); 
      } 
      cache.put(text, s); 

      return s; 
     } 
    } 
Смежные вопросы