在菜单抽屉/滑动菜单中突出显示所选项目

时间:2013-04-04 11:52:09

标签: android android-fragments actionbarsherlock android-viewpager slidingdrawer

使用的图书馆:

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

    我一直在尝试在类似于YouTube / Beautiful Widget应用程序的menudrawer上实现突出显示,但我不知道应该如何解决问题。

    下面我给我的aprproche一个样本,我不确定,如果它是正确的方法来实现这样的事情:

    这是我创建的菜单抽屉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图像!

    我想知道的是有更系统或更好的方法来做同样的事情!

    我想要获得以下屏幕截图::

    enter image description here enter image description here

3 个答案:

答案 0 :(得分:2)

这是我强调当前菜单项的解决方案:

1)公开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 ..

答案 1 :(得分:0)

你可以尝试一下:

public View getView(int position, View convertView, ViewGroup parent) {
    view.setSelectionHandlerColorResource(Set your color here);
}

答案 2 :(得分:0)

有几种方法可以解决这个问题。我最喜欢的方法是将ListView项目TextView放在FrameLayout中。这个FrameLayout可以有一个前景可绘制的指示器。您可以通过编程方式或使用选择器显示/隐藏此指示符。