下面列出了怎么用android.text.method.QwertyKeyListener的API类实例代码及写法,或者点击链接到github查看源代码。
private void handleEdit(int start, int end) {
if (start == -1 || end == -1) {
// This chip no longer exists in the field.
dismissDropDown();
return;
}
// This is in the middle of a chip, so select out the whole chip
// and commit it.
Editable editable = getText();
setSelection(end);
String text = getText().toString().substring(start, end);
if (!TextUtils.isEmpty(text)) {
RecipientEntry entry = RecipientEntry.constructFakeEntry(text, isValid(text));
QwertyKeyListener.markAsReplaced(editable, start, end, "");
CharSequence chipText = createChip(entry, false);
int selEnd = getSelectionEnd();
if (chipText != null && start > -1 && selEnd > -1) {
editable.replace(start, selEnd, chipText);
}
}
dismissDropDown();
}
private void submitItem(RecipientEntry entry) {
if (entry == null) {
return;
}
clearComposingText();
int end = getSelectionEnd();
int start = mTokenizer.findTokenStart(getText(), end);
Editable editable = getText();
QwertyKeyListener.markAsReplaced(editable, start, end, "");
CharSequence chip = createChip(entry, false);
if (chip != null && start >= 0 && end >= 0) {
editable.replace(start, end, chip);
}
sanitizeBetween();
}
private void handleEdit(int start, int end) {
if (start == -1 || end == -1) {
// This chip no longer exists in the field.
dismissDropDown();
return;
}
// This is in the middle of a chip, so select out the whole chip
// and commit it.
Editable editable = getText();
setSelection(end);
String text = getText().toString().substring(start, end);
if (!TextUtils.isEmpty(text)) {
RecipientEntry entry = RecipientEntry.constructFakeEntry(text, isValid(text));
QwertyKeyListener.markAsReplaced(editable, start, end, "");
CharSequence chipText = createChip(entry, false);
int selEnd = getSelectionEnd();
if (chipText != null && start > -1 && selEnd > -1) {
editable.replace(start, selEnd, chipText);
}
}
dismissDropDown();
}
private void submitItem(RecipientEntry entry) {
if (entry == null) {
return;
}
clearComposingText();
int end = getSelectionEnd();
int start = mTokenizer.findTokenStart(getText(), end);
Editable editable = getText();
QwertyKeyListener.markAsReplaced(editable, start, end, "");
CharSequence chip = createChip(entry, false);
if (chip != null && start >= 0 && end >= 0) {
editable.replace(start, end, chip);
}
sanitizeBetween();
}
/**
* Remove selection from this chip. Unselecting a RecipientChip will render
* the chip without a delete icon and with an unfocused background. This is
* called when the RecipientChip no longer has focus.
*/
private void unselectChip(DrawableRecipientChip chip) {
int start = getChipStart(chip);
int end = getChipEnd(chip);
Editable editable = getText();
mSelectedChip = null;
if (start == -1 || end == -1) {
Log.w(TAG, "The chip doesn't exist or may be a chip a user was editing");
setSelection(editable.length());
commitDefault();
} else {
getSpannable().removeSpan(chip);
QwertyKeyListener.markAsReplaced(editable, start, end, "");
editable.removeSpan(chip);
try {
if (!mNoChips) {
editable.setSpan(constructChipSpan(chip.getEntry(), false, false),
start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
} catch (NullPointerException e) {
Log.e(TAG, e.getMessage(), e);
}
}
setCursorVisible(true);
setSelection(editable.length());
}
private void handleEdit(final int start,final int end)
{
if(start==-1||end==-1)
{
// This chip no longer exists in the field.
dismissDropDown();
return;
}
// This is in the middle of a chip, so select out the whole chip
// and commit it.
final Editable editable=getText();
setSelection(end);
final String text=getText().toString().substring(start,end);
if(!TextUtils.isEmpty(text))
{
final RecipientEntry entry=RecipientEntry.constructFakeEntry(text,isValid(text));
QwertyKeyListener.markAsReplaced(editable,start,end,"");
final CharSequence chipText=createChip(entry,false);
final int selEnd=getSelectionEnd();
if(chipText!=null&&start>-1&&selEnd>-1)
editable.replace(start,selEnd,chipText);
}
dismissDropDown();
}
private void submitItemAtPosition(final int position)
{
final RecipientEntry entry=createValidatedEntry(getAdapter().getItem(position));
if(entry==null)
return;
clearComposingText();
final int end=getSelectionEnd();
final int start=mTokenizer.findTokenStart(getText(),end);
final Editable editable=getText();
QwertyKeyListener.markAsReplaced(editable,start,end,"");
final CharSequence chip=createChip(entry,false);
if(chip!=null&&start>=0&&end>=0)
editable.replace(start,end,chip);
sanitizeBetween();
if(mChipListener!=null)
mChipListener.onDataChanged();
}
/**
* <p>Performs the text completion by replacing the range from
* {@link Tokenizer#findTokenStart} to {@link #getSelectionEnd} by the
* the result of passing <code>text</code> through
* {@link Tokenizer#terminateToken}.
* In addition, the replaced region will be marked as an AutoText
* substition so that if the user immediately presses DEL, the
* completion will be undone.
* Subclasses may override this method to do some different
* insertion of the content into the edit box.</p>
*
* @param text the selected suggestion in the drop down list
*/
@Override
protected void replaceText(CharSequence text) {
clearComposingText();
int end = getSelectionEnd();
int start = mTokenizer.findTokenStart(getText(), end);
Editable editable = getText();
String original = TextUtils.substring(editable, start, end);
QwertyKeyListener.markAsReplaced(editable, start, end, original);
editable.replace(start, end, mTokenizer.terminateToken(text));
}
private boolean commitChip(int start, int end, Editable editable) {
ListAdapter adapter = getAdapter();
if (adapter != null && adapter.getCount() > 0 && enoughToFilter()
&& end == getSelectionEnd() && !isPhoneQuery()) {
// choose the first entry.
submitItemAtPosition(0);
dismissDropDown();
return true;
} else {
int tokenEnd = mTokenizer.findTokenEnd(editable, start);
if (editable.length() > tokenEnd + 1) {
char charAt = editable.charAt(tokenEnd + 1);
if (charAt == COMMIT_CHAR_COMMA || charAt == COMMIT_CHAR_SEMICOLON) {
tokenEnd++;
}
}
String text = editable.toString().substring(start, tokenEnd).trim();
clearComposingText();
if (text != null && text.length() > 0 && !text.equals(" ")) {
RecipientEntry entry = createTokenizedEntry(text);
if (entry != null) {
QwertyKeyListener.markAsReplaced(editable, start, end, "");
CharSequence chipText = createChip(entry, false);
if (chipText != null && start > -1 && end > -1) {
editable.replace(start, end, chipText);
}
}
// Only dismiss the dropdown if it is related to the text we
// just committed.
// For paste, it may not be as there are possibly multiple
// tokens being added.
if (end == getSelectionEnd()) {
dismissDropDown();
}
sanitizeBetween();
return true;
}
}
return false;
}
/**
* Remove selection from this chip. Unselecting a RecipientChip will render
* the chip without a delete icon and with an unfocused background. This is
* called when the RecipientChip no longer has focus.
*/
private void unselectChip(DrawableRecipientChip chip) {
int start = getChipStart(chip);
int end = getChipEnd(chip);
Editable editable = getText();
mSelectedChip = null;
if (start == -1 || end == -1) {
Log.w(TAG, "The chip doesn't exist or may be a chip a user was editing");
setSelection(editable.length());
commitDefault();
} else {
getSpannable().removeSpan(chip);
QwertyKeyListener.markAsReplaced(editable, start, end, "");
editable.removeSpan(chip);
try {
if (!mNoChips) {
editable.setSpan(constructChipSpan(chip.getEntry(), false, false),
start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
} catch (NullPointerException e) {
Log.e(TAG, e.getMessage(), e);
}
}
setCursorVisible(true);
setSelection(editable.length());
if (mAlternatesPopup != null && mAlternatesPopup.isShowing()) {
mAlternatesPopup.dismiss();
}
}
private boolean commitChip(int start, int end, Editable editable) {
ListAdapter adapter = getAdapter();
if (adapter != null && adapter.getCount() > 0 && enoughToFilter()
&& end == getSelectionEnd() && !isPhoneQuery()) {
// choose the first entry.
submitItemAtPosition(0);
dismissDropDown();
return true;
} else {
int tokenEnd = mTokenizer.findTokenEnd(editable, start);
if (editable.length() > tokenEnd + 1) {
char charAt = editable.charAt(tokenEnd + 1);
if (charAt == COMMIT_CHAR_COMMA || charAt == COMMIT_CHAR_SEMICOLON) {
tokenEnd++;
}
}
String text = editable.toString().substring(start, tokenEnd).trim();
clearComposingText();
if (text != null && text.length() > 0 && !text.equals(" ")) {
RecipientEntry entry = createTokenizedEntry(text);
if (entry != null) {
QwertyKeyListener.markAsReplaced(editable, start, end, "");
CharSequence chipText = createChip(entry, false);
if (chipText != null && start > -1 && end > -1) {
editable.replace(start, end, chipText);
}
}
// Only dismiss the dropdown if it is related to the text we
// just committed.
// For paste, it may not be as there are possibly multiple
// tokens being added.
if (end == getSelectionEnd()) {
dismissDropDown();
}
sanitizeBetween();
return true;
}
}
return false;
}
/**
* Remove selection from this chip. Unselecting a RecipientChip will render the chip without a delete icon and with
* an unfocused background. This is called when the RecipientChip no longer has focus.
*/
private void unselectChip(final DrawableRecipientChip chip)
{
final int start=getChipStart(chip);
final int end=getChipEnd(chip);
final Editable editable=getText();
mSelectedChip=null;
if(start==-1||end==-1)
{
Log.w(TAG,"The chip doesn't exist or may be a chip a user was editing");
setSelection(editable.length());
commitDefault();
}
else
{
getSpannable().removeSpan(chip);
QwertyKeyListener.markAsReplaced(editable,start,end,"");
editable.removeSpan(chip);
try
{
if(!mNoChips)
editable.setSpan(constructChipSpan(chip.getEntry(),false,false),start,end,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
catch(final NullPointerException e)
{
Log.e(TAG,e.getMessage(),e);
}
}
setCursorVisible(true);
setSelection(editable.length());
if(mAlternatesPopup!=null&&mAlternatesPopup.isShowing())
mAlternatesPopup.dismiss();
}
@Override
protected void replaceText(CharSequence text) {
clearComposingText();
SpannableStringBuilder ssb = buildSpannableForText(text);
TokenImageSpan tokenSpan = buildSpanForObject(selectedObject);
Editable editable = getText();
int end = getSelectionEnd();
int start = tokenizer.findTokenStart(editable, end);
if (start < prefix.length()) {
start = prefix.length();
}
start = beforeReplacingText(editable,start,end);
String original = TextUtils.substring(editable, start, end);
if (editable != null) {
if (tokenSpan == null) {
editable.replace(start, end, " ");
} else if (!allowDuplicates && objects.contains(tokenSpan.getToken())) {
editable.replace(start, end, " ");
} else {
QwertyKeyListener.markAsReplaced(editable, start, end, original);
editable.replace(start, end, ssb);
editable.setSpan(tokenSpan, start, start + ssb.length() - 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
afterReplacingText(editable);
}
private boolean commitChip(final int start,final int end,final Editable editable)
{
final ListAdapter adapter=getAdapter();
if(adapter!=null&&adapter.getCount()>0&&enoughToFilter()&&end==getSelectionEnd()&&!isPhoneQuery())
{
// choose the first entry.
submitItemAtPosition(0);
dismissDropDown();
return true;
}
else
{
int tokenEnd=mTokenizer.findTokenEnd(editable,start);
if(editable.length()>tokenEnd+1)
{
final char charAt=editable.charAt(tokenEnd+1);
if(charAt==COMMIT_CHAR_COMMA||charAt==COMMIT_CHAR_SEMICOLON)
tokenEnd++;
}
final String text=editable.toString().substring(start,tokenEnd).trim();
clearComposingText();
if(text!=null&&text.length()>0&&!text.equals(" "))
{
final RecipientEntry entry=createTokenizedEntry(text);
if(entry!=null)
{
QwertyKeyListener.markAsReplaced(editable,start,end,"");
final CharSequence chipText=createChip(entry,false);
if(chipText!=null&&start>-1&&end>-1)
editable.replace(start,end,chipText);
}
// Only dismiss the dropdown if it is related to the text we
// just committed.
// For paste, it may not be as there are possibly multiple
// tokens being added.
if(end==getSelectionEnd())
dismissDropDown();
sanitizeBetween();
return true;
}
}
return false;
}