2014-09-26 27 views
16

câu hỏi này liên quan đến cái này: android.R.simple_spinner_itemAndroid đơn giản spinner mục

Vì tôi không thể bình luận vì uy tín thấp, tôi có một câu hỏi thêm:

Nếu tôi sao chép & dán android.R. bố trí simple_spinner_item, tôi nhận được một lỗi trên

android:layout_height="?android:attr/dropdownListPreferredItemHeight" 

nói "lỗi: lỗi: Thuộc tính không được công khai (tại 'layout_height' với giá trị 'android:? attr/dropdownListPreferredItemHeight').."

Tôi vừa thêm android:gravity="right" để căn chỉnh spinner_item sang bên phải.

Tôi làm cách nào để giải quyết lỗi này?

+2

Sử dụng 'android: layout_height = "wrap_content" ' . Bạn không thể sử dụng 'dropdownListPreferredItemHeight' vì nó không công khai. –

Trả lời

1

Bạn chỉ có thể sử dụng tài nguyên android (chủ đề hoặc thuộc tính) được Hệ thống xác định là công khai.

Khi attr "?android:attr/dropdownListPreferredItemHeight" không công khai, bạn không thể sử dụng điều đó.

Thay vào đó, bạn có thể sử dụng

android:layout_height="wrap_content"

cho bố cục mục Spinner.

Giải pháp khác có thể là sao chép tài nguyên từ SDK vào dự án của bạn và sau đó sử dụng chúng trong dự án của bạn.

+1

Tôi đã thử "bọc nội dung" nhưng điều này sẽ giảm thiểu chiều cao mục hoàn toàn sao cho nhỏ. Tôi juut muốn ở lại với kích thước mặc định. – Zuop

+0

Wow, mọi người đều đưa ra gợi ý khủng khiếp giống nhau, điều này sẽ loại bỏ khoảng trống giữa mỗi mục. Tại sao mọi người lại hài lòng với điều đó? –

4

thì bạn sẽ phải thiết kế nó.

bố trí/my_spinner_textview.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    style="?android:attr/spinnerItemStyle" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    android:gravity="right" /> 

và đây là cách tôi đặt adapter

private String[] state= {"Andra Pradesh","Arunachal Pradesh","Assam","Bihar","Haryana","Himachal Pradesh", "Jammu and Kashmir", "Jharkhand","Karnataka", "Kerala","Tamil Nadu"}; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.fragment_main); 
     ArrayAdapter<String> adapter_state = new ArrayAdapter<String>(this, R.layout.my_spinner_textview, state); 
     adapter_state.setDropDownViewResource(R.layout.my_spinner_textview); 
     Spinner spinner=(Spinner)findViewById(R.id.spinner1); 
     spinner.setAdapter(adapter_state); 

    } 
+0

Tôi biết, nhưng điều này cũng sẽ đặt căn chỉnh sang trái. Tôi muốn chế độ xem mặc định với căn phải. – Zuop

+0

xin lỗi tôi có nghĩa là, điều này sẽ bọc nội dung để listitem là smalller hơn 'dropdownListPreferredItemHeight'. Nếu tôi biết mức độ cao như thế nào, tôi có thể thiết lập heigt ... không phải là một giải pháp đẹp mặc dù – Zuop

+1

@Zuop Đó là '64dip'. –

30

Dường như làm việc cho tôi nếu bạn không tiền tố nó với android, như vậy:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@android:id/text1" 
      style="?android:attr/spinnerDropDownItemStyle" 
      android:singleLine="true" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/dropdownListPreferredItemHeight" 
      android:ellipsize="marquee"/> 
+4

Vẫn được đánh dấu là riêng tư trong thư viện ứng dụng v7. – Luis

+3

Điều này không trả lời được câu hỏi. – arenaq

+3

Làm thế nào nó không trả lời được câu hỏi? Nó nghĩa đen trực tiếp trả lời câu hỏi .... –

1
android:layout_width="match_parent" 
android:layout_height="48dp" 

Create a custom layout with these attributes. You might want to theme it later.

0

Tài nguyên này nếu ở chế độ riêng tư, do đó chỉ thư viện thuộc tính đó có thể sử dụng được. Vì vậy, bạn cần phải có được kích thước của thuộc tính này và tạo nó trong ứng dụng của bạn. Từ mã nguồn: https://android.googlesource.com/platform/frameworks/support/+/50fe5ec/appcompat/res/values/themes.xml

chúng ta có thể thấy ở dòng 50 và/hoặc 84 thuộc tính ở đó. Vì vậy, trong tập tin dimens.xml của bạn, bạn có thể viết:

<dimen name="dropdownListPreferredItemHeight">64dip</dimen>

và sau đó tham chiếu đến nó như bạn sẽ một nguồn lực bình thường:

android:layout_height="@dimen/dropdownListPreferredItemHeight"

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