Intereting Posts
Как у меня есть тень на моем ActionBar (ActionBarSherlock)? Странно: НЕОПРЕДЕЛЕННОЕ ТОП-УРОВЕННОЕ ИСКЛЮЧЕНИЕ: Выполнение не выполнено для приложения задачи: dexDebug Отправка и получение сообщений с помощью Smack Api для Android В чем смысл PicturePileLayerContent (…): Предупреждение: картина PicturePile без содержимого RoadManager для ошибки osmdroid Трансляция при добавлении / изменении контакта? Как реализовать кнопку Android ActionBar назад? Скопировать текст из TextView на Android Каково местоположение базы данных по умолчанию для приложения Android для некорневого устройства? Это то же самое, что и для корней? Nexus 4 Формат предварительного просмотра камеры Соотношение всегда требует 16×9 поверхности? Зачем Как читать атрибут пользовательского измерения из java-кода При запутывании с помощью ProGuard, -keepattribтрибуты SourceFile, LineNumberTable делают результирующий apk проще для обратной инженерии? Как приостановить и возобновить запись звука в android Как преобразовать символы индикатора в Unicode экранированные символы Блокировка ориентации экрана

Ярлыки или пузыри Android в EditText

Введите описание изображения здесь Может ли кто-нибудь указать мне в правильном направлении, как делать эти пузыри или метки в EditText, что-то вроде тех, которые вы видите, когда хотите что-то создать в Stream для Google+, когда вы добавляете круг или контакт? Прямоугольник – это автоматический полный текст.

Solutions Collecting From Web of "Ярлыки или пузыри Android в EditText"

То, что вы показываете, такое же поведение, что и приложение для акций SMS. Найдите здесь код, чтобы узнать, как это делается.

РЕДАКТИРОВАТЬ:

Код должен быть в platform_packages_apps_mms . Взгляните на класс RecipientsEditor .

Я создал TokenAutoComplete на github, чтобы решить подобную проблему, и она тоже будет работать для вас. Вот базовая реализация демонстрационного приложения:

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> 

Токеновый backgound drawable

 <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> 

Вы можете сделать это, создав подкласс android.text.style.DynamicDrawableSpan . ImageSpan – пример этого: он заменяет диапазон (диапазон) текста изображением.

Этот пример помещает звездочку в поле редактирования, заменяя текст «test». Создайте EditText в своем макете с идентификатором «text» и поместите его в onCreate() (или где угодно):

  EditText mText = (EditText) findViewById(R.id.text); final Editable e = mText.getEditableText(); final SpannableStringBuilder sb = new SpannableStringBuilder(); sb.append("test"); sb.setSpan(new ImageSpan(this, android.R.drawable.btn_star), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); e.append(sb); 

Я не видел классов, которые выглядели так, будто они могли бы обернуть нормальный текст в drawable, но это можно было бы легко решить, переопределив метод getDrawable() и само визуализируя текст.

Я решил это ЗДЕСЬ Контакт Bubble EditText

 final SpannableStringBuilder sb = new SpannableStringBuilder(); TextView tv = createContactTextView(contactName); BitmapDrawable bd = (BitmapDrawable) convertViewToDrawable(tv); bd.setBounds(0, 0, bd.getIntrinsicWidth(),bd.getIntrinsicHeight()); sb.append(contactName + ","); sb.setSpan(new ImageSpan(bd), sb.length()-(contactName.length()+1),sb.length()-1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); to_input.setText(sb); public static Object convertViewToDrawable(View view) { int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); view.measure(spec, spec); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); Bitmap b = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b); c.translate(-view.getScrollX(), -view.getScrollY()); view.draw(c); view.setDrawingCacheEnabled(true); Bitmap cacheBmp = view.getDrawingCache(); Bitmap viewBmp = cacheBmp.copy(Bitmap.Config.ARGB_8888, true); view.destroyDrawingCache(); return new BitmapDrawable(viewBmp); } public TextView createContactTextView(String text){ //creating textview dynamically TextView tv = new TextView(this); tv.setText(text); tv.setTextSize(20); tv.setBackgroundResource(R.drawable.oval); tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_clear_search_api_holo_light, 0); return tv; } 

Если вы имеете в виду подсказки, вы можете добавить просто:

 android:hint="@string/myHint" 

Это поместит серое ярлык в EditText, когда оно пустое.

Чтобы установить значок круга в левой части EditText вы можете изменить leftDrawable .

Вы можете сделать это на XML-файле макета xroid android:drawableRight="@drawable/search_icon" или программно, используя функцию setCompoundDrawablesWithIntrinsicBounds .

Если вы также хотите дать стиль пузыря, вы должны изменить обратную линию, которую можно извлечь с помощью 9 патчей, которые имеют стиль. Здесь у вас есть учебник для 9-патч-пузырь для карт Google.

Надеюсь, это помогло! 🙂

Я думаю, что он использует метод setCompoundDrawables () для вставки этого изображения внутри текста редактирования

Я решил что-то вернуть сообществу и создал библиотеку, цель которой – решить эту проблему. Библиотека вместе с примером проекта доступна для GitHub: https://github.com/RafalManka/BubbleEditText