android - কিভাবে স্পিনার টেক্সট আকার এবং টেক্সট রঙ পরিবর্তন?




spinner (15)

আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে, আমি স্পিনার ব্যবহার করছি এবং স্পিনারে SQLite ডাটাবেস থেকে ডেটা লোড করেছি এবং এটি সঠিকভাবে কাজ করছে। এখানে যে জন্য কোড।

Spinner spinner = (Spinner) this.findViewById(R.id.spinner1);
List<String> list = new ArrayList<String>();
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>  (this,android.R.layout.simple_spinner_item, list);
cursor.moveToFirst();

list.add("All Lists");

if (cursor.getCount() > 0) {
    for (int i = 0; i < cursor.getCount(); i++) {
        keyList[i] = cursor.getString(cursor.getColumnIndex(AndroidOpenDbHelper.KEYWORD));
        list.add(keyList[i]);
        cursor.moveToNext();
    }
}
Database.close();
cursor.close();
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapter);

এখন আমি স্পিনার ডেটা টেক্সট রঙ এবং টেক্সট আকার পরিবর্তন করতে চান। আমি আমার এক্সএমএল ফাইলে আমার স্পিনার ট্যাগে এক্সএমএল লাইন অনুসরণ করেছি, কিন্তু এটি কাজ করছে না।

android:textColor="@android:color/white"
android:textSize="11dp"

আমি কিভাবে আমার স্পিনারের টেক্সট রঙ এবং পাঠ্য আকার পরিবর্তন করতে পারি?


আপনার স্পিনার আইটেমের জন্য একটি কাস্টম এক্সএমএল ফাইল তৈরি করুন।

spinner_item.xml:

আপনার কাস্টমাইজড রঙ এবং আকার এই ফাইলে পাঠ্য দিতে।

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

<TextView  
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:gravity="left"  
    android:textColor="#FF0000"         
    android:padding="5dip"
    />

এখন আপনার স্পিনার আইটেমগুলি দেখানোর জন্য এই ফাইলটি ব্যবহার করুন:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_item,list);

আপনি ড্রপ ডাউন সম্পদ সেট করতে হবে না। স্পিনারে আপনার আইটেমগুলি দেখানোর জন্য এটি spinner_item.xml নিতে হবে।


আপনি যদিroid.support.v7.widget.AppCompatSpinner এর সাথে কাজ করেন তবে শৈলী ব্যবহার করে সর্বাধিক পরীক্ষা করা সমাধান:

 <android.support.v7.widget.AppCompatSpinner
                    android:id="@+id/spefcialFx"
                    style="@style/Widget.AppCompat.Spinner.Underlined"
                    android:layout_width="200dp"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="4dp"
                    android:theme="@style/Spinner"
                    android:entries="@array/special_fx_arrays"
                    android:textSize="@dimen/text_size_normal"></android.support.v7.widget.AppCompatSpinner>

এবং শৈলী:

<style name="Spinner" parent="Widget.AppCompat.Light.DropDownItem.Spinner">
        <item name="android:paddingStart">0dp</item>
        <item name="android:paddingEnd">0dp</item>
        <item name="android:textColor">@color/white</item>
        <item name="android:backgroundTint">@color/red</item>
        <item name="android:textSize">14sp</item>
    </style>

শুধুমাত্র নেকড়ে Android: ব্যাকগ্রাউন্ডটি ড্রপডাউন তীর এবং ড্রপডাউন ব্যাকগ্রাউন্ড উভয়ের জন্য রঙ সেট করে।


আমি এটি অনুসরণ করে করেছি। আমি GetDropDownView () এবং getView () পদ্ধতি ব্যবহার করেছি।

খোলা স্পিনারের জন্য getDropDownView() ব্যবহার করুন।

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
  View view = convertView;
  if (view == null) {
    LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = vi.inflate(R.layout.context_row_icon, null);
  }
  TextView mTitle = (TextView) view.findViewById(R.id.context_label);
  ImageView flag = (ImageView) view.findViewById(R.id.context_icon);                

  mTitle.setText(values[position].getLabel(activity));

  if (!((LabelItem) getItem(position)).isEnabled()) {
    mTitle.setTextColor(activity.getResources().getColor(R.color.context_item_disabled));
  } else {
    mTitle.setTextColor(activity.getResources().getColor(R.color.context_item));
  }
  return view;
}

এবং বন্ধ স্পিনারের জন্য getView() ব্যবহার করুন।

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  View view = convertView;
  if (view == null) {
    LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = vi.inflate(R.layout.context_row_icon, null);
  }
  TextView mTitle = (TextView) view.findViewById(R.id.context_label);
  ImageView flag = (ImageView) view.findViewById(R.id.context_icon);

  mTitle.setText(values[position].getLabel(activity));
  mTitle.setTextColor(activity.getResources().getColor(R.color.context_item_disabled));

  return view;
}

আশরাফের সমাধান আরেকটি পার্থক্য নিশ্চিত করতে হবে যে আপনি স্ক্রিনের আকারগুলি বিবেচনা করছেন। আপনি স্পিনারটি পেতে হবে এবং ক্রিয়েটর সেট আপ করার পরে আপনাকে অ্যাডাপ্টারটি সেট করতে হবে:

//set your adapter with default or custom spinner cell, then://
serverSpinner.setOnItemSelectedListener(spinnerSelector);
serverSpinner.setSelection(defaultServer);

তারপরে স্পিনার ক্লিক করার আগে দেখানো দর্শনের পাঠ্য আকার পরিবর্তন করতে পারেন:

private AdapterView.OnItemSelectedListener spinnerSelector = new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
        boolean largeTablet = getResources().getBoolean(R.bool.isLargeTablet);
        if (tabletSize) { ((TextView)parent.getChildAt(0)).setTextSize(16); }
        else if (largeTablet) { ((TextView)parent.getChildAt(0)).setTextSize(18); }
        else { ((TextView)parent.getChildAt(0)).setTextSize(12); }
    }
    public void onNothingSelected(AdapterView<?> parent) {

    }
};

আপনাকে যা করতে হবে তা এইরকম লেআউট নির্দিষ্ট ফোল্ডার তৈরি করুন:

মান-sw360dp

মান-sw600dp

মান-sw800dp

তারপরে এই ফোল্ডারগুলির প্রতিটিতে "bool.xml" নামে একটি XML ফাইল যুক্ত করুন:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="isTablet">false</bool>
    <bool name="isLargeTablet">false</bool>
</resources>

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

এখানে ক্লিক করুন

<Spinner
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/spinner"
    android:textSize="20sp"
    android:entries="@array/planets"/>

স্পিনার আইটেম spinner_item.xml এর জন্য আপনার নিজস্ব লেআউট ফাইলটি কাস্টম সংজ্ঞা দিয়ে তৈরি করতে হবে:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:textColor="#ff0000" />

আপনি ড্রপডাউন তালিকা আইটেমগুলি কাস্টমাইজ করতে চান তবে আপনাকে একটি নতুন লেআউট ফাইল তৈরি করতে হবে। spinner_dropdown_item.xml :

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/spinnerDropDownItemStyle"
    android:maxLines="1"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:ellipsize="marquee"
    android:textColor="#aa66cc"/>

এবং স্পিনার ঘোষণার পর অবশেষে আরেকটি পরিবর্তন:

ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
R.array.planets_array, R.layout.spinner_item);

adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
spinner.setAdapter(adapter);

এটাই.


ছোট আকারের জন্য একটি কাস্টম লেআউট তৈরি করার পরিবর্তে এবং আপনি যদি স্পিনারের জন্য Android এর অভ্যন্তরীণ ছোট আকারের লেআউট ব্যবহার করতে চান তবে আপনাকে এটি ব্যবহার করতে হবে:

"android.R.layout.simple_gallery_item" এর পরিবর্তে "android.R.layout.simple_spinner_item"।

ArrayAdapter<CharSequence> madaptor = ArrayAdapter
            .createFromResource(rootView.getContext(),
                                R.array.String_visitor,
                                android.R.layout.simple_gallery_item);

এটি স্পিনারের লেআউটের আকার হ্রাস করতে পারে। এটা শুধু একটি সহজ কৌশল।

আপনি ড্রপ ডাউন তালিকা আকার কমানো করতে চান তাহলে এই ব্যবহার করুন:

madaptor.setDropDownViewResource(android.R.layout.simple_gallery_item);

পুনরায় ব্যবহার / anroid.R.layout সংস্থান পরিবর্তন করার সবচেয়ে সহজ উপায় মাত্র সংজ্ঞা যান। অ্যান্ড্রয়েড স্টুডিওতে, Ctrl + B করুন android.R.layout.simple_spinner_item.xml এ।

এটি আপনাকে সম্পদ ফাইল এ নিয়ে যাবে। শুধু সংস্থান ফাইলটি অনুলিপি করুন এবং আপনার প্যাকেজটিতে একটি নতুন বিন্যাস যুক্ত করুন। Rlayout ফোল্ডার এবং পাঠ্যউইকের রঙটি আপনার পছন্দ অনুসারে পরিবর্তন করুন এবং তারপরে এটিকে অ্যাডাপ্টারে এটিকে কল করুন:

ArrayAdapter<String> adapter = new ArrayAdapter<String(Context,R.layout.spinner_item, spinnerlist);

প্রথমে আমাদের textview জন্য নীচের মতো সহজ xml সংস্থান ফাইল তৈরি করতে হবে:

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

 <TextView  
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:gravity="left"  
    android:textColor="#FF0000"         
    android:padding="5dip"
    />   

এবং এটি সংরক্ষণ করুন। আপনার অ্যাডাপ্টারের তালিকায় সেট পরে।


যদি আপনি কেবল নির্বাচিত আইটেমটিতে পাঠ্য রঙ পরিবর্তন করতে চান, তবে এটি একটি সম্ভাব্য কাজকর্ম হতে পারে। এটা আমার জন্য কাজ এবং পাশাপাশি আপনার জন্য কাজ করা উচিত।

spinner.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                ((TextView) spinner.getSelectedView()).setTextColor(Color.WHITE);
            }
        });

যারা DrowDownIcon রঙ পরিবর্তন করতে চান তাদের জন্য আপনি এটি ব্যবহার করতে পারেন

spinner.getBackground().setColorFilter(Color.parseColor("#ffffff"), PorterDuff.Mode.SRC_ATOP);

শুধু এই মত নতুন শৈলী যোগ করুন:

<style name="mySpinnerItemStyle" parent="ThemeOverlay.AppCompat.Dark">
    <item name="android:textColor">#000</item>
    <item name="android:color">#000</item>
</style>

এবং এটি ব্যবহার করুন:

<Spinner
      android:id="@+id/spinnerCategories"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      style="@style/mySpinnerItemStyle"
      android:layout_margin="5dp" />

সরল: আমার জন্য কাজ করে

TextView spinnerText = (TextView) spinner.getChildAt(0);

spinnerText.setTextColor(Color.RED);

স্পিনার ড্রপডাউন আইটেমগুলির জন্য কাস্টম স্টাইল ব্যবহার করার জন্য অন্য স্পিনারদের একই টেক্সট রঙ থাকতে পারে, তবে অন্য পদ্ধতির:

res/values/styles.xml :

<resources>
    <style name="AppBaseTheme" parent="android:Theme.Light">
    </style>

    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:spinnerDropDownItemStyle">@style/mySpinnerItemStyle</item>
    </style>

    <style name="mySpinnerItemStyle" parent="@android:style/Widget.Holo.DropDownItem.Spinner">
        <item name="android:textColor">@color/my_spinner_text_color</item>
    </style>
</resources>

এবং res / values ​​/ colors.xml এ আপনার কাস্টম রঙ সংজ্ঞায়িত করুন:

<color name="my_spinner_text_color">#808080</color>

স্পিনার পাঠ্যের রং পরিবর্তন করতে:

 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            ((TextView) parent.getChildAt(0)).setTextColor(Color.WHITE);}

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1"
    style="?android:attr/spinnerItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="#fff"
    android:ellipsize="marquee"
    android:textAlignment="inherit"/>

শুধু এই ব্যবহার করুন:

ArrayAdapter<String> adapter_category = new ArrayAdapter<String>(this,
    R.layout.spinner_list_item, categories);
adapter_category
    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);




spinner