【问题标题】:Highlighting Selected item in menu-drawer/sliding menu突出显示菜单抽屉/滑动菜单中的选定项目
【发布时间】:2013-04-04 11:52:09
【问题描述】:

使用的库:

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

问题:

我一直在尝试在类似于 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 图像!

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

我想要实现以下屏幕截图:

【问题讨论】:

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


    【解决方案1】:

    这是我突出显示当前菜单项的解决方案:

    1) 暴露 NavDrawer 活动的最后一个 selectdrawerPosition :

    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 ..
    

    【讨论】:

    • 这个简单的解决方案在经过大量的谷歌搜索和挫折后帮助了我。谢谢
    【解决方案2】:

    你可以试一试:

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

    【讨论】:

    • View 类型的 setSelectionHandlerColorResource() 方法未定义
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2014-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      相关资源
      最近更新 更多