it-swarm.com.de

Android: Spinner-Teiler kann nicht formatiert werden

Ich versuche, ein Thema für meine erste Android-App zu erstellen, und das bringt mich um die Ecke. Ich habe es endlich geschafft, herauszufinden, wie Elemente in einer Dropdown-Liste formatiert werden. Jetzt kann ich die Farbe der Trennlinie zwischen Listenelementen nicht mehr ändern. Ich habe nach ähnlichen Fragen zum Stackoverflow gesucht und Dutzende von Kombinationen ausprobiert, aber nichts scheint zu funktionieren.

Hier ist meine styles.xml-Datei (aus Gründen der Übersichtlichkeit abgekürzt):

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="MyTheme" parent="Android:Theme.Light">
    <item name="Android:spinnerStyle">@style/spinnerStyle</item>
    <item name="Android:spinnerDropDownItemStyle">@style/spinnerDropDownItemStyle</item>    
    <item name="Android:dropDownListViewStyle">@style/spinnerListViewStyle</item>
  </style>

  <style name="spinnerStyle" parent="@Android:style/Widget.Spinner">
      <item name="Android:background">@drawable/my_theme_spinner</item>
  </style>

  <style name="spinnerDropDownItemStyle" parent="@Android:style/Widget.DropDownItem.Spinner">
      <item name="Android:background">@drawable/my_theme_spinner_item</item>
      <item name="Android:paddingLeft">5dp</item>
      <item name="Android:gravity">center_vertical</item>
  </style>

  <style name="spinnerListViewStyle" parent="@Android:style/Widget.ListView.DropDown">
      <item name="Android:height">3dp</item>
      <item name="Android:dividerHeight">3dp</item>
      <item name="Android:divider">@color/divider</item>
  </style>
</resources>

Egal, was ich mache, ich bekomme nur einen hellgrauen 1dp-Trenner zwischen den Elementen (der mit meinem hellfarbigen Listenelementhintergrund kaum zu sehen ist) - weder die Höhe noch die Farbe des Trenners werden jemals beeinflusst (ich habe auch versucht, ihn auf a zu setzen) ziehbar, auch ohne Wirkung). Was mache ich falsch?

13
Russ

Ich habe eine sehr einfache Aktivität mit dem Spinner und es funktioniert für die folgenden. Der einzige Unterschied, den ich sehe, ist, dass Sie einen <item name="Android:height">3dp</item> haben und ich habe das überhaupt nicht.

<style name="TestSpinnerStyle" parent="Android:style/Widget.ListView.DropDown">
    <item name="Android:divider">#ff0000</item>
    <item name="Android:dividerHeight">5dp</item>
</style>


<style name="SampleTheme" parent="@Android:style/Theme.Holo.Light">
    <item name="Android:dropDownListViewStyle">@style/TestSpinnerStyle</item>
</style>

und in meiner Tätigkeit habe ich:

    Spinner spinner = (Spinner) findViewById(R.id.spinner);
    List<String> list = new ArrayList<String>();
    list.add("list 1");
    list.add("list 2");
    list.add("list 3");
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
            Android.R.layout.simple_spinner_item, list);
    dataAdapter.setDropDownViewResource(Android.R.layout.simple_dropdown_item_1line);
    spinner.setAdapter(dataAdapter);

und dann für das Hauptlayout habe ich das folgende XML:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
              Android:orientation="vertical"
              Android:layout_width="fill_parent"
              Android:layout_height="fill_parent"
        >
    <TextView
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:text="Hello World, StylingActivity"
            />
    <Spinner Android:id="@+id/spinner"
             Android:layout_width="250dp"
             Android:layout_height="40dp"
             />
</LinearLayout>

Hier ist der Screenshot

sample activity screnshot

Wenn Sie es von dort nicht zum Laufen bringen können, kann ich das Ganze zu einem Github-Repo für Sie hochschieben.

25

Sie können dies in Ihrer layout.xml tun

     <Spinner
                Android:id="@+id/sp_to_create"
                Android:layout_width="match_parent"
                Android:layout_height="32dp"
                Android:layout_marginBottom="10dp"
                style="@style/spinner_style"
                Android:Prompt="@string/to_type_Prompt" />

XML-Stile ADD it

 <style name="spinner_style" parent="Widget.AppCompat.ListView.DropDown">
    <item name="Android:divider">#d1d1d1</item>
    <item name="Android:dividerHeight">0.5dp</item>
</style>

Zu deinem Aktivitätsthema hinzufügen

      <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <item name="Android:dropDownListViewStyle">@style/spinner_style</item>
</style>

Java-DATEI

your_spinnerList.setAdapter(new ArrayAdapter<>(getActivity(), Android.R.layout.simple_dropdown_item_1line, timeOff_type_list));

Lassen Sie mich wissen, ob es für Sie nützlich war! Einen schönen Tag noch!

1
Cristofer

Sie können dem von Ihnen verwendeten Dropdown-Layout eine horizontale Linie hinzufügen, wodurch effektiv ein Teiler erstellt wird.

EDIT

Einige weitere Suche ergab dies:

SO Answer

Was im Grunde bedeutet, dass das, was Sie zeigen, was Sie oben versuchen, funktionieren sollte ... obwohl es erwähnt, dass Sie diesen Stil in Ihrem Aktivität -Thema festlegen, und Sie erwähnen dies nicht.

1
Barak

Die Stilmethode in der akzeptierten Antwort funktioniert so lange, bis Sie zwei Spinner mit unterschiedlichen Teilerfarben benötigen.

Folgendes habe ich als Alternative gefunden:

a) Setzen Sie das Attribut popupBackgroundColor auf dem Drehfeld auf die Farbe, die Sie für den Teiler wünschen. Dies färbt den gesamten Hintergrund des Listenelements (einschließlich des Bereichs, den wir als Teiler betrachten).

b) Setzen Sie den Spinner-Adapter dropDownViewResource auf CheckedTextView, wobei das Hintergrundattribut auf eine andere Farbe gesetzt ist (oder auf einen Selektor, wenn die ausgewählten Elemente eine andere Farbe haben sollen). Dies überschreibt die Farbe, die wir in Schritt a für alles außer dem Teiler festgelegt haben. effektiv geben uns das gewünschte Ergebnis.

Sie haben also:

drawable/spinner_dropdown_background_selector:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <item Android:drawable="@color/your_unchecked_color" Android:state_checked="false"/>
    <item Android:drawable="@color/your_checked_color" Android:state_checked="true"/>
    <item Android:drawable="@color/your_unchecked_color"/>

</selector>

layout/drop_down_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
             Android:id="@Android:id/text1"
             Android:background="@drawable/spinner_dropdown_background_selector"
             Android:textColor="@Android:color/white"
             Android:singleLine="true"
             Android:layout_width="match_parent"
             Android:layout_height="wrap_content"
             Android:ellipsize="Marquee" />

Deine Spinner-Definition:

<Spinner
        ...
        Android:popupBackground="@color/your_divider_color"            
        ...
        />

Und schließlich Ihre Array-Adapter-Definition:

ArrayAdapter<String> dataAdapter = new ...
dataAdapter.setDropDownViewResource(Android.R.layout.drop_down_item);
spinner.setAdapter(dataAdapter);

Bitte beachten Sie, dass das Setzen der popupBackgroundColor keine Auswirkung hat, wenn sich der Spinner im Dialogmodus befindet.

0
Oren