因为某些原因我需要一个Edittext,就像这张图片中的红色部分一样:
每当用户按下键盘上的删除按钮时,edittext将删除一个标记而不是一个字。 所以,我的问题是: 我们有这样的存在控制吗? 或者如果没有,你知道如何定制一个。 注意:我不需要100%相同。现在,我正在考虑使用TextWatcher或setKeyListener方法来删除功能。
非常感谢您的帮助。抱歉,因为我的英语不太好。
答案 0 :(得分:4)
我已将TokenAutoComplete on github放在一起供我们在Splitwise使用。我在Android SDK中找不到这样的东西,所以我自己做了。
我的控制行为与您的期望不符的唯一地方是,当您删除最近完成的令牌时,它会再次变为该单词。所有其他令牌都被完全删除。
这是一个基本的例子:
public class ContactsCompletionView extends TokenCompleteTextView {
public ContactsCompletionView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected View getViewForObject(Object object) {
Person p = (Person)object;
LayoutInflater l = (LayoutInflater)getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
LinearLayout view = (LinearLayout)l.inflate(R.layout.contact_token, (ViewGroup)ContactsCompletionView.this.getParent(), false);
((TextView)view.findViewById(R.id.name)).setText(p.getEmail());
return view;
}
@Override
protected Object defaultObject(String completionText) {
//Stupid simple example of guessing if we have an email or not
int index = completionText.indexOf('@');
if (index == -1) {
return new Person(completionText, completionText.replace(" ", "") + "@example.com");
} else {
return new Person(completionText.substring(0, index), completionText);
}
}
}
contact_token的布局代码(您可以在此处使用任何类型的布局,或者如果您想在令牌中使用图像,则可以将ImageView放入其中)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
<TextView android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/token_background"
android:padding="5dp"
android:textColor="@android:color/white"
android:textSize="18sp" />
</LinearLayout>
令牌背景可绘制
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#ffafafaf" />
<corners
android:topLeftRadius="5dp"
android:bottomLeftRadius="5dp"
android:topRightRadius="5dp"
android:bottomRightRadius="5dp" />
</shape>
人物对象代码
public class Person implements Serializable {
private String name;
private String email;
public Person(String n, String e) { name = n; email = e; }
public String getName() { return name; }
public String getEmail() { return email; }
@Override
public String toString() { return name; }
}
示例活动
public class TokenActivity extends Activity {
ContactsCompletionView completionView;
Person[] people;
ArrayAdapter<Person> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
people = new Person[]{
new Person("Marshall Weir", "marshall@example.com"),
new Person("Margaret Smith", "margaret@example.com"),
new Person("Max Jordan", "max@example.com"),
new Person("Meg Peterson", "meg@example.com"),
new Person("Amanda Johnson", "amanda@example.com"),
new Person("Terry Anderson", "terry@example.com")
};
adapter = new ArrayAdapter<Person>(this, android.R.layout.simple_list_item_1, people);
completionView = (ContactsCompletionView)findViewById(R.id.searchView);
completionView.setAdapter(adapter);
}
}
布局代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.tokenautocomplete.ContactsCompletionView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
答案 1 :(得分:1)
Android AOSP电子邮件客户端有类似于您似乎想做的事情。 它是开源的。
从this commit你看,谷歌称之为“筹码”,你称之为“徽章”。
您应该从上面的提交中找到有关实施此类芯片所需的所有信息,我想这是谷歌首次推出此类芯片(至少是邮件),或者the whole source of the AOSP email client:
将芯片集成到电子邮件中。
更改ID:Ice037a55a169037f725a667fad7714c7e9580b86