2014-09-26 8 views
16

to pytanie dotyczy tego: android.R.simple_spinner_itemAndroid poz prosty spinner

Ponieważ nie mogę komentować powodu niskiej reputacji, mam dodatkowe pytanie:

Gdybym skopiować & wklej android.R. układ simple_spinner_item, otrzymuję błąd na

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

napisem "error: błąd: Atrybut nie jest publiczna (w 'layout_height' o wartości 'android: atr/dropdownListPreferredItemHeight').".

Właśnie dodałem android:gravity="right", aby uzyskać wyrównanie spinner_item po prawej stronie.

Jak mogę rozwiązać ten błąd?

+2

Wykorzystanie 'android: layout_height = "wrap_content"' . Nie można użyć 'dropdownListPreferredItemHeight' jako niepublicznego. –

Odpowiedz

1

Możesz używać zasobów android (motywów lub atrybutów), które są zdefiniowane jako publiczne przez System.

Ponieważ attr "?android:attr/dropdownListPreferredItemHeight" nie jest publiczny, nie możesz go użyć.

Zamiast tego można użyć

android:layout_height="wrap_content"

dla układu poz Spinner.

Innym rozwiązaniem może być skopiowanie zasobów z zestawu SDK do projektu, a następnie użycie ich w projekcie.

+1

Próbowałem już "zawinąć zawartość", ale to radykalnie zminimalizuje wysokość elementu, a więc jego niewielki rozmiar. I juut chce pozostać z domyślnym rozmiarem. – Zuop

+0

Wow, wszyscy podają tę samą straszną sugestię, która usuwa przestrzeń między poszczególnymi przedmiotami. Dlaczego ktokolwiek byłby zadowolony z tego? –

4

to będzie trzeba zaprojektować.

układ/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" /> 

i to w jaki sposób mogę ustawić 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

Wiem, ale to również ustawi wyrównanie na lewo. Chcę domyślny widok z wyrównaniem w prawo. – Zuop

+0

Przepraszam, miałem na myśli, to zawinie treść, więc lista jest mniejsza niż 'dropdownListPreferredItemHeight'. Jeśli wiem, jak wysoki byłby to, mógłbym ustawić heigt ... nie jest to piękne rozwiązanie, ale – Zuop

+1

@ Zuop To '64dip'. –

30

wydaje się działać dla mnie, jeśli nie poprzedzić je Android, jak tak:

<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

Nadal oznaczane jako prywatne w bibliotece appcompat v7. – Luis

+3

To nie odpowiada na pytanie. – arenaq

+3

Jak to nie odpowiada na pytanie? Dosłownie bezpośrednio odpowiada na pytanie .... –

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

Ten zasób, jeśli jest prywatny, więc może go używać tylko biblioteka, z której pochodzi ten atrybut. Musisz więc uzyskać rozmiar tego atrybutu i utworzyć go w swojej aplikacji. Z kodu źródłowego: https://android.googlesource.com/platform/frameworks/support/+/50fe5ec/appcompat/res/values/themes.xml

widzimy w liniach 50 i/lub 84 atrybut tam. Więc w pliku dimens.xml można napisać:

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

a następnie odwołać go jak chcesz to normalne źródło:

android:layout_height="@dimen/dropdownListPreferredItemHeight"