Выделение выбранного элемента в меню-выдвижном/скользящем меню

Используемая библиотека:

  1. https://github.com/SimonVT/android-menudrawer
  2. https://github.com/JakeWharton/ActionBarSherlock
  3. https://github.com/JakeWharton/Android-ViewPagerIndicator

Вопрос:

Я пытался реализовать подсветку в меню, похожем на приложение YouTube/Beautiful Widget, но я понятия не имею, как следует подходить к проблеме.

ниже я даю образец своего аппроша, в котором я не уверен, правильно ли это реализовать что-то вроде этого:

Это ящик меню, который я создал с помощью Adaptervew.click lisner:

 private AdapterView.OnItemClickListener mItemClickListener = new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {

            mPreviousView=mActiveView;
            mActiveView=view;
            mActivePosition = position;
         //   mDrawer.setActiveView(view, position);
            TextView txtview=(TextView)mActiveView;
            txtview.setBackgroundResource( R.drawable.abs__cab_background_top_holo_dark);
           // mDrawer.closeMenu();
        }
    };

Итак, в основном то, что я пытаюсь сделать, это использовать изображение .9 в текущем выбранном представлении!

Я хочу знать, есть ли более систематический или лучший подход, чтобы сделать то же самое!

Что я хочу получить Скриншоты ниже::

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


person SIDDHI    schedule 04.04.2013    source источник


Ответы (3)


Вы можете попробовать:

public View getView(int position, View convertView, ViewGroup parent) {
    view.setSelectionHandlerColorResource(Set your color here);
}
person faysal    schedule 11.04.2013
comment
Метод setSelectionHandlerColorResource() не определен для типа View. - person user1940676; 09.09.2013

Это было мое решение, чтобы выделить текущий пункт меню:

1) Выставьте последний select drawerPosition активности NavDrawer:

public class NavDrawerBaseActivity extends Activity {

    public static int LAST_DISPLAY_POSITION = 0;

    private void displayView(int position) {
        LAST_DISPLAY_POSITION = position;

        Fragment fragment = null;
        switch (position) {
            case 0:
                fragment = new ProgressPageFragment();
                break;
            // ..

            default:
                break;
        }

        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit();

        // .. update selected item and title, then close the drawer
    }

А затем на шаге 2 в классе адаптера укажите это значение:

public class NavDrawerListAdapter extends BaseAdapter {
   // ..

    @Override
    public View getView(int position, View convertView, ViewGroup parent {

        TextView txtTitle = (TextView) convertView.findViewById(R.id.title);

        if (position == NavDrawerActivity.LAST_DISPLAY_POSITION) {
            txtTitle.setTextColor(Color.WHITE);
        }
        else
           txtTitle.setTextColor(Color.BLACK);

        // .. etc ..
person Gene Bo    schedule 29.04.2014
comment
Это простое решение помогло мне после долгих поисков и разочарований. Спасибо - person Kenny Dabiri; 12.12.2017

Было бы несколько способов справиться с этим. Мой любимый подход — поместить элемент TextView в ListView внутри FrameLayout. Затем этот FrameLayout может иметь передний план, в котором размещается ваш индикатор. Вы можете показать/скрыть этот индикатор либо программно, либо с помощью селектора.

person Gábor    schedule 26.05.2013