Wie kann ich eine Combobox in Android anzeigen? [closed]

Lesezeit: 10 Minuten

Benutzer-Avatar
James

Wie kann ich eine Combobox in Android anzeigen?

  • Erklären Sie bitte genauer, was Sie wollen. Und was Sie bereits versucht haben.

    – Fretje

    11. Juni 2010 um 16:58 Uhr

  • @fretje Die Frage ist ziemlich spezifisch. Wenn Sie wissen, was ein Kombinationsfeld ist, brauchen Sie keine Erklärung. Wenn nicht, kannst du immer noch googeln: en.wikipedia.org/wiki/Combo_box

    – vbence

    19. Mai 2011 um 10:35 Uhr


  • @vbence: Ich habe nicht über die ComboBox gesprochen. Da Android ein Betriebssystem ist, könnten Sie auch fragen “Wie man eine Combobox in Windows anzeigt”, was überhaupt nicht spezifisch ist.

    – Fretje

    19. Mai 2011 um 11:27 Uhr

  • @fretje Für Windows wäre es aus offensichtlichen Gründen nicht spezifisch genug (Sie können es C # oder Delphi usw. tun), aber unter Android sprechen Sie von einem einzigen Entwicklungsframework. Wenn du redest Android es ist genauso spezifisch wie zu sagen Visual Basic .Net.

    – vbence

    19. Mai 2011 um 11:37 Uhr

  • Versuchen Sie es mit diesem Beispiel: stackoverflow.com/a/17650125/2027232

    – Zeichenfolge.Leer

    4. März 2014 um 7:00 Uhr

Benutzer-Avatar
grunzte

In Android wird es als Spinner bezeichnet. Sie können sich das Tutorial hier ansehen.

Hallo Spinner

Und dies ist eine sehr vage Frage, Sie sollten versuchen, Ihr Problem genauer zu beschreiben.

  • Ich schlage vor, Sie betrachten dies im Kontext der Android-Entwicklung. designerandroid.com/?p=8. Im Zusammenhang mit Android-Entwicklern wird es als Spinner bezeichnet. Bitte recherchieren Sie das nächste Mal.

    – grunzte

    19. Mai 2011 um 16:56 Uhr

  • Ja, und wenn Sie sich die von Ihnen bereitgestellte Website ansehen, können Sie sehen, dass auf dieser Seite eine ComboBox erwähnt wird, aber in der API gibt es nur einen Verweis auf Spinner (developer.android.com/resources/tutorials/views/…) Hier heißt es eindeutig, dass ein “Spinner ein Widget ist, das einer Dropdown-Liste zum Auswählen von Elementen ähnelt”. Ich stimme Ihnen zu, dass dies wie bei anderen Java-Implementierungen als ComboBox bezeichnet werden sollte, in diesem Zusammenhang jedoch nicht.

    – grunzte

    19. Mai 2011 um 20:12 Uhr

  • Ich verstehe, dass sich die Metapher bei mobilen Benutzeroberflächen ein wenig ändert. Es gibt neue Widgets (Steuerelemente), mit denen die begrenzte Bildschirmfläche besser genutzt werden kann. Ich denke, das ist der Grund, warum die verwendeten neuen Namen für einige Steuerelemente verwendet werden, die aus der Desktop-Metapher bekannt sind. – Ich stimme zu, dass der Spinner der Dropdown-Liste ähnlich ist. Der Hauptunterschied zwischen der Listenfeld (Dropdown-Liste) und die Kombinationsfeld ist, dass die Combobox im Grunde ein um die Auswahlmöglichkeit aus der Liste erweitertes Texteingabefeld ist. Sie können entweder ein Element aus der Liste auswählen oder beliebige Werte eingeben.

    – vbence

    19. Mai 2011 um 20:55 Uhr

  • Hören Sie mit der Spitzfindigkeit auf und geben Sie zu, dass jeder beim ersten Mal, als er eine Android-App geschrieben hat, Probleme hatte, ein Steuerelement zu finden, das sich wie ein Kombinationsfeld oder ein Listenfeld verhält …

    – Torp

    26. Juli 2011 um 11:37 Uhr

  • Ich suche immer noch nach einem Kombinationsfeld. Ich habe Spinners gesehen. Gebrauchte Spinner. Aber ehrlich gesagt habe ich ein Szenario, in dem ich den Text auf etwas anderes als eine bestimmte Option setzen muss. Aka sie können es eingeben. Spinner sind keine Kombinationsfelder, aber sie sind normalerweise eine gültige Alternative.

    – IAmGroot

    29. Juni 2012 um 15:01 Uhr

Benutzer-Avatar
Raniez Ahmed

Hier ist ein Beispiel für eine benutzerdefinierte Combobox in Android:

package myWidgets;
import android.content.Context;
import android.database.Cursor;
import android.text.InputType;
import android.util.AttributeSet;
import android.view.View;
import android.widget.AutoCompleteTextView;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.SimpleCursorAdapter;

public class ComboBox extends LinearLayout {

   private AutoCompleteTextView _text;
   private ImageButton _button;

   public ComboBox(Context context) {
       super(context);
       this.createChildControls(context);
   }

   public ComboBox(Context context, AttributeSet attrs) {
       super(context, attrs);
       this.createChildControls(context);
}

 private void createChildControls(Context context) {
    this.setOrientation(HORIZONTAL);
    this.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                   LayoutParams.WRAP_CONTENT));

   _text = new AutoCompleteTextView(context);
   _text.setSingleLine();
   _text.setInputType(InputType.TYPE_CLASS_TEXT
                   | InputType.TYPE_TEXT_VARIATION_NORMAL
                   | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
                   | InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE
                   | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT);
   _text.setRawInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
   this.addView(_text, new LayoutParams(LayoutParams.WRAP_CONTENT,
                   LayoutParams.WRAP_CONTENT, 1));

   _button = new ImageButton(context);
   _button.setImageResource(android.R.drawable.arrow_down_float);
   _button.setOnClickListener(new OnClickListener() {
           @Override
           public void onClick(View v) {
                   _text.showDropDown();
           }
   });
   this.addView(_button, new LayoutParams(LayoutParams.WRAP_CONTENT,
                   LayoutParams.WRAP_CONTENT));
 }

/**
    * Sets the source for DDLB suggestions.
    * Cursor MUST be managed by supplier!!
    * @param source Source of suggestions.
    * @param column Which column from source to show.
    */
 public void setSuggestionSource(Cursor source, String column) {
    String[] from = new String[] { column };
    int[] to = new int[] { android.R.id.text1 };
    SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this.getContext(),
                   android.R.layout.simple_dropdown_item_1line, source, from, to);
    // this is to ensure that when suggestion is selected
    // it provides the value to the textbox
    cursorAdapter.setStringConversionColumn(source.getColumnIndex(column));
    _text.setAdapter(cursorAdapter);
 }

/**
    * Gets the text in the combo box.
    *
    * @return Text.
    */
public String getText() {
    return _text.getText().toString();
 }

/**
    * Sets the text in combo box.
    */
public void setText(String text) {
    _text.setText(text);
   }
}

Ich hoffe es hilft!!

  • Danke für Ihre Antwort. Ich möchte dieses Widget verwenden, aber ich möchte ein String-Array als Datenquelle verwenden, keinen Cursor. was soll ich machen?

    – Ali Behzadian Nejad

    14. September 2013 um 15:13 Uhr

Benutzer-Avatar
vbenz

Nicht getestet, aber das scheint man sich näher bringen zu können AutoCompleteTextView. Sie können einen Adapter schreiben, der die Filterfunktionen ignoriert. Etwas wie:

class UnconditionalArrayAdapter<T> extends ArrayAdapter<T> {
    final List<T> items;
    public UnconditionalArrayAdapter(Context context, int textViewResourceId, List<T> items) {
        super(context, textViewResourceId, items);
        this.items = items;
    }

    public Filter getFilter() {
        return new NullFilter();
    }

    class NullFilter extends Filter {
        protected Filter.FilterResults performFiltering(CharSequence constraint) {
            final FilterResults results = new FilterResults();
            results.values = items;
            return results;
        }

        protected void publishResults(CharSequence constraint, Filter.FilterResults results) {
            items.clear(); // `items` must be final, thus we need to copy the elements by hand.
            for (Object item : (List) results.values) {
                items.add((String) item);
            }
            if (results.count > 0) {
                notifyDataSetChanged();
            } else {
                notifyDataSetInvalidated();
            }
        }
    }
}

… dann in Ihrem onCreate:

String[] COUNTRIES = new String[] {"Belgium", "France", "Italy", "Germany"};
List<String> contriesList = Arrays.asList(COUNTRIES());
ArrayAdapter<String> adapter = new UnconditionalArrayAdapter<String>(this,
    android.R.layout.simple_dropdown_item_1line, contriesList);
AutoCompleteTextView textView = (AutoCompleteTextView)
    findViewById(R.id.countries_list);
textView.setAdapter(adapter);

Der Code ist nicht getestet, es kann einige Funktionen mit der Filtermethode geben, die ich nicht berücksichtigt habe, aber da haben Sie es, die Grundprinzipien, um eine ComboBox mit einer AutoCompleteTextView zu emulieren.

Bearbeiten
NullFilter-Implementierung korrigiert. Wir brauchen Zugriff auf die Items, also den Konstruktor der UnconditionalArrayAdapter muss eine Referenz auf eine Liste (eine Art Puffer) nehmen. Sie können auch z adapter = new UnconditionalArrayAdapter<String>(..., new ArrayList<String>); und dann verwenden adapter.add("Luxemburg")sodass Sie die Pufferliste nicht verwalten müssen.

  • Dieser Code kommt dem Kompilieren nicht nahe. Die Aufrufe von getFilter() sehen aus wie Versuche einer Endlosschleife, und publishResults gibt einen Wert von einer void-Methode zurück. Die Idee ist insgesamt gut, aber jemand sollte dieses Beispiel reparieren.

    – Dhakim

    21. März 2014 um 19:59 Uhr


Die Fragen sind absolut gültig und klar, da Spinner und ComboBox (lesen Sie es: Spinner, wo Sie auch einen benutzerdefinierten Wert angeben können) zwei verschiedene Dinge sind.

Ich habe selbst nach der gleichen Sache gesucht und war mit den gegebenen Antworten nicht zufrieden. Also habe ich mein eigenes Ding gemacht. Vielleicht finden einige die folgenden Hinweise nützlich. Ich stelle nicht den vollständigen Quellcode zur Verfügung, da ich einige Legacy-Aufrufe in meinem eigenen Projekt verwende. Es sollte sowieso ziemlich klar sein.

Hier ist der Screenshot der letzten Sache:

ComboBox auf Android

Als Erstes musste eine Ansicht erstellt werden, die genauso aussieht wie das Spinnerfeld, das noch nicht erweitert wurde. Im Screenshot sehen Sie oben auf dem Bildschirm (unscharf) das Spinner und die benutzerdefinierte Ansicht direkt darunter. Zu diesem Zweck habe ich LinearLayout (eigentlich habe ich von Linear Layout geerbt) mit verwendet style="?android:attr/spinnerStyle". LinearLayout enthält TextView mit style="?android:attr/spinnerItemStyle". Vollständiges XML-Snippet wäre:

<com.example.comboboxtest.ComboBox 
    style="?android:attr/spinnerStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >

    <TextView
        android:id="@+id/textView"
        style="?android:attr/spinnerItemStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:singleLine="true"
        android:text="January"
        android:textAlignment="inherit" 
    />

</com.example.comboboxtest.ComboBox>

Wie ich bereits erwähnt habe, erbt ComboBox von LinearLayout. Es implementiert auch OnClickListener, der einen Dialog mit einer benutzerdefinierten Ansicht erstellt, die aus der XML-Datei aufgeblasen wird. Hier ist die aufgeblasene Ansicht:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" 
    >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" 
        >
        <EditText
            android:id="@+id/editText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:hint="Enter custom value ..." >

            <requestFocus />
        </EditText>

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="OK" 
        />
    </LinearLayout>

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
    />

</LinearLayout>

Es gibt zwei weitere Listener, die Sie implementieren müssen: onItemClick für die Liste und onClick für die Schaltfläche. Beide setzen den ausgewählten Wert und schließen den Dialog.

Damit die Liste genauso aussieht wie der erweiterte Spinner, können Sie dies tun, indem Sie den Listenadapter mit dem entsprechenden (Spinner-)Stil wie folgt versehen:

ArrayAdapter<String> adapter = 
    new ArrayAdapter<String>(
        activity,
        android.R.layout.simple_spinner_dropdown_item, 
        states
    );

Mehr oder weniger, das sollte es sein.

Maßgeschneidert 🙂 Sie können Dropdown-Hori/Vertical-Offset-Eigenschaften verwenden, um die Liste aktuell zu positionieren, versuchen Sie es auch mit android:spinnerMode=”dialog”, es ist cooler.

Layout

  <LinearLayout
        android:layout_marginBottom="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <AutoCompleteTextView
            android:layout_weight="1"
            android:id="@+id/edit_ip"
            android:text="default value"
            android:layout_width="0dp"
            android:layout_height= "wrap_content"/>
        <Spinner
            android:layout_marginRight="20dp"
            android:layout_width="30dp"
            android:layout_height="50dp"
            android:id="@+id/spinner_ip"
            android:spinnerMode="dropdown"
            android:entries="@array/myarray"/>
 </LinearLayout>

Java

          //set auto complete
        final AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.edit_ip);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, getResources().getStringArray(R.array.myarray));
        textView.setAdapter(adapter);
        //set spinner
        final Spinner spinner = (Spinner) findViewById(R.id.spinner_ip);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                textView.setText(spinner.getSelectedItem().toString());
                textView.dismissDropDown();
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                textView.setText(spinner.getSelectedItem().toString());
                textView.dismissDropDown();
            }
        });

res/values/string

<string-array name="myarray">
    <item>value1</item>
    <item>value2</item>
</string-array>

War das nützlich??

  • wie deine antwort? Wo klicken Sie auf AutoCompleteTextView und zeigen?

    – ZarNi Myo Sett Win

    14. Mai 2018 um 10:27 Uhr

  • Sie können nach Belieben zusätzliche Ereignisse zu AutoCompleteTextView oder Spinner hinzufügen.

    – ShakKir

    15. Mai 2018 um 6:42 Uhr


Benutzer-Avatar
rve

Für eine Combobox (http://en.wikipedia.org/wiki/Combo_box), die eine freie Texteingabe ermöglicht und ein Dropdown-Listenfeld hat, habe ich a verwendet AutoCompleteTextView wie von vbence vorgeschlagen.

Ich habe die verwendet onClickListener um das Dropdown-Listenfeld anzuzeigen, wenn der Benutzer das Steuerelement auswählt.

Ich glaube, das ähnelt dieser Art von Combobox am besten.

private static final String[] STUFF = new String[] { "Thing 1", "Thing 2" };

public void onCreate(Bundle b) {
    final AutoCompleteTextView view = 
        (AutoCompleteTextView) findViewById(R.id.myAutoCompleteTextView);

    view.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
                view.showDropDown();
        }
    });

    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(
        this, 
        android.R.layout.simple_dropdown_item_1line,
        STUFF
    );
    view.setAdapter(adapter);
}

  • wie deine antwort? Wo klicken Sie auf AutoCompleteTextView und zeigen?

    – ZarNi Myo Sett Win

    14. Mai 2018 um 10:27 Uhr

  • Sie können nach Belieben zusätzliche Ereignisse zu AutoCompleteTextView oder Spinner hinzufügen.

    – ShakKir

    15. Mai 2018 um 6:42 Uhr


1299130cookie-checkWie kann ich eine Combobox in Android anzeigen? [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy