Как поместить значок для пользовательского счетчика в Android

#android #android-spinner

#Android #android-счетчик

Вопрос:

Что у меня есть :: У меня есть панель действий с пользовательским счетчиком

Что я пытаюсь сделать::

  • как видно на снимке ниже на панели действий, я вижу установленный выбор, я всегда хочу показывать значок по умолчанию, который не должен меняться при выборе счетчика
  • Как этого добиться

введите описание изображения здесь


FragmentContainer.java

 public class FragmentContainer extends Fragment{
    View spinnerView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view=inflater.inflate(R.layout.fragment_main, container, false);
        spinnerView = inflater.inflate(R.layout.layout_spinner, null);

        return view;
    }

    @Override
    public void onStart() {
        super.onStart();

        Spinner spinner = (Spinner) spinnerView.findViewById(R.id.my_spinner);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.array.spinner_items_array, R.layout.spinner_item);
        adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
        spinner.setAdapter(adapter);

        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                // Do whatever you want with your selected item. You can get it as: parent.getItemAtPosition(position); 
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {}
        });

        getActivity().getActionBar().setIcon(getResources().getDrawable(R.drawable.ic_launcher));//set your actionbar logo
        getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE );

        LayoutParams layoutParams = new ActionBar.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
        layoutParams.gravity = Gravity.RIGHT; // set your layout's gravity to 'right'
        getActivity().getActionBar().setCustomView(spinnerView, layoutParams); //place your layout on the actionbar

    }
}
  

MainActivity.java

 public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportFragmentManager().beginTransaction().replace(R.id.container, new FragmentContainer()).commit();
    }

}
  

spinner_item.xml

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

spinner_drop_down_item.xml

 <?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    style="?android:attr/spinnerDropDownItemStyle"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:ellipsize="marquee"
    android:singleLine="true"
    android:textAlignment="inherit"
    android:textColor="@android:color/white" />
  

layout_spinner

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Spinner
        android:id="@ id/my_spinner"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        tools:listitem="@android:layout/simple_spinner_dropdown_item" />

</LinearLayout>
  

Ответ №1:

В выбранном вами элементе (родительский элемент AdapterView, вид просмотра, позиция ввода, длинный идентификатор) установите для текста представления значение null с помощью :

 ((TextView)view).setText(null);
  

Затем установите нужный значок через:

 spinner.setBackgroundDrawable(/* your icon drawable*/);
  

Оформите XML элемента счетчика высотой и шириной, соответствующими вашему значку.