Android 寻呼机内部服务

Android 寻呼机内部服务,android,android-viewpager,android-input-method,Android,Android Viewpager,Android Input Method,我正在安卓系统中创建一个自定义键盘。该键盘中还将包含自定义表情。我为我想要的每个页面的所有表情符号创建了单独的XML,现在我想在用户单击“微笑”按钮时在弹出窗口中放大它们。 现在,我正在将xml直接膨胀到弹出窗口中。它包含的图像都是png格式的。现在,如果用户点击任何图像,它应该在用户输入的编辑文本中输入。 如何在编辑文本中设置单击的图像 这是我的键盘服务类代码 public class SimpleIME extends InputMethodService implements Ke

我正在安卓系统中创建一个自定义键盘。该键盘中还将包含自定义表情。我为我想要的每个页面的所有表情符号创建了单独的XML,现在我想在用户单击“微笑”按钮时在弹出窗口中放大它们。 现在,我正在将xml直接膨胀到弹出窗口中。它包含的图像都是png格式的。现在,如果用户点击任何图像,它应该在用户输入的编辑文本中输入。 如何在编辑文本中设置单击的图像

这是我的键盘服务类代码

public class SimpleIME extends InputMethodService
    implements KeyboardView.OnKeyboardActionListener,EmoticonsGridAdapter.KeyClickListener {

private KeyboardView kv;
private Keyboard keyboard;
private View popUpView;
private boolean caps = false;
LayoutInflater inflater;
private PopupWindow popupWindow;
private int keyboardHeight=500;
private static final int NO_OF_EMOTICONS = 100;
private Bitmap[] emoticons;
Button abc;
Context context;
@Override
public View onCreateInputView() {
    kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null);
    keyboard = new Keyboard(this, R.xml.qwerty);
    kv.setKeyboard(keyboard);
    kv.setOnKeyboardActionListener(this);
    kv.invalidateAllKeys();
    context=this;
    inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    popUpView = inflater.inflate(R.layout.emoticons_popup, null);
    abc= (Button) popUpView.findViewById(R.id.btn_abc);
    abc.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popupWindow.dismiss();
        }
    });
    return kv;
}

@Override
public void onKey(int primaryCode, int[] keyCodes) {
    InputConnection ic = getCurrentInputConnection();
    playClick(primaryCode);
    switch(primaryCode){
        case Keyboard.KEYCODE_DELETE :
            ic.deleteSurroundingText(1, 0);

            break;
        case Keyboard.KEYCODE_SHIFT:
            caps = !caps;
            keyboard.setShifted(caps);
            kv.invalidateAllKeys();
            break;
        case Keyboard.KEYCODE_DONE:
            ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
            break;
        case -10 :
            //View view = inflater.inflate( R.layout.emoticons_popup, null );
           enablePopUpView();
            Log.d("smiley", "smiley pressed");
            Toast.makeText(this, "Smiley", Toast.LENGTH_LONG).show();
            break;
        default:
            char code = (char)primaryCode;
            if(Character.isLetter(code) && caps){
                code = Character.toUpperCase(code);
            }
            ic.commitText(String.valueOf(code), 1);
    }
}

private void playClick(int keyCode){
    AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE);
    switch(keyCode){
        case 32:
            am.playSoundEffect(AudioManager.FX_KEYPRESS_SPACEBAR);
            break;
        case Keyboard.KEYCODE_DONE:
        case 10:
            am.playSoundEffect(AudioManager.FX_KEYPRESS_RETURN);
            break;
        case Keyboard.KEYCODE_DELETE:
            am.playSoundEffect(AudioManager.FX_KEYPRESS_DELETE);
            break;
        default: am.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD);
    }
}


@Override
public void onPress(int primaryCode) {
}

@Override
public void onRelease(int primaryCode) {
}

@Override
public void onText(CharSequence text) {
}

@Override
public void swipeDown() {
}

@Override
public void swipeLeft() {
}

@Override
public void swipeRight() {
}

@Override
public void swipeUp() {
}
private void enablePopUpView() {

    ViewPager pager = (ViewPager) popUpView.findViewById(R.id.map_pager);
    pager.setOffscreenPageLimit(3);
    pager.setBackgroundColor(Color.WHITE);
    ArrayList<String> paths = new ArrayList<String>();
    ArrayList<String>country=new ArrayList<>();
    String[] countr=context.getResources().getStringArray(R.array.countries);
    for(int i=0;i<countr.length;i++)
    {
        country.add(countr[i]);
    }
    for (short i = 1; i < NO_OF_EMOTICONS; i++) {
        paths.add(i + ".png");

    }



    // Creating a pop window for emoticons keyboard
    popupWindow = new PopupWindow(popUpView, ViewGroup.LayoutParams.MATCH_PARENT,
            (int) keyboardHeight, false);
    popupWindow.showAtLocation(kv, Gravity.VERTICAL_GRAVITY_MASK, 0, 0);
    /*TextView backSpace = (TextView) popUpView.findViewById(R.id.back);
    backSpace.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            KeyEvent event = new KeyEvent(0, 0, 0, KeyEvent.KEYCODE_DEL, 0, 0, 0, 0, KeyEvent.KEYCODE_ENDCALL);
            content.dispatchKeyEvent(event);
        }
    });*/

    popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {

        @Override
        public void onDismiss() {
           // emoticonsCover.setVisibility(LinearLayout.GONE);
        }
    });
}


@Override
public void keyClickedIndex(String index) {

}
/**
 * Reading all emoticons in local cache
 */
公共类simpleme扩展了InputMethodService
实现KeyboardView.OnKeyboardActionListener、EmoticonsGridAdapter.KeyClickListener{
私人键盘视图;
专用键盘;
私有视图弹出视图;
私有布尔大写=false;
充气机;
私人PopupWindow PopupWindow;
专用int键盘高度=500;
私有静态最终整型,不包含表情符号=100;
私人位图[]表情符号;
按钮abc;
语境;
@凌驾
公共视图onCreateInputView(){
kv=(KeyboardView)GetLayoutFlater().充气(R.layout.keyboard,null);
键盘=新键盘(this,R.xml.qwerty);
kv.设置键盘(键盘);
kv.setOnKeyboardActionListener(本);
kv.无效的alkeys();
上下文=这个;
充气器=(LayoutFlater)this.getSystemService(Context.LAYOUT\u充气器\u服务);
popUpView=充气器。充气(R.layout.emoticons\u弹出,空);
abc=(按钮)popUpView.findviewbyd(R.id.btn_abc);
abc.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
popupWindow.disclose();
}
});
返回千伏;
}
@凌驾
public void onKey(int primaryCode,int[]keyCodes){
InputConnection ic=getCurrentInputConnection();
播放点击(主代码);
开关(主代码){
case KEYBORD.KEYCODE_删除:
ic.deleteSurroundingText(1,0);
打破
case Keyboard.KEYCODE\u SHIFT:
caps=!caps;
键盘。设置移位(大写);
kv.无效的alkeys();
打破
case KEYBORD.KEYCODE_完成:
ic.sendKeyEvent(新的KeyEvent(KeyEvent.ACTION\u DOWN,KeyEvent.KEYCODE\u ENTER));
打破
案例-10:
//视图=充气机。充气(R.layout.emoticons\u弹出窗口,空);
enablePopUpView();
Log.d(“笑脸”,“笑脸按下”);
Toast.makeText(这是“Smiley”,Toast.LENGTH_LONG).show();
打破
违约:
char code=(char)primaryCode;
if(字符编号(代码)和大写){
代码=字符.toUpperCase(代码);
}
ic.commitText(字符串.valueOf(代码),1);
}
}
私有void playClick(int-keyCode){
AudioManager am=(AudioManager)getSystemService(音频服务);
开关(钥匙代码){
案例32:
am.playSoundEffect(AudioManager.FX\u按键\u空格键);
打破
case KEYBORD.KEYCODE_完成:
案例10:
am.playSoundEffect(AudioManager.FX\u按键返回);
打破
case KEYBORD.KEYCODE_删除:
am.playSoundEffect(AudioManager.FX\u KEYPRESS\u DELETE);
打破
默认值:am.playSoundEffect(AudioManager.FX\u按键\u标准);
}
}
@凌驾
公共无效onPress(int primaryCode){
}
@凌驾
发布时的公共无效(int primaryCode){
}
@凌驾
公共void onText(字符序列文本){
}
@凌驾
公共无效swipeDown(){
}
@凌驾
公共无效swipeLeft(){
}
@凌驾
公共无效swipeRight(){
}
@凌驾
公共无效swipeUp(){
}
私有void enablePopUpView(){
ViewPager pager=(ViewPager)popUpView.findViewById(R.id.map\u pager);
pager.setOffscreenPageLimit(3);
寻呼机.背景色(颜色.白色);
ArrayList路径=新的ArrayList();
ArrayListcountry=新的ArrayList();
String[]countr=context.getResources().getStringArray(R.array.countries);

对于(int i=0;如果是,您是否找到了解决方案,请指导我,我有相同的问题,谢谢您,我提前:)@MiteshJobanputra不,我没有找到任何解决方案,我不得不关闭该项目,因为无法实现。谢谢您的回复:)如何实现水平滚动自定义键盘。plz帮助您找到解决方案了吗如果是,请指导我,我也有同样的问题,谢谢我提前:)@MiteshJobanputra不,我没有找到任何解决方案关于这一点,我不得不关闭该项目,因为无法实现。谢谢您的回复:)如何实现水平滚动自定义键盘。plz帮助