2012-08-22 33 views
6

lolandroid Spinner: văn bản trung tâm theo chiều dọc bên trong spinner

tôi cần các trình xoay vòng này để căn giữa văn bản. Tôi đã thử các công cụ như thế này trong định nghĩa xml Spinner:

<Spinner 
    android:id="@+id/dir_spn" 
    android:layout_gravity="center_vertical" 
    android:gravity="center_vertical" 
    android:layout_weight="1"/> 

tôi đã cố gắng xây dựng một phong tục thả xuống bố trí:

<?xml version="1.0" encoding="utf-8"?> 
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    style="@style/SpinnerDropDownItem" 
    android:singleLine="true" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:ellipsize="marquee" /> 

styles.xml:

<resources> 
<style name="SpinnerDropDownItem"> 
    <item name="android:gravity">center_vertical</item> 
    <item name="android:layout_gravity">center_vertical</item> 
    <item name="android:textColor">?android:attr/textColorPrimary</item> 
    <item name="android:textColorHighlight">#FFFF9200</item> 
    <item name="android:textColorHint">?android:attr/textColorHint</item> 
    <item name="android:textColorLink">#5C5CFF</item> 
    <item name="android:textSize">16sp</item> 
    <item name="android:textStyle">normal</item> 
</style> 
</resources> 

bộ chuyển đổi thả xuống bộ :

adapter.setDropDownViewResource(R.layout.spinner_dropdown_item); 

ho w để tôi có được văn bản Spinner đến trung tâm theo chiều dọc?

EDIT: nó có thể là đáng nói đến là Hoạt động được theo chủ đề trong biểu hiện thusly:

<resources> 
<style name="SpeakNSpell" parent="@android:style/Theme"> 
    <item name="android:minHeight">68sp</item> 
</style> 
</resources> 

mà làm cho tất cả các lần xem ít nhất 68sp cao. điều này có ảnh hưởng đến văn bản bên trong Spinner không?

+0

Tôi sẽ làm giảm nó vào dạng đơn giản và đi từ đó. Đầu tiên hãy thử nó mà không có phong cách và widget ưa thích. Tạo bố cục TextView đơn giản và đặt trọng tâm thành center_vertical và xem liệu nó có hoạt động hay không. Ngoài ra, bố trí thả xuống là * không * hiển thị khi trình xoay được đóng (khi bạn đang hiển thị nó). Có lẽ bạn cần phải áp dụng phong cách của bạn để bố trí được sử dụng khi spinner được đóng lại? – Barak

+0

Tôi không thấy máy quay của bạn 'android: layout_width =" wrap_content "' và 'android: layout_height =" wrap_content "' – slybloty

Trả lời

8

Rewrite

Bạn dường như muốn tập trung các văn bản theo chiều dọc trong tài nguyên mục, hiển thị dưới đây, nhưng các ví dụ mã của bạn nhắm đến thả xuống menu ...

Compare Layouts

Đầu trang Spinner là bố cục đơn giản mặc định của android và dưới cùng là giống nhau nhưng đã thêm android:gravity="center_vertical".

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    style="?android:attr/spinnerItemStyle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ellipsize="marquee" 
    android:gravity="center_vertical" 
    android:singleLine="true" /> 

Bạn có thể thấy rằng tôi đã sử dụng Chủ đề của bạn với số lớn minHeight. Dưới đây là một ví dụ cơ bản để sử dụng bố trí này trong một bộ kết nối:

Spinner spinner = (Spinner) findViewById(R.id.spinner); 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_item, list); 
// set whatever dropdown resource you want 
spinner.setAdapter(adapter); 

tôi đã đi với giả định rằng bạn muốn "TIỀN", "Chọn sản phẩm", vv từ hình ảnh của bạn làm trung tâm, cho tôi biết nếu bạn nơi cố gắng để làm điều gì đó khác!

0

Trong bạn SpinnerAdapter thử một cái gì đó như thế này:

public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     View v = super.getDropDownView(position, convertView,parent); 
     ((TextView) v).setGravity(Gravity.CENTER); 
     return v; 
} 
3

Nếu ai đó vẫn gặp sự cố sau khi cài đặt gravity, cố gắng thiết lập đệm của Spinner:

   android:paddingTop="0dp" 
       android:paddingBottom="0dp" 
+0

Nếu tôi có thể bỏ phiếu 5 lần này, tôi sẽ làm như vậy. Tôi đã dành hàng giờ chiến đấu với Spinner cố gắng để làm cho nó hoạt động và tôn trọng android: gravity = "center_vertical" không có kết quả. Giải pháp đơn giản như thế này.Tôi nghĩ rằng lý do nó đã được misbehaving là tôi thiết lập các thuộc tính nền cho một bản vá 9. Sau đó, Spinner nhấn mạnh vào việc đặt nội dung văn bản ở trên cùng. Cảm ơn bạn rất nhiều vì bài đăng này. – Mitselplik

Các vấn đề liên quan