新增功能:字符统计

pull/20/head
white-yj8109 4 days ago
parent 2a37004d61
commit 823b590453

@ -35,6 +35,8 @@ import android.text.SpannableString;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.text.style.BackgroundColorSpan;
import android.text.TextWatcher;
import android.text.Editable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
@ -73,7 +75,7 @@ import java.util.regex.Pattern;
public class NoteEditActivity extends Activity implements OnClickListener,
NoteSettingChangedListener, OnTextViewChangeListener {
NoteSettingChangedListener, OnTextViewChangeListener,OnSelectionChangeListener {
private class HeadViewHolder {//头视图持有者类???
public TextView tvModified;//文本修改
@ -82,6 +84,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
public TextView tvAlertDate;//文本提醒日期?
public ImageView ibSetBgColor;//设置背景颜色图像视图
public TextView tvCharNum;//新增字符数显示控件
}
private static final Map<Integer, Integer> sBgSelectorBtnsMap = new HashMap<Integer, Integer>();//背景颜色选择按钮映射
@ -128,7 +131,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
private View mFontSizeSelector;
private EditText mNoteEditor;
private NoteEditText mNoteEditor;
private View mNoteEditorPanel;
@ -148,6 +151,28 @@ public class NoteEditActivity extends Activity implements OnClickListener,
private String mUserQuery;
private Pattern mPattern;
//新增字符统计方法,排除空白字符
//计算可见字符数,排除空白字符
private int calcVisibleCharCount(CharSequence s) {
if (s == null) return 0;
String filtered = s.toString().replaceAll("\\s+", "");
return filtered.length();
}
//根据选区更新字符统计显示
private void updateCharNumForSelection(CharSequence text, int selStart, int selEnd) {
if (text == null) {
mNoteHeaderHolder.tvCharNum.setText("字符数0");
return;
}
if (selStart == selEnd) {
mNoteHeaderHolder.tvCharNum.setText("字符数:" + calcVisibleCharCount(text));
} else {
int min = Math.min(selStart, selEnd);
int max = Math.max(selStart, selEnd);
CharSequence sub = text.subSequence(min, max);
mNoteHeaderHolder.tvCharNum.setText("字符数:" + calcVisibleCharCount(sub));
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {//创建活动时调用
@ -371,7 +396,28 @@ public class NoteEditActivity extends Activity implements OnClickListener,
mNoteHeaderHolder.tvAlertDate = (TextView) findViewById(R.id.tv_alert_date);
mNoteHeaderHolder.ibSetBgColor = (ImageView) findViewById(R.id.btn_set_bg_color);
mNoteHeaderHolder.ibSetBgColor.setOnClickListener(this);
mNoteEditor = (EditText) findViewById(R.id.note_edit_view);
mNoteHeaderHolder.tvCharNum=(TextView)findViewById(R.id.tv_char_num);//将tvCharNum绑定到TextView
mNoteEditor = (NoteEditText) findViewById(R.id.note_edit_view);
// 注册选区变化监听
mNoteEditor.setOnSelectionChangeListener(this);
//设置文本监听(统计时排除空白字符)
mNoteEditor.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
int displayCount = calcVisibleCharCount(s);
mNoteHeaderHolder.tvCharNum.setText("字符数:" + displayCount);
}
@Override
public void afterTextChanged(Editable s) {
}
});
mNoteHeaderHolder.tvCharNum.setText("字符数:" + calcVisibleCharCount(mNoteEditor.getText()));
mNoteEditorPanel = findViewById(R.id.sv_note_edit);
mNoteBgColorSelector = findViewById(R.id.note_bg_color_selector);
for (int id : sBgSelectorBtnsMap.keySet()) {
@ -704,7 +750,10 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
}
mEditTextList.addView(getListItem("", index));//添加一个空列表项
mEditTextList.getChildAt(index).findViewById(R.id.et_edit_text).requestFocus();//将焦点自动切换到新添加的空列表项的编辑框
View focused = mEditTextList.getChildAt(index);
focused.findViewById(R.id.et_edit_text).requestFocus();
// 更新字符统计,显示整条便签的字符数
mNoteHeaderHolder.tvCharNum.setText("字符数:" + calcVisibleCharCount(text));
mNoteEditor.setVisibility(View.GONE);//隐藏编辑框
mEditTextList.setVisibility(View.VISIBLE);
@ -753,10 +802,30 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
edit.setOnTextViewChangeListener(this);
//新增选区变化回调接口设置
edit.setOnSelectionChangeListener(this);
edit.setIndex(index);
edit.setText(getHighlightQueryResult(item, mUserQuery));
return view;
}
//新增选区变化回调接口实现
@Override
public void onSelectionChanged(int index, int selStart, int selEnd) {
if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) {
//列表模式下的选区变化事件
if (index >= 0 && index < mEditTextList.getChildCount()) {
//如果索引在范围内
View view = mEditTextList.getChildAt(index);
NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text);
updateCharNumForSelection(edit.getText(), selStart, selEnd);
}
} else {
if (mNoteEditor != null && mNoteEditor.isFocused()) {
updateCharNumForSelection(mNoteEditor.getText(), selStart, selEnd);
}
}
}
public void onTextChange(int index, boolean hasText) {// 列表项文本变化事件
if (index >= mEditTextList.getChildCount()) {//检查索引是否超出范围
@ -781,6 +850,8 @@ public class NoteEditActivity extends Activity implements OnClickListener,
mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery));
mEditTextList.setVisibility(View.GONE);
mNoteEditor.setVisibility(View.VISIBLE);
// 更新字符统计为整条便签字符数
mNoteHeaderHolder.tvCharNum.setText("字符数:" + calcVisibleCharCount(mWorkingNote.getContent()));
}
}

@ -86,6 +86,8 @@ public class NoteEditText extends EditText {
}
private OnTextViewChangeListener mOnTextViewChangeListener; // 文本变化监听器实例
//新增选区变化回调接口
private OnSelectionChangeListener mOnSelectionChangeListener;
/**
* NoteEditText
@ -111,6 +113,10 @@ public class NoteEditText extends EditText {
public void setOnTextViewChangeListener(OnTextViewChangeListener listener) {
mOnTextViewChangeListener = listener;
}
//新增选区变化回调接口设置方法
public void setOnSelectionChangeListener(OnSelectionChangeListener listener) {
mOnSelectionChangeListener = listener;
}
/**
* XMLNoteEditText
@ -285,4 +291,19 @@ public class NoteEditText extends EditText {
}
super.onCreateContextMenu(menu);
}
//新增选区变化回调接口实现
@Override
protected void onSelectionChanged(int selStart, int selEnd) {
super.onSelectionChanged(selStart, selEnd);
if (mOnSelectionChangeListener != null) {
mOnSelectionChangeListener.onSelectionChanged(mIndex, selStart, selEnd);
}
}
}
// 新增选区变化回调接口
interface OnSelectionChangeListener {
void onSelectionChanged(int index, int selStart, int selEnd);
}
Loading…
Cancel
Save