2012-12-10 21 views
6

Tôi đang cố bắt chước phiên bản Ice Cream Sandwhich mới hơn của trình quay, trông giống như danh sách thả xuống thay vì cửa sổ bật lên lên hộp thoại. See this link để có ý tưởng về những gì tôi đang nói đến. Tôi đọc một số bài viết nói đến việc sử dụng ActionBarSherlock để có được hiệu ứng mong muốn. Tuy nhiên, điều này được tạo ra để chỉ sử dụng trong thanh hành động, vì vậy, làm thế nào để tôi lấy Spinner ICS ra khỏi thanh hành động?ICS Spinner ("thả xuống" thay vì hộp thoại) trong các phiên bản Android cũ hơn

There is a pretty good answer here, chưa, tôi cảm thấy như thế này hơi quá mức? Có cách nào dễ hơn không?

Trả lời

17

Trước hết, tôi đã tham chiếu this link cho dù có nên trả lời câu hỏi của riêng mình hay không. Tôi cảm thấy điều này có thể rất hữu ích cho một người nào đó phải đối mặt với một vấn đề tương tự, vì vậy tôi xin lỗi nếu đây không phải là nghi thức đúng đắn cho trang web này (để trả lời câu hỏi của riêng bạn).

Bây giờ, tôi đã tình cờ tìm cách tìm giải pháp cho vấn đề này và với bản dùng thử và lỗi tôi đã thành công. Vì vậy, một khi bạn đã ActionBarSherlock SDK tải về và thiết lập trong dự án của bạn, tạo ra bố cục của bạn sẽ kết hợp các spinner:

<com.actionbarsherlock.internal.widget.IcsSpinner 
      android:id="@+id/spinner" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/title" 
      android:layout_margin="10sp" 
      android:layout_centerHorizontal="true" 
      android:textSize="18sp" /> 

Đoạn mã trên sẽ sử dụng phiên bản ICS của spinner đó là trong thư viện ActionBarSherlock. Tiếp theo, trong khai báo Hoạt động của bạn và khởi tạo (sử dụng đúc) đối tượng spinner. Nhưng lưu ý rằng bạn không sử dụng lớp Spinner bình thường, bạn sử dụng lớp IcsSpinner tìm thấy trong thư viện ActionBarSherlock:

IcsSpinner spinner = (IcsSpinner)findViewById(R.id.spinner); 

Bây giờ, bạn tạo một adapter giống như bạn cho Spinner bình thường, như vậy:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_item, elements); 
spinner.setAdapter(adapter); 

Cuối cùng, bạn cần thiết lập onItemSelectedListener. Chỉ khác biệt lớn ở đây là bạn sử dụng IcsAdapterView.OnItemSelectedListener thay vì chỉ OnItemSelectedListener:

spinner.setOnItemSelectedListener(new IcsAdapterView.OnItemSelectedListener(){ 
    @Override 
    public void onItemSelected(IcsAdapterView<?> parent, View view, int position, long id){ 
    } 
    @Override 
    public void onNothingSelected(IcsAdapterView<?> parent){ 
    } 
}); 

Và đó là nó. Nó thực sự không có nhiều khác nhau sau đó chỉ cần sử dụng đối tượng spinner. Dễ dàng như vậy, tôi mất một thời gian để tìm ra, vì vậy, tôi hy vọng điều này hữu ích cho một người nào đó.

Oh yeah, và đừng quên sử dụng một chủ đề ActionBarSherlock, như vậy (trong manifest):

android:theme="@style/Theme.Sherlock" 
+3

+1 cho một câu trả lời tốt. – Ahmad

+2

Bất kỳ cách nào để sử dụng ICS như spinner với thư viện hỗ trợ Android? Tôi không sử dụng ActionBarSherlock. –

+1

@sureshcheemalamudi [máy phát màu holo] (http://android-holo-colors.com/) sẽ làm, sự khác biệt duy nhất là nền, ics spinner là với gạch dưới ra – oscarthecat