2013-09-01 10 views
5

Mam dużo problemów z dodaniem Bubblesów do pola jak w Gmailu lub Facebooku. Proszę spojrzeć na to zdjęcie poniżej .. enter image description hereJak poprawnie dodawać i usuwać bąbelki kontaktu w multiautocompletetextview z kosmicznym tokenizerem, np. Z Gmaila do pola w Androidzie

Więc dla realizacji powyższego obrazka Zrobiłem trochę pracy przy użyciu tego kodu sample project dali do wdrożenia, ale muszę podzielić każdy Bubbles z przestrzeni, która oznacza, że ​​używany kosmiczny tokenizer. to działa dobrze, ale mój problem polega na tym, że ciągle dodaję kontakty w polu do, ogólnie w Gmailu do pola przesuwa się i lista list kontaktów jest wyświetlana całkowicie. ale w moim przypadku listview nie wyświetla się po dodaniu max kontaktów, a jeśli dodaję dużą długość nazwy kontaktów automatycznie, dodaje ona wiele Bubblesów dla tej nazwy. i jeszcze jeden problem jest w wersji 2.2 na telefon komórkowy, nie jestem w stanie zobaczyć kursora pomiędzy lub po kontakcie Bubble. Ręcznie muszę kliknąć kontakt Bubbles. Znalazłem wiadomości z tego link , ale nie jestem w stanie zaimportować całego kodu z tego https://android.googlesource.com/platform/frameworks/ex/+/refs/heads/master/chips. istnieje wiele zależności i wszystkie projekty są importowane. Proszę dać mi znać rozwiązanie dla powyższego problemu. Jeśli jakakolwiek próbka również proszę zamieścić tutaj ..

+1

Spróbuj znaleźć inne słowo 'chip'. Nie mam pojęcia, czym jest chip, poza nazwą własną "francuskiego fry" lub amerykańską nazwą chipsa ziemniaczanego. – Simon

+0

Tło Obraz ciągu spannable w polu nazywa się jako chip. w jakiś sposób zmieniłem tekst tego chipa w bańkę. Myślę, że większość programistów Androida dowie się o chipie lub buble z multiautocomplete textview. jeśli masz jakieś pojęcie, daj mi znać o rozwiązaniu .. @ Simon – AndroidDev

Odpowiedz

7

I open-sourced nasze rozwiązanie TokenAutoComplete on github. Mój test został przetestowany z powrotem do wersji 2.2. Zaprojektowałem swój kod, aby umożliwić całkiem proste implementacje i dostosowania. Nie jestem pewien, czy to całkiem odpowiada na twoje pytanie, ale może być lepszym punktem wyjścia niż kod źródłowy żetonów.

Oto implementacja przykład używając mojego Biblioteka:

Podklasa TokenCompleteTextView

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); 
     } 
    } 
} 

kod Layout dla contact_token (można użyć dowolnego rodzaju układ tutaj lub mogłyby rzucić ImageView się, jeśli chcesz obrazów w żeton)

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

Reklamowe backgound odkształcalne

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

Osoba kodu wynikowego

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

aktywność próbki

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", "[email protected]"), 
       new Person("Margaret Smith", "[email protected]"), 
       new Person("Max Jordan", "[email protected]"), 
       new Person("Meg Peterson", "[email protected]"), 
       new Person("Amanda Johnson", "[email protected]"), 
       new Person("Terry Anderson", "[email protected]") 
     }; 

     adapter = new ArrayAdapter<Person>(this, android.R.layout.simple_list_item_1, people); 

     completionView = (ContactsCompletionView)findViewById(R.id.searchView); 
     completionView.setAdapter(adapter); 
     completionView.setPrefix("To: "); 
    } 
} 

Kod Układ

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

Tak Marshall. Dziękuję Ci. Wypróbowałem to już działa dobrze. @Marshall Weir – AndroidDev

+0

hej Otrzymuję ten błąd: java.lang.ClassNotFoundException: Nie znalazłem klasy "com.tokenautocomplete.TokenActivity" – user1051505

+0

używam Twojego kodu, a ja pozwalam użytkownikowi na dodawanie innego tekstu, wraz z tokeny. Teraz chcę, aby cały tekst został wykorzystany z tokenami, jako częścią autocompleteText, ale nie można go uzyskać jako całości. Kiedy wykonuję 'getText(). ToString()' na 'ContactsCompletionView' w tym czasie odrzuca cały łańcuch tokenów i po prostu zwraca ciąg bez zakresów. – zanky

Powiązane problemy