2012-09-17 90 views
0

我試圖做一個撰寫新郵件屏幕像內置的是Android 4.1AutoCompleteTextView 1.添加按鈕,2創建聯繫人適配器,3位在AutoCompleteTextView

  1. 短信應用我注意到,當一個人選擇一個聯繫人時,插入的AutoCompleteTextView中會有一個按鈕排序的事物。如何可能?請幫忙,因爲我甚至沒有任何想法給它一個開始代碼。 P.S. :我喜歡在創建新帖子時實現類似於StackOverflow中「標籤」條目的東西。 I.E.單詞(匹配的聯繫人)被按鈕替換,並在右邊緣有一點X以將其刪除! :-)

  2. 如何創建加載速度如此之快的適配器?一個想法是緩存所有聯繫人列表(姓名,電話號碼,電話號碼類型)。任何其他想法? (比如,如果我們可以用一個2字符的初始搜索字符串查詢內容提供者,這將會極大地減少自動完成結果的數量,從而減少加載適配器所花費的時間。但是,這當然需要設置自動完成文本視圖的適配器爲每個字符輸入。我的疑問是,ContactsContract可以從幾個給定的字母開始查詢搜索結果,而不是僅僅使用光標從開始掃描整個數據庫?)

  3. autocompletetextview不識別空格,只是沒有結果。 我已閱讀this但無法實現它,有沒有人有任何工作代碼?

回答

0

您可以在Android GitHub上免費查看內置消息應用程序的源代碼。所有你需要的是耐心閱讀和理解代碼。我提醒你,並非所有的代碼都在公開的SDK中使用時要小心。

1,具有聯繫人標籤的MultiAutoComplete RecipientEditTextViewRecipientsEditor是擴展類RecipientEditTextView它們在應用程序中使用它 更新:這裏是撰寫屏幕的layout。第37行是你想要的自動完成文本視圖。以下是它的佈局。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal"> 

<com.android.mms.ui.RecipientsEditor 
    android:id="@+id/recipients_editor" 
    android:hint="@string/to_hint" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="textFilter" 
    android:layout_weight="1" 
    android:textColor="#000000" 
/> 

<ImageButton android:id="@+id/recipients_picker" 
    android:src="@drawable/ic_launcher_contacts" 
    android:layout_marginLeft="5dip" 
    android:layout_width="50dip" 
    android:layout_height="fill_parent" 
    android:layout_weight="0" 
    android:visibility="gone" 
/> 

+0

人會老老實實需要好多天理出頭緒這樣的小事。我也曾經看過它。但是我現在需要的只是代碼中的autocompletetextview和它使用的適配器,以及onclick動作。也許你/任何人都可以幫我解決這個問題嗎? – Daksh

+0

SO不是代碼提供的網站,所以爲了獲得運行代碼很難。你必須自己弄明白。我只有定製的android2.2消息應用程序。我將在1或2周內在autocompletetextview的4.0聯繫人標記中添加新功能。所以我會編輯我的帖子。只是我的建議,你想要它,所以你必須工作。 –

+0

好的感謝RecipientEditTextView和RecipientsEditor鏈接! 現在我有一個疑問,如果我用它替換AutoCompleteTextView,那麼我是否必須在視圖的xml中添加任何額外的行,如從我的包中導入類還是什麼? – Daksh

0

我建TokenAutoComplete來解決這個問題,因爲似乎沒有成爲一個簡單的方法來做到這一點。這裏有一個基本的例子,解決點1和3:

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.getName()); 

     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(你需要找到自己的X繪製)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:background="@drawable/token_background"> 
    <TextView android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="@android:color/white" 
     android:textSize="14sp" 
     android:text="Test Me" 
     android:padding="2dp" /> 

    <ImageView 
     android:layout_height="10dp" 
     android:layout_width="10dp" 
     android:src="@drawable/x" 
     android:layout_gravity="center_vertical" 
     android:layout_marginLeft="3dp" 
     android:layout_marginRight="5dp" /> 
</LinearLayout> 

令牌backgound繪製

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

Person object code

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", "[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.setTokenClickStyle(TokenCompleteTextView.TokenClickStyle.Delete); 
    } 
} 

佈局代碼

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

這裏是什麼樣子:

enter image description here

+0

我試過這個庫,但沒有得到classdeffound錯誤。這個庫看起來非常有前途,但我們甚至無法編譯它。我使用ecllipse並嘗試導入項目並添加jar。 – subash

相關問題