আমি স্পিনারের ড্রপডাউনয়ের জন্য কীভাবে আলাদা থিম সেট করব?


102

একটি উদাহরণ ব্যবহার:

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

স্পিনারটি অন্ধকারযুক্ত থিমযুক্ত, তবে আমি চাই যে ড্রপডাউনটি হালকা থিমযুক্ত হোক।

উত্তর:


195

অ্যান্ড্রয়েড এম

অ্যান্ড্রয়েড .0.০-তে নতুন, স্পিনারের এখন android:popupThemeপ্যারামিটার রয়েছে যা আপনাকে পপআপ (ড্রপডাউন) এর জন্য ব্যবহৃত থিম সেট করতে দেয়।

আপনি এটি হিসাবে ব্যবহার করতে পারেন:

<Spinner
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:popupTheme="@android:style/ThemeOverlay.Material.Light" />

এটি 23++ এআইপি স্তরের ডিভাইসগুলিতে কাজ করবে তবে অ্যান্ড্রয়েডের নিম্ন সংস্করণে চলমান ডিভাইসগুলিতে নয়।

AppCompat

এটিই অ্যাপকম্প্যাটটি আসে। এর স্পিনার বাস্তবায়নও সমর্থন করে popupThemeতবে সঠিক হওয়ার জন্য এটি আরও কিছুটা জড়িত।

<Spinner
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

এর পরে, অ্যাপকম্প্যাট দিয়ে কাজ করতে সক্ষম হতে আপনাকে আপনার অ্যাডাপ্টারটি আপডেট করতে হবে। আপনি এটি নতুন ThemedSpinnerAdapterইন্টারফেসটি প্রয়োগ করে তা করেন ।

public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {

   Theme getDropDownViewTheme() { ... }

   void setDropDownViewTheme(Theme theme) { ... }

}

এই পদ্ধতিগুলি স্পিনার দ্বারা কোনও ড্রপ ডাউন ভিউগুলিকে উত্সাহিত করার জন্য কোন থিমটি ব্যবহার করতে হবে তা অ্যাডাপ্টারটি বলতে সক্ষম হয়। এটি যতটা সম্ভব সহজ করার জন্য আমরা আপনাকে একটি Helperক্লাস দিয়েছি যা আপনি আপনার অ্যাডাপ্টারে প্লাগ ইন করতে পারেন।

এর অর্থ হল যে আপনার অ্যাডাপ্টারটি এমন কিছু হয়ে যায়:

public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
  private final ThemedSpinnerAdapter.Helper mDropDownHelper;

  public MyAdapter(Context context) { 
    mDropDownHelper = new ThemedSpinnerAdapter.Helper(context);
  }

  @Override
  public View getDropDownView(int position, View convertView, ViewGroup parent) {
    View view;

    if (convertView == null) {
      // Inflate the drop down using the helper's LayoutInflater
      LayoutInflater inflater = mDropDownHelper.getDropDownViewInflater();
      view = inflater.inflate(R.layout.my_dropdown, parent, false);
    }

    // ...

    return view;
  }

  @Override
  public void setDropDownViewTheme(Theme theme) {
    mDropDownHelper.setDropDownViewTheme(theme);
  }

  @Override
  public Theme getDropDownViewTheme() {
    return mDropDownHelper.getDropDownViewTheme();
  }
}

হাই, আমি অ্যাপকম্প্যাট-ভি 7 এর মধ্যে থিমডস্পিনার অ্যাডাপ্টারটি খুঁজে পেলাম না। আমি 22.2.1 সংস্করণ ব্যবহার করছি। আমদানি করার জন্য আমাকে কি আলাদা কিছু করতে হবে?
ডগলাস আলভেস

3
@ ডগলাস আলভাস সর্বশেষ 23.0.0 ব্যবহার করুন
খুশরাভ

দেখে মনে হচ্ছে অ্যান্ড্রয়েড স্টুডিও অ্যাপটি সম্পর্কে জানেন না: পপআপ থিম স্পিনার বৈশিষ্ট্য: ট্যাগ স্পিনারের জন্য "অপ্রত্যাশিত নেমস্পেস উপসর্গ" অ্যাপ্লিকেশন "পাওয়া গেছে"। লিন্টও একই ত্রুটির সাথে ব্যর্থ হয়।
makovkastar

1
@ ক্রিস ব্যানস: এটি আপনার থিমটি নির্বিশেষে অন্ধকার পটভূমির সাথে ড্রপ ডাউন তালিকা দেয়।
আশ্বিন

2
এটি কি xML- এ "স্পিনার" এর পরিবর্তে "android.support.v7.widget.appCompatSpinner" ব্যবহার করা উচিত?
অ্যাঞ্জেল কোহ

2

জন্য স্পিনার এর তীর আমি ব্যবহার করেছি android:backgroundTint="@color/white"এই API 21 থেকে কাজ করবে

স্পিনার দর্শন এবং ড্রপডাউন দেখার জন্য:

ArrayAdapter<Area> areasAdapter = new ArrayAdapter<Area>(getContext(),R.layout.spinner_item, areas);

areasAdapter.setDropDownViewResource(R.layout.dropdwon_item);
areasSpinner.setAdapter(areasAdapter);

জন্য getView () অ্যাডাপ্টারের spinner_item.xml ব্যবহার করবে

জন্য getDropDownView () অ্যাডাপ্টারের dropdwon_item.xml ব্যবহার করবে

তারপরে আপনি নিজের পছন্দ মতো আপনার কাস্টম লেআউটগুলি ব্যবহার করতে পারেন

আশা করি এটা সাহায্য করবে


0

কেবলমাত্র রেফারেন্সের জন্য আপনি যদি CursorAdapterপ্রয়োগটি প্রয়োগ করেন তবে আপনার প্রয়োগটি আরও সহজ হতে পারে, কেবল ওভাররাইড করা উচিত newView(), getDropDownView()সেখানে ওভাররাইড করার দরকার নেই:

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return mDropDownHelper.getDropDownViewInflater().inflate(R.layout.list_item, parent, false);
}

-6

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

<TextView 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:padding="10dp"
android:background = "#ffffff"
android:textColor="@color/primary_text"
android:textSize="@dimen/text_size_normal" />

তারপরে এই কোডটি ব্যবহার করুন:

spinnerAdapter = new ArrayAdapter<String>(R.layout.spinner_item,items);

6
আমি অনুমান করি কারণ এটি মোটামুটি সুস্পষ্ট কারণ এটি প্রশ্নের উত্তর দেয় না। প্রশ্নটি একটি থিম সেট করার বিষয়ে, আমি এই উত্তরে তাদের কোনও প্রকারের উল্লেখ দেখতে পাচ্ছি না। ঠিক তাই আমরা স্পষ্ট, আমি এটিকে কম করি না, অন্যরা ইতিমধ্যে এটি যথেষ্ট পরিমাণে গেছে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.