edittext的左右的复制箭头不见了,求解

weixin_37221701 2017-01-10 08:44:39
onLongclick返回ture:

onLongclick返回false:

自定义的editext:
package com.example.a28125.imemo;

import android.app.Fragment;
import android.app.FragmentManager;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.text.Editable;
import android.text.Layout;
import android.text.Selection;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.ClickableSpan;
import android.text.style.ImageSpan;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.EventLog;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;

import java.io.ByteArrayOutputStream;
import java.util.UUID;

/**
* Created by 曹华 on 2016/11/28.
*/

public class myEditText extends EditText {
SharedPreferences spf;
private Context mCurrentContext;
FragmentManager mFragmentManeger;
FragmentEditMemo fragmentEditMemo;
mymemo mCurrentMemo;
boolean selctionMode=false;


public void setPre(FragmentEditMemo fragmentEditMemo,mymemo m,FragmentManager f,Context context) {
mCurrentMemo=m;
mCurrentContext=context;
mFragmentManeger=f;
this.fragmentEditMemo = fragmentEditMemo;
}
public myEditText(Context context,mymemo m,FragmentManager f) {
super(context,null);
mCurrentMemo=m;
mCurrentContext=context;
mFragmentManeger=f;
spf=mCurrentContext
.getSharedPreferences(ActivityMain.SaveFileName, Context.MODE_PRIVATE);


}
//构造函数
public myEditText(Context context,AttributeSet attrs) {
// 这里构造方法也很重要,不加这个很多属性不能再XML里面定义
this(context, attrs, android.R.attr.editTextStyle);
mCurrentContext=context;
}
//构造函数
public myEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mCurrentContext=context;
}


public FragmentManager getmFragmentManeger() {
return mFragmentManeger;
}

public void setmFragmentManeger(FragmentManager mFragmentManeger) {
this.mFragmentManeger = mFragmentManeger;
}
// @Override
// protected void onCreateContextMenu(ContextMenu menu) {
// // super.onCreateContextMenu(menu);
// // showPopupWindow(this);
// selctionMode=true;
// Log.d(ActivityMain.TAG,"test87");
// //不做任何处理,为了阻止长按的时候弹出上下文菜单
// }

/////////拒绝复制,粘贴窗口弹出
@Override
public boolean getDefaultEditable() {
// super.getDefaultEditable();
return false;
}


//////防止位置被一直为0
int moff=0;
int mline = 0;
boolean isMove=false;
// int curOff=0;
// long mStartTime;
@Override
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
requestFocusFromTouch();
Layout layout = getLayout();
int action=event.getAction();
if (action == MotionEvent.ACTION_UP ||
action == MotionEvent.ACTION_DOWN) {
int x = (int) event.getX();
int y = (int) event.getY();

x -= this.getTotalPaddingLeft();
y -= this.getTotalPaddingTop();

x += getScrollX();
y += getScrollY();


int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
SpannableStringBuilder buffer = (SpannableStringBuilder) this.getText();
ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);

if (link.length != 0) {
if (action == MotionEvent.ACTION_UP) {
link[0].onClick(this);
} else if (action == MotionEvent.ACTION_DOWN) {
Selection.setSelection(buffer,
buffer.getSpanStart(link[0]),
buffer.getSpanEnd(link[0]));
}

return true;
} else {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
mline = layout.getLineForVertical(getScrollY()+ (int)event.getY());
moff = layout.getOffsetForHorizontal(mline, (int)event.getX());
Selection.setSelection(getEditableText(), moff);
break;
case MotionEvent.ACTION_UP:
if(isMove)
{
isMove=false;
// showPopupWindow(this,event);
}
selctionMode=false;
break;
}}

}else
{
if(!selctionMode){
return true;}
mline = layout.getLineForVertical(getScrollY()+(int)event.getY());
int curOff = layout.getOffsetForHorizontal(mline, (int)event.getX());
Selection.setSelection(getEditableText(), moff, curOff);
isMove=true;

}
return true;}



}


外部操作:
myEditText1.setOnLongClickListener(new View.OnLongClickListener()
{

@Override
public boolean onLongClick(View v)
{

myEditText1.selctionMode=true;
Log.d(ActivityMain.TAG,"long");
return true;
}
});
经发现是重写了onLongClick()返回了true的缘故,但现在怎么重新设置选择的文本的两段的复制箭头呢?
除了将onLongClick()返回了tfalse还有其他办法吗?
...全文
192 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_37221701 2017-01-10
  • 打赏
  • 举报
回复
经发现是重写了onLongClick()返回了true的缘故,但现在怎么重新设置选择的文本的两段的复制箭头呢? 除了将onLongClick()返回了tfalse还有其他办法吗?

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧