Intereting Posts
Android Facebook .. как получить AccessToken Android – Можно ли получить доступ к сырым емкостным входным данным? Понимание мерыWithLargestChild: зачем ломает макет? Libz.so.1: невозможно открыть файл общих объектов Я не могу удалить розовый FloatingActionButton по умолчанию в активности навигационного ящика Android-анимация Alpha Настройка Drawable в качестве цвета текста вызывает исключение. Значение цвета должно начинаться с # Что означает верхнее, левое, правое и нижнее значение в объекте Android Rect Синхронизировать доступ к HashMap из двух потоков в java Где найти бесплатные открытые пользовательские элементы управления Android? Приложение не отображается в последних списках приложений Строка усекается, когда ее слишком длинная Как выравнивать два прядильника равномерно (% 50% 50) Получение ширины фрагмента 0 в onStart () Facebook Android SDK 4.5.0 получить адрес электронной почты

Ярлыки или пузыри 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