অ্যান্ড্রয়েডে কোনও স্পিনারকে কীভাবে কাস্টমাইজ করতে হয়


140

আমি একটি ড্রপডাউন একটি কাস্টম উচ্চতা যোগ করতে চান Spinner, 30dp বলুন, এবং আমি এর ড্রপডাউন তালিকার বিভাজকগুলি আড়াল করতে চাই Spinner

এখনও অবধি আমি নিম্নলিখিত স্টাইলটি প্রয়োগ করার চেষ্টা করেছি Spinner:

<style name="spinner_style">
        <item name="android:paddingLeft">0dp</item>
        <item name="android:dropDownWidth">533dp</item>
        <item name="android:showDividers">none</item>
        <item name="android:dividerHeight">0dp</item>
        <item name="android:popupBackground">@drawable/new_bg</item>
        <item name="android:dropDownHeight">70dp</item>
        <item name="android:scrollbarAlwaysDrawVerticalTrack">true</item>
        <item name="android:dropDownSelector">@android:color/white</item>
 </style>

এবং আমার স্পিনারটির কোডটি হ'ল:

<Spinner
            android:id="@+id/pioedittxt5"
            android:layout_width="543dp"
            android:layout_height="63dp"
            android:layout_toRightOf="@+id/piotxt5"
            android:background="@drawable/spinner"
            style="@style/spinner_style"
            android:dropDownVerticalOffset="-53dp"
            android:spinnerMode="dropdown"
            android:drawSelectorOnTop="true"
            android:entries="@array/travelreasons"
            android:prompt="@string/prompt" />

তবে কিছুই কাজ করছে বলে মনে হচ্ছে না।



শৈলীর কোনওটিই প্রয়োগ হয় না? পপআপব্যাকগ্রাউন্ড বা অন্য কিছু? স্ট্রেঞ্জ।
চিন্তন সোনি

@ হউসাইন: আমি ইতিমধ্যে সেই উদাহরণগুলি ব্যবহার করে দেখেছি .. আমি ড্রপডাউন তালিকার উচ্চতা সামঞ্জস্য করতে চাই
শ্রুতি

@ shree202: কোনও স্টাইল প্রযোজ্য নয়
শ্রুতি

1
@ কোমাইন, এটি কোনও অ্যান্ড্রয়েড স্টাইল নয়, তবে তিনি তৈরি করেছেন এমন একটি কাস্টম। সে কারণেই তার কেবল "স্টাইল =" রয়েছে
সাইবারক্লা

উত্তর:


194

আপনার স্পিনার জন্য একটি কাস্টম বিন্যাস সঙ্গে একটি কাস্টম অ্যাডাপ্টার তৈরি করুন।

Spinner spinner = (Spinner) findViewById(R.id.pioedittxt5);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
        R.array.travelreasons, R.layout.simple_spinner_item);
adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

R.layout.simple_spinner_item

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1"
    style="@style/spinnerItemStyle"
    android:maxLines="1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee" />

R.layout.simple_spinner_dropdown_item

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

শৈলীতে আপনার প্রয়োজন অনুসারে আপনার পছন্দসই মাত্রা এবং উচ্চতা যুক্ত করুন।

 <style name="spinnerItemStyle" parent="android:Widget.TextView.SpinnerItem">

  </style>

  <style name="spinnerDropDownItemStyle" parent="android:TextAppearance.Widget.TextView.SpinnerItem">

  </style>

3
পরিবর্তন করার চেষ্টা করুন <item name="android:height"> থেকে<item name="android:layout_height">
তরুন

1
জবাব দেওয়ার জন্য থ্যাঙ্কস .. চেষ্টা করেছেন কিন্তু কোন ফলস্বরূপ না ... গত
২-৩

5
@ তারুন, আপনার কি android:id="@+android:id/text1"সরল_স্পিনার_ড্রপডাউন_টিম.এক্সএমএল ফাইলের দরকার নেই?
ব্যাটব্র্যাট

1
আর.লেআউটআউট.সিম্পল_স্পিনার_প্রডাউন ডাউন_াইটেমে, অ্যান্ড্রয়েড পরিবর্তন করুন: লেআউট_উইট মানটি "?" / অ্যাড্রোপডাউনলিস্টপ্রিফার্ডার্ড আইটেম হাইট "এ বা আপনি একটি ত্রুটি পাবেন:" ত্রুটি: বৈশিষ্ট্যটি পাবলিক নয় "
লেনিক্স

9
এই উত্তরের ভবিষ্যতের দর্শকদের জন্য : একটি বিন্যাসের মধ্যে টেক্সটভিউ এবং চেকড টেক্সটভিউটি মোড়ানো করবেন না । এটি সরাসরি আপনার লেআউট_ফিল.এক্সএমএল ফাইলে পোস্ট করুন। ভুলটি কি ছিল তা না পাওয়া পর্যন্ত আমি কয়েক ঘন্টা এখানে আটকে ছিলাম।
ফ্রান্সিসকো রোমেরো

95

আপনি সম্পূর্ণ কাস্টম স্পিনার ডিজাইন তৈরি করতে পারেন

পদক্ষেপ 1: স্প্রিনারের সীমানার জন্য ড্রয়যোগ্য ফোল্ডারে ব্যাকগ্রাউন্ড.এক্সএমএল তৈরি করুন।

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/transparent" />
<corners android:radius="5dp" />
<stroke
android:width="1dp"
   android:color="@android:color/darker_gray" />
</shape>

পদক্ষেপ 2: স্পিনার লেআউট ডিজাইনের জন্য এই ড্রপ-ডাউন আইকন বা কোনও চিত্র ড্রপ.পিএনজি ব্যবহার করুন এখানে চিত্র বর্ণনা লিখুন

 <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginRight="3dp"
    android:layout_weight=".28"
    android:background="@drawable/spinner_border"
    android:orientation="horizontal">

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_gravity="center"
        android:background="@android:color/transparent"
        android:gravity="center"
        android:layout_marginLeft="5dp"
        android:spinnerMode="dropdown" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_gravity="center"
        android:src="@mipmap/drop" />

</RelativeLayout>

অবশেষে চিত্রের নীচের মতো দেখতে এটি গোলাকৃতির অঞ্চলে সর্বত্র ক্লিকযোগ্য এবং ইমেজভিউয়ের জন্য লিস্টার ক্লিক করার দরকার নেই।

এখানে চিত্র বর্ণনা লিখুন

স্টিপি 3: ড্রপ-ডাউন ডিজাইনের জন্য, ড্রপডাউন তালিকাভিউ থেকে লাইনটি সরিয়ে এবং পটভূমির রঙ পরিবর্তন করুন, কাস্টম অ্যাডাপ্টারের মতো তৈরি করুন

Spinner spinner = (Spinner) findViewById(R.id.spinner1);
String[] years = {"1996","1997","1998","1998"};
ArrayAdapter<CharSequence> langAdapter = new ArrayAdapter<CharSequence>(getActivity(), R.layout.spinner_text, years );
langAdapter.setDropDownViewResource(R.layout.simple_spinner_dropdown);
mSpinner5.setAdapter(langAdapter);

বিন্যাস ফোল্ডারে R.layout.spinner_text.xML তৈরি করুন

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layoutDirection="ltr"
android:id="@android:id/text1"
style="@style/spinnerItemStyle"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:paddingLeft="2dp"
/>

লেআউট ফোল্ডারে সরল_স্পিনার_ড্রপডাউন.এক্সএমএল তৈরি করুন

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="@style/spinnerDropDownItemStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:paddingBottom="5dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="5dp"
android:singleLine="true" />

শৈলীতে, আপনি নিজের প্রয়োজন অনুসারে কাস্টম মাত্রা এবং উচ্চতা যোগ করতে পারেন।

<style name="spinnerItemStyle" parent="android:Widget.TextView.SpinnerItem">
</style>

<style name="spinnerDropDownItemStyle" parent="android:TextAppearance.Widget.TextView.SpinnerItem">
</style>

অবশেষে দেখতে

এখানে চিত্র বর্ণনা লিখুন

প্রয়োজনীয়তা অনুসারে, আপনি সরল_স্পিনার_ড্রপডাউন.এক্সএমএল এর পটভূমির রঙ বা পাঠ্যের রঙ পরিবর্তন করে পটভূমি রঙ এবং ড্রপ-ডাউন রঙের পাঠ্য পরিবর্তন করতে পারেন


প্রথম কোডটিতে স্নিপড বলতে কী আপনার বোঝায় অ্যান্ড্রয়েড: উচ্চতা = line লাইনে "1 ডিপি"?
উইল মেন্টজেল

ভুল করে দু'বার অ্যান্ড্রয়েড লিখুন: প্রস্থ = "1 ডিপি"
কুমার

2
কোনও সমস্যা নেই, আমি নিজেই এটি সম্পাদনা করতে চাইনি কারণ আমি নিশ্চিত নই, আপনি যদি "1 ডিপি" দিয়ে উচ্চতা নির্দিষ্ট করতে চান বা এটি কেবল একটি সদৃশ ছিল। ভাল উত্তর যদিও। :)
উইল মেন্টজেল

@ বিনেশকুমার আরে আপনি কি চেকডেক্সটভিউ ঘোষণা করেছেন তা আমি জানতে পারি? কারণ যখন আমি
কোডটিতে আটকালাম

2
ম্যান, আপনি আপনার লেআউট এবং ড্রএবেলে নামগুলি ব্যবহার করতে পারতেন, আমি আধ ঘন্টা ব্যয় করেছি এবং এখনও কী করতে হবে তার কোনও ক্লু নেই। খারাপ উত্তরের জন্য বিয়োগ।
আন্তন কিজেমা

21

আমি এখনও অবধি সবচেয়ে মার্জিত এবং নমনীয় সমাধানটি এখানে পেয়েছি: http://android-er.blogspot.sg/2010/12/custom-arrayadapter-for-spinner-with.html

মূলত, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. আপনার ড্রপডাউন আইটেমটির জন্য কাস্টম লেআউট এক্সএমএল ফাইল তৈরি করুন, আসুন ধরা যাক আমি এটিকে স্পিনার_সাইটম.এক্সএমএল বলব
  2. আপনার ড্রপডাউন অ্যাডাপ্টারের জন্য কাস্টম ভিউ ক্লাস তৈরি করুন। এই কাস্টম ক্লাসে, আপনাকে উইটভিউ () এবং গেটড্রপডাউনভিউ () পদ্ধতিতে আপনার কাস্টম ড্রপডাউন আইটেম লেআউটটিকে ওভাররাইট করে সেট করতে হবে। আমার কোডটি নীচের মতো:

    public class CustomArrayAdapter extends ArrayAdapter<String>{
    
    private List<String> objects;
    private Context context;
    
    public CustomArrayAdapter(Context context, int resourceId,
         List<String> objects) {
         super(context, resourceId, objects);
         this.objects = objects;
         this.context = context;
    }
    
    @Override
    public View getDropDownView(int position, View convertView,
        ViewGroup parent) {
        return getCustomView(position, convertView, parent);
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      return getCustomView(position, convertView, parent);
    }
    
    public View getCustomView(int position, View convertView, ViewGroup parent) {
    
    LayoutInflater inflater=(LayoutInflater) context.getSystemService(  Context.LAYOUT_INFLATER_SERVICE );
    View row=inflater.inflate(R.layout.spinner_item, parent, false);
    TextView label=(TextView)row.findViewById(R.id.spItem);
     label.setText(objects.get(position));
    
    if (position == 0) {//Special style for dropdown header
          label.setTextColor(context.getResources().getColor(R.color.text_hint_color));
    }
    
    return row;
    }
    
    }
  3. আপনার ক্রিয়াকলাপ বা খণ্ডে, আপনার স্পিনার দর্শনের জন্য কাস্টম অ্যাডাপ্টারটি ব্যবহার করুন। এটার মতো কিছু:

    Spinner sp = (Spinner)findViewById(R.id.spMySpinner);
    ArrayAdapter<String> myAdapter = new CustomArrayAdapter(this, R.layout.spinner_item, options);
    sp.setAdapter(myAdapter);

যেখানে বিকল্পগুলি ড্রপডাউন আইটেম স্ট্রিংয়ের তালিকা।


আমার জন্য কৌশলটি ড্রপডাউনভিউকে ওভাররাইড করছিল, আমি getView কে ওভাররাইড করছিলাম, কিন্তু বুঝতে পারি নি যে আমাকে সেই পদ্ধতিটি ওভাররাইড করতে হবে।
estebanuri

7

এটা চেষ্টা কর

আমি যখন অন্যান্য সমাধানের চেষ্টা করছিলাম তখন আমি প্রচুর সমস্যার মুখোমুখি হয়েছি ...... এখন অনেকগুলি গবেষণা ও উন্নয়নের পরে আমি সমাধান পেয়েছি

  1. লেআউট ফোল্ডারে কাস্টম_স্পিন.এক্সএমএল তৈরি করুন এবং এই কোডটি পেস্ট করুন

     <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorGray">
    <TextView
    android:id="@+id/tv_spinnervalue"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/colorWhite"
    android:gravity="center"
    android:layout_alignParentLeft="true"
    android:textSize="@dimen/_18dp"
    android:layout_marginTop="@dimen/_3dp"/>
    <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:background="@drawable/men_icon"/>
    </RelativeLayout>
  2. আপনার ক্রিয়াকলাপে

    Spinner spinner =(Spinner)view.findViewById(R.id.sp_colorpalates);
    String[] years = {"1996","1997","1998","1998"};
    spinner.setAdapter(new SpinnerAdapter(this, R.layout.custom_spinner, years));
  3. অ্যাডাপ্টারের একটি নতুন ক্লাস তৈরি করুন

    public class SpinnerAdapter extends ArrayAdapter<String> {
    private String[] objects;
    
    public SpinnerAdapter(Context context, int textViewResourceId, String[] objects) {
        super(context, textViewResourceId, objects);
        this.objects=objects;
    }
    
    @Override
    public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent) {
        return getCustomView(position, convertView, parent);
    }
    
    @NonNull
    @Override
    public View getView(int position, View convertView, @NonNull ViewGroup parent) {
        return getCustomView(position, convertView, parent);
    }
    
    private View getCustomView(final int position, View convertView, ViewGroup parent) {
        View row = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_spinner, parent, false);
        final TextView label=(TextView)row.findViewById(R.id.tv_spinnervalue);
        label.setText(objects[position]);
        return row;
    }
    }

এটি আমাকে স্পিনারের উপর ক্লিক করার পরে সমস্ত আইটেমের পুরুষ_ আইকন চিত্র দিয়েছে যা আমি যা খুঁজছিলাম তা নয়। আপনি যদি স্পিনারে ক্লিক করার পরে সমস্ত সারিটিতে পুরুষ_ আইকন চিত্র (বা অন্যান্য কাস্টমাইজেশন) দেখতে না চান তবে "গেটড্রপডাউনভিউ" ওভাররাইড সরান।
ব্রেটিনস

2

এটি আমার পক্ষে কাজ করেছে:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),R.layout.simple_spinner_item,areas);
            Spinner areasSpinner = (Spinner) view.findViewById(R.id.area_spinner);
            areasSpinner.setAdapter(adapter);

এবং আমার লেআউট ফোল্ডারে আমি তৈরি করেছি simple_spinner_item:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
// add custom fields here 
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
android:paddingRight="?android:attr/listPreferredItemPaddingRight" />

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.