android 长按文字弹出窗口 style,popupwindow中的Edittext长按不出现输入法选择框

参考资料:

1.popupwindow中的Edittext长按不出现输入法选择框

http://www.eoeandroid.com/thread-93841-1-1.html

2. Edittext不能复制和粘贴

http://www.eoeandroid.com/thread-283339-1-1.html

3. EditText 长按弹出的上下文菜单

http://www.apkbus.com/android-32266-1-1.html

4. Android 之 下拉框(Spinner)的使用

http://imshare.iteye.com/blog/770950

5.Android的EditText长按只显示上面的复制粘贴菜单,不要弹出下面的输入法键盘怎么做?

http://zhidao.baidu.com/link?url=jdTB-CGbGDRZ3-acjhwDdSXjX4NoJkhbpjej7_EMlOkz8nQS4Z2y34SLYQfUPudg9RzbRwAZiCUtClpFAUNPPRd3LI_NBH-8GcyTUa3KU9_

6.长按EditText后弹出的编辑文本有关问题

http://www.myexception.cn/android/347197.html

7. android UI进阶之弹窗的使用(2)--实现通讯录的弹窗效果

http://blog.csdn.net/notice520/article/details/6691246

8. Spinner 取消默认选中

http://jiangsy1107.blog.sohu.com/174405573.html

9. Spinner如何取消默认选择

http://www.eoeandroid.com/thread-40548-1-1.html

10. Android 动态添加/删除的Spinner菜单

http://android.tgbus.com/Android/tutorial/201105/352290.shtml

11. How to hide one item in an Android Spinner

http://stackoverflow.com/questions/9863378/how-to-hide-one-item-in-an-android-spinner

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

将语句1改为语句2即可!如下

语句1:context = getActivity().getApplicationContext();

语句2:context = getActivity();

参考链接:

http://blog.csdn.net/wsz1z154/article/details/7724912

以下代码用于在PopupWindow中实现长按EditText弹出spinner列表final String[] options={"全选","剪切","复制","粘帖"};

final Spinner spinner = (Spinner) view.findViewById(R.id.spinner);

ArrayAdapter adapter = new ArrayAdapter(context,android.R.layout.simple_spinner_item,options);

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner.setAdapter(adapter);

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

@Override

public void onItemSelected(AdapterView> parent, View view, int position, long id) {

ToastUtil.show("you select >> " + options[position]);

}

@Override

public void onNothingSelected(AdapterView> parent) {

}

});

popWin.setTouchInterceptor(new View.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

editText.setOnLongClickListener(new OnLongClickListener() {

public boolean onLongClick(View v) {

Logger.v(TAG, "editText long click");

// InputMethodManager imm = (InputMethodManager) context

// .getSystemService(Context.INPUT_METHOD_SERVICE);

// imm.showInputMethodPicker();

spinner.performClick();

return false;

}

});

return false;

}

});

使用反射机制调用系统类的私有方法try {

Class cls = EditText.class;

Method setSoftInputShownOnFocus = cls.getMethod("setShowSoftInputOnFocus", boolean.class);

setSoftInputShownOnFocus.setAccessible(true);

setSoftInputShownOnFocus.invoke(editText, false);

} catch (Exception e) {

e.printStackTrace();

}

spinner弹出下拉列表后就不能在adapter中添加选项否则出现异常

1.java.lang.NoSuchMethodError: android.widget.ArrayAdapter.addAll

2.java.lang.UnsupportedOperationException

动态构造长按文本框弹出的选项private List getOptionList(EditText editText) {

List optionList = new ArrayList();

boolean select = false;

boolean cut = false;

boolean copy = false;

boolean paste = false;

boolean inputmethod = true;

ClipboardManager clipBoard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);

int start = editText.getSelectionStart();

int end = editText.getSelectionEnd();

cut = copy = (start != end);

paste = clipBoard.hasText();

select = (!editText.getText().toString().isEmpty());

optionList.add("");

if (select) {

optionList.add("全选");

}

if (cut) {

optionList.add("剪切");

}

if (copy) {

optionList.add("复制");

}

if (paste) {

optionList.add("粘帖");

}

if (inputmethod) {

optionList.add("输入法");

}

return optionList;

}

private String[] getOptions(EditText editText) {

List optionList = getOptionList(editText);

String[] options = new String[optionList.size()];

for (int i = 0; i < options.length; i++) {

options[i] = optionList.get(i);

}

return options;

}

自定义ArrayAdapter隐藏某个选项public class CustomAdapter extends ArrayAdapter {

private int hidingItemIndex;

public CustomAdapter(Context context, int textViewResourceId, String[] objects, int hidingItemIndex) {

super(context, textViewResourceId, objects);

this.hidingItemIndex = hidingItemIndex;

}

@Override

public View getDropDownView(int position, View convertView, ViewGroup parent) {

View v = null;

if (position == hidingItemIndex) {

TextView tv = new TextView(getContext());

tv.setVisibility(View.GONE);

v = tv;

} else {

v = super.getDropDownView(position, null, parent);

}

return v;

}

}

private ArrayAdapter getSpinnerAdapter(EditText editText) {

String[] options = getOptions(editText);

int hidingItemIndex = 0;

CustomAdapter dataAdapter = new CustomAdapter(context, android.R.layout.simple_spinner_item, options, hidingItemIndex);

dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

return dataAdapter;

}

长按文本框弹出spinner下拉列表final EditText editText = (EditText) view.findViewById(R.id.comment_et);

editText.setText(textView.getText());

final Spinner spinner = (Spinner) view.findViewById(R.id.spinner);

spinner.setPrompt("编辑文字");

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

@Override

public void onItemSelected(AdapterView> parent, View view, int position, long id) {

String text = spinner.getAdapter().getItem(position).toString();

if(!text.equals("")) {

ToastUtil.show(text);

}

}

@Override

public void onNothingSelected(AdapterView> parent) {

}

});

editText.setOnLongClickListener(new OnLongClickListener() {

public boolean onLongClick(View v) {

Logger.v(TAG, "editText long click");

spinner.setAdapter(getSpinnerAdapter(editText));

spinner.performClick();

return false;

}

});

PopupWindow中的EditText不支持文字编辑操作:选择文字、全选、剪切、复制、粘帖。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值