package sj.keyboard.widget; import android.app.Activity; import android.content.Context; import android.util.AttributeSet; import android.util.SparseArray; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.LinearLayout; import java.util.ArrayList; import java.util.List; import sj.keyboard.utils.EmoticonsKeyboardUtils; public class FuncLayout extends LinearLayout { public final int DEF_KEY = Integer.MIN_VALUE; private final SparseArray<View> mFuncViewArrayMap = new SparseArray<>(); private int mCurrentFuncKey = DEF_KEY; protected int mHeight = 0; public FuncLayout(Context context, AttributeSet attrs) { super(context, attrs); setOrientation(VERTICAL); } public void addFuncView(int key, View view) { if (mFuncViewArrayMap.get(key) != null) { return; } mFuncViewArrayMap.put(key, view); ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); addView(view, params); view.setVisibility(GONE); } public void hideAllFuncView() { for (int i = 0; i < mFuncViewArrayMap.size(); i++) { int keyTemp = mFuncViewArrayMap.keyAt(i); mFuncViewArrayMap.get(keyTemp).setVisibility(GONE); } mCurrentFuncKey = DEF_KEY; setVisibility(false); } public void toggleFuncView(int key, boolean isSoftKeyboardPop, EditText editText) { if (getCurrentFuncKey() == key) { if (isSoftKeyboardPop) { if(EmoticonsKeyboardUtils.isFullScreen((Activity) getContext())){ EmoticonsKeyboardUtils.closeSoftKeyboard(editText); } else { EmoticonsKeyboardUtils.closeSoftKeyboard(getContext()); } } else { EmoticonsKeyboardUtils.openSoftKeyboard(editText); } } else { if (isSoftKeyboardPop) { if(EmoticonsKeyboardUtils.isFullScreen((Activity) getContext())){ EmoticonsKeyboardUtils.closeSoftKeyboard(editText); } else { EmoticonsKeyboardUtils.closeSoftKeyboard(getContext()); } } showFuncView(key); } } public void showFuncView(int key) { if (mFuncViewArrayMap.get(key) == null) { return; } for (int i = 0; i < mFuncViewArrayMap.size(); i++) { int keyTemp = mFuncViewArrayMap.keyAt(i); if (keyTemp == key) { mFuncViewArrayMap.get(keyTemp).setVisibility(VISIBLE); } else { mFuncViewArrayMap.get(keyTemp).setVisibility(GONE); } } mCurrentFuncKey = key; setVisibility(true); if (onFuncChangeListener != null) { onFuncChangeListener.onFuncChange(mCurrentFuncKey); } } public int getCurrentFuncKey() { return mCurrentFuncKey; } public void updateHeight(int height) { this.mHeight = height; } public void setVisibility(boolean b) { LayoutParams params = (LayoutParams) getLayoutParams(); if (b) { setVisibility(VISIBLE); params.height = mHeight; if (mListenerList != null) { for (OnFuncKeyBoardListener l : mListenerList) { l.OnFuncPop(mHeight); } } } else { setVisibility(GONE); params.height = 0; if (mListenerList != null) { for (OnFuncKeyBoardListener l : mListenerList) { l.OnFuncClose(); } } } setLayoutParams(params); } public boolean isOnlyShowSoftKeyboard() { return mCurrentFuncKey == DEF_KEY; } private List<OnFuncKeyBoardListener> mListenerList; public void addOnKeyBoardListener(OnFuncKeyBoardListener l) { if (mListenerList == null) { mListenerList = new ArrayList<>(); } mListenerList.add(l); } public interface OnFuncKeyBoardListener { /** * 功能布局弹起 */ void OnFuncPop(int height); /** * 功能布局关闭 */ void OnFuncClose(); } private OnFuncChangeListener onFuncChangeListener; public interface OnFuncChangeListener { void onFuncChange(int key); } public void setOnFuncChangeListener(OnFuncChangeListener listener) { this.onFuncChangeListener = listener; } }