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