【问题标题】:Selected item in navigation drawer导航抽屉中的选定项目
【发布时间】:2014-01-04 20:15:59
【问题描述】:

我在我的应用中实现了抽屉式导航 (http://developer.android.com/training/implementing-navigation/nav-drawer.html)。

如何更改实际选中项目的显示?我希望所选项目是粗体和不同的颜色。

在官方示例中,他们使用“setItemChecked”,但是如何修改单个选中项的方面? “setOnItemSelectedListener”方法不起作用。

到目前为止,当我打开一个片段时,我所做的是这段代码:

for (int i = 0; i < mDrawerList.getChildCount(); i++){
    TextView t = (TextView) mDrawerList.getChildAt(i);

    if(i == fragmentPosition) t.setTextColor(getResources().getColor(R.color.blue));
    else t.setTextColor(getResources().getColor(R.color.black));
}

它可以工作,但是在应用启动时,没有选择任何项目,并且我无法设置任何项目,因为尚未创建列表视图(我认为它是在我们第一次打开它时创建的)。

我尝试创建一个选择器,但不知道如何正确设置不同的属性(已检查项目、已选择项目、已单击项目??),搜索了文档但我不明白。

感谢您提供的任何帮助!

【问题讨论】:

    标签: android navigation-drawer


    【解决方案1】:

    我会在适配器中这样做。

    mAdapter.setSelectedItem(position);
    
    public View getView(...) {
        ...
        if (position == mSelectedItem) {
            text.setTypeface(...);
            text.setBackgroundColor(...);
        } else {
            text.setTypeface(...);
            text.setBackgroundColor(...);
        }
    }
    

    如果你不需要设置字体,你可以使用选择器和

    setTextColor(@drawable/my_selector).
    

    或者用TextView把它放到你的xml文件中

    android:textColor="@drawable/my_selector"
    

    【讨论】:

      【解决方案2】:

      这是我在导航抽屉中更改所选项目的颜色和字体的解决方案...

      @Override
      public void onItemClick(AdapterView<?> parent, View view, int position, long id)
      {
           setNavDrawerItemNormal();
           TextView txtview = ((TextView) view.findViewById(R.id.txtNav));
           txtview.setTypeface(null, Typeface.BOLD);
           txtview.setTextColor(R.color.Red);
      }
      
      public void setNavDrawerItemNormal()
      {
          for (int i=0; i< mDrawerListView.getChildCount(); i++)
          {
              View v = mDrawerListView.getChildAt(i);
              TextView txtview = ((TextView) v.findViewById(R.id.txtNav));
              Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Light.ttf");
              txtview.setTypeface(font);
              txtview.setTextColor(R.color.Red);
          }
      }
      

      为了在应用程序初始化时加粗导航抽屉中的第一项,我在列表适配器获取视图方法中这样做了...

      @Override
      public View getView(int position, View convertView, ViewGroup parent)
      {
          LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
          View rowView = inflater.inflate(R.layout.navdrawer_item, parent, false);
          TextView textView = (TextView) rowView.findViewById(R.id.txtNav);
          textView.setText(values[position]);
          if (position == 0) 
          { 
             textView.setTypeface(null, Typeface.BOLD);
             textView.setTextColor(R.color.Red);
          }
      
          return rowView;
      }
      

      所以,在这里我检查了项目的位置是否为 0(意味着它的第一个项目),然后将其设为粗体。这整件事对我来说很完美!~

      【讨论】:

      • 这是一个肮脏的黑客!它误导了人们。请改用CheckedTextView!也可以使用myDrawerListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)
      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多