मैं एंड्रॉइड में कॉम्बोक्स कैसे दिखा सकता हूं? [बन्द है]


80

मैं एंड्रॉइड में कॉम्बोक्स कैसे दिखा सकता हूं?


1
कृपया स्पष्ट रूप से समझाएं कि आप क्या चाहते हैं। और जो आप पहले से ही आजमा चुके हैं।
१६:०६ पर fretje

30
@fretje प्रश्न बहुत विशिष्ट है। यदि आप जानते हैं कि कॉम्बो बॉक्स क्या है, तो आपको कोई स्पष्टीकरण नहीं चाहिए। अगर आप अभी भी इसे गूगल नहीं कर सकते हैं: en.wikipedia.org/wiki/Combo_box
vbence

1
@vbence: मैं कॉम्बोबॉक्स के बारे में बात नहीं कर रहा था। जैसा कि एंड्रॉइड एक ओएस है, आप "विंडोज में एक कॉम्बोक्स दिखाने के लिए कैसे" पूछ सकते हैं, जो बिल्कुल भी विशिष्ट नहीं है।
fretje

18
विंडोज के लिए @fretje यह स्पष्ट कारणों के लिए पर्याप्त विशिष्ट नहीं होगा (आप इसे C # या डेल्फी आदि कर सकते हैं), लेकिन एंड्रॉइड पर आप एकल विकास ढांचे के बारे में बात कर रहे हैं। जब आप Android के बारे में बात कर रहे हैं तो यह Visual Basic .Net के रूप में विशिष्ट है ।
vbence

इस उदाहरण का प्रयास करें stackoverflow.com/a/17650125/2027232
निकोलस टायलर

जवाबों:


76

एंड्रॉइड में इसे स्पिनर कहा जाता है आप यहां ट्यूटोरियल देख सकते हैं।

हैलो, स्पिनर

और यह एक बहुत ही अस्पष्ट सवाल है, आपको अपनी समस्या के बारे में अधिक विवरणात्मक होने की कोशिश करनी चाहिए।


17
मेरा सुझाव है कि आप Android विकास के संदर्भ में इस पर विचार करें। Designerandroid.com/?p=8 । Android देव के संदर्भ में यह एक स्पिनर के रूप में जाना जाता है। कृपया अगली बार अपना शोध करें।
19:56

3
हां और जिस साइट को आपने स्वयं प्रदान किया है उसे देखकर आप देख सकते हैं कि वे उस पृष्ठ पर एक कॉम्बो बॉक्स का उल्लेख करते हैं लेकिन एपीआई में केवल स्पिनर ( डेवलपर. android.com/resources/tutorials/views/…) का संदर्भ है ) यहां वे स्पष्ट रूप से कहते हैं कि "स्पिनर आइटम चुनने के लिए ड्रॉप-डाउन सूची के समान एक विजेट है"। मैं आपसे सहमत हूं कि इस SHOULD को अन्य जावा कार्यान्वयन के साथ एक कॉम्बो बॉक्स कहा जाएगा लेकिन इस संदर्भ में यह नहीं है।
बड़बड़ाया

3
मैं समझता हूं कि मेटाफ़ॉर्म थोड़ा सा विटम मोबाइल यूआई बदल देता है। नए विजेट (नियंत्रण) हैं जो सीमित स्क्रीन एस्टेट का बेहतर उपयोग कर सकते हैं। मुझे लगता है कि कुछ नियंत्रणों के लिए नए नामों का उपयोग किया गया है, जो डेस्कटॉप रूपक हैं। - मैं मानता हूं कि स्पिनर ड्रॉप डाउन सूची के समान है। हालांकि बीच मुख्य अंतर यह ListBox (ड्रॉप डाउन सूची) और ComboBox कि कॉम्बो बॉक्स मूल रूप से एक पाठ इनपुट सूची से चुनकर की संभावना के साथ बढ़ाया क्षेत्र है। आप सूची बनाने के लिए या तो एक तत्व चुन सकते हैं या आप मनमाने मूल्य दर्ज कर सकते हैं।
vbence

15
नाइटपैकिंग बंद करो और स्वीकार करो कि हर किसी को एक नियंत्रण खोजने की समस्या थी जो एक कॉम्बो बॉक्स या सूची बॉक्स की तरह काम करता है पहली बार जब उन्होंने एक एंड्रॉइड ऐप लिखा ...
Torp

11
मैं अभी भी एक कॉम्बो बॉक्स की तलाश में हूं .. Ive देखा स्पिनर्स। स्पिनरों का इस्तेमाल किया। लेकिन स्पष्ट रूप से मेरे पास एक परिदृश्य है जहां मुझे किसी दिए गए विकल्प के अलावा किसी अन्य चीज़ के लिए पाठ सेट करने की आवश्यकता है। आका वे इसमें टाइप कर सकते हैं। स्पिनर कॉम्बो बॉक्स नहीं हैं, लेकिन वे आमतौर पर एक वैध विकल्प हैं।
IAmGroot

11

यहाँ 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);
   }
}

आशा है कि इससे सहायता मिलेगी!!


1
आपके जवाब के लिए धन्यवाद। मैं इस विजेट का उपयोग करना चाहता हूं लेकिन मैं स्ट्रिंग के एक सरणी का उपयोग करना चाहता हूं क्योंकि डेटा स्रोत एक कर्सर नहीं है। मुझे क्या करना चाहिए?
अली बेहज़ादियान नजद

7

परीक्षण नहीं किया गया है, लेकिन आप जितना करीब हो सकता है लगता है कि AutoCompleteTextView के साथ है । आप एक एडाप्टर लिख सकते हैं जो फिल्टर कार्यों को अनदेखा करता है। कुछ इस तरह:

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();
            }
        }
    }
}

... तो अपने 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);

कोड का परीक्षण नहीं किया गया है, फ़िल्टरिंग पद्धति के साथ कुछ विशेषताएं हो सकती हैं, जिन पर मैंने विचार नहीं किया था, लेकिन आपके पास यह है, एक स्वत: पूर्ण पाठ के साथ ComboBox का अनुकरण करने के लिए मूल सिद्धांत।

फिक्स्ड NullFilter कार्यान्वयन संपादित करें । हमें वस्तुओं पर पहुंच की आवश्यकता है, इस प्रकार UnconditionalArrayAdapterसूची के संदर्भ (एक बफर की तरह) के लिए आवश्यकताओं के निर्माता। आप उदा adapter = new UnconditionalArrayAdapter<String>(..., new ArrayList<String>);और फिर उपयोग कर सकते हैं adapter.add("Luxemburg"), इसलिए आपको बफर सूची को प्रबंधित करने की आवश्यकता नहीं है।


यह कोड संकलन के करीब नहीं आता है। GetFilter () के लिए कॉल एक अनंत लूप के प्रयासों की तरह दिखते हैं, और publishResults एक शून्य विधि से एक मान लौटा रहे हैं। कुल मिलाकर विचार अच्छा है, लेकिन किसी को इस उदाहरण को ठीक करना चाहिए।
19

6

स्पिनर और कॉम्बोबॉक्स के बाद से प्रश्न पूरी तरह से वैध और स्पष्ट है (इसे पढ़ें: स्पिनर जहां आप एक कस्टम मूल्य प्रदान कर सकते हैं) दो अलग-अलग चीजें हैं।

मैं खुद उसी चीज की तलाश में था और दिए गए उत्तरों से मैं संतुष्ट नहीं था। तो मैंने अपनी चीज खुद बनाई। शायद कुछ निम्नलिखित संकेत उपयोगी पाएंगे। मैं पूर्ण स्रोत कोड प्रदान नहीं कर रहा हूं क्योंकि मैं अपने प्रोजेक्ट में कुछ विरासत कॉल का उपयोग कर रहा हूं। यह वैसे भी बहुत स्पष्ट होना चाहिए।

यहाँ अंतिम बात का स्क्रीनशॉट है:

Android पर ComboBox

पहली बात यह थी कि एक ऐसा दृश्य तैयार किया जाए जो स्पिनर के समान हो जो अभी तक विस्तारित नहीं हुआ है। स्क्रीनशॉट में, स्क्रीन के ऊपर (फोकस से बाहर) आप स्पिनर और कस्टम दृश्य को सही तरीके से देख सकते हैं। उस उद्देश्य के लिए मैंने लिनियरलैट का उपयोग किया (वास्तव में, मुझे रैखिक लेआउट से विरासत में मिला है) style="?android:attr/spinnerStyle"। LinearLayout में TextView शामिल है style="?android:attr/spinnerItemStyle"। पूरा XML स्निपेट होगा:

<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>

जैसा कि, मैंने पहले उल्लेख किया है कि ComboBox को LinearLayout से विरासत में मिला है। यह OnClickListener को भी कार्यान्वित करता है जो XML फ़ाइल से फुले हुए कस्टम दृश्य के साथ एक संवाद बनाता है। यहाँ फुलाया गया दृश्य है:

<?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>

दो और श्रोता हैं जिन्हें आपको लागू करने की आवश्यकता है: सूची के लिए onItem पर क्लिक करें और बटन के लिए क्लिक करें। इन दोनों ने चयनित मूल्य निर्धारित किया और संवाद को खारिज कर दिया।

सूची के लिए, आप चाहते हैं कि यह विस्तारित स्पिनर के समान दिखे, आप ऐसा कर सकते हैं कि सूची एडेप्टर को इस तरह उपयुक्त (स्पिनर) शैली प्रदान करें:

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

कमोबेश, यही होना चाहिए।


अछा लगता है। मैं आपके समाधान को लागू करने का प्रयास कर रहा हूं, लेकिन मैं एंड्रॉइड विकास के लिए नया हूं, और मैं थोड़ा उलझन में हूं कि स्निपेट्स को कहां रखा जाए। क्या आप इसे संशोधित करने के बारे में बताने के लिए थोड़ा संशोधित करना चाहेंगे?
YouAGitForNotUsingGit

4

कस्टम मेड :) आप सूची को वर्तमान में रखने के लिए ड्रॉपडाउन होरी / वर्टिकल ऑफ़सेट गुणों का उपयोग कर सकते हैं, एंड्रॉइड को भी आज़मा सकते हैं: spinnerMode = "डायलॉग" यह कूलर है।

ख़ाका

  <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>

जावा

          //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 / मान / स्ट्रिंग

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

क्या यह उपयोगी था ??


आपका जवाब कैसे? जहां AutoCompleteTextView पर क्लिक करें और दिखाएं?
ज़रीनी मायो

आप अपनी इच्छानुसार AutoCompleteTextView या स्पिनर में अतिरिक्त ईवेंट जोड़ सकते हैं।
ShAKKiR

0

एक कॉम्बोक्स के लिए ( http://en.wikipedia.org/wiki/Combo_box ) जो मुफ्त पाठ इनपुट की अनुमति देता है और एक ड्रॉपडाउन सूची है जिसका मैंने उपयोग किया थाAutoCompleteTextView vbence द्वारा सुझाए अनुसार ।

मैंने इस्तेमाल किया onClickListenerउपयोगकर्ता द्वारा नियंत्रण का चयन करने पर ड्रॉपडाउन सूची बॉक्स प्रदर्शित करता था।

मेरा मानना ​​है कि यह इस तरह के कॉम्बोक्स से मिलता जुलता है।

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);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.