现在我使用带有碎片的导航抽屉和选中的项目突出显示红色.我使用粗体字来选择项目而不是突出显示.任何人都可以说我,我怎么能意识到这一点?
主要活动
public class MainActivity extends Activity { private DrawerLayout mDrawerLayout; private ListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; // nav drawer title private CharSequence mDrawerTitle; // used to store app title private CharSequence mTitle; // slide menu items private String[] navMenuTitles; private ArrayListnavDrawerItems; private NavDrawerListAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTitle = mDrawerTitle = getTitle(); // load slide menu items navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ListView) findViewById(R.id.list_slidermenu); navDrawerItems = new ArrayList (); navDrawerItems.add(new NavDrawerItem(navMenuTitles[0])); navDrawerItems.add(new NavDrawerItem(navMenuTitles[1])); navDrawerItems.add(new NavDrawerItem(navMenuTitles[2])); mDrawerList.setOnItemClickListener(new SlideMenuClickListener()); // setting the nav drawer list adapter adapter = new NavDrawerListAdapter(getApplicationContext(),navDrawerItems); mDrawerList.setAdapter(adapter); // enabling action bar app icon and behaving it as toggle button getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer_white, //nav menu toggle icon R.string.app_name, // nav drawer open - description for accessibility R.string.app_name // nav drawer close - description for accessibility ) { public void onDrawerClosed(View view) { getActionBar().setTitle(mTitle); // calling onPrepareOptionsMenu() to show action bar icons invalidateOptionsMenu(); } public void onDrawerOpened(View drawerView) { getActionBar().setTitle(mDrawerTitle); // calling onPrepareOptionsMenu() to hide action bar icons invalidateOptionsMenu(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); if (savedInstanceState == null) { displayView(0); } } private class SlideMenuClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView> parent, View view, int position, long id) { displayView(position); } } @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } @Override public boolean onPrepareOptionsMenu(Menu menu) { return super.onPrepareOptionsMenu(menu); } private void displayView(int position) { // update the main content by replacing fragments Fragment fragment = null; switch (position) { case 0: fragment = new MainFragment(); break; case 1: fragment = new TheoryFragment(); break; case 2: fragment = new SettingsFragment(); break; default: break; } if (fragment != null) { FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.frame_container, fragment).commit(); mDrawerList.setItemChecked(position, true); mDrawerList.setSelection(position); setTitle(navMenuTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); } else { Log.e("MainActivity", "Error in creating fragment"); } } @Override public void setTitle(CharSequence title) { mTitle = title; getActionBar().setTitle(mTitle); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); }
DrawerAdapter
public class NavDrawerListAdapter extends BaseAdapter { private Context context; private ArrayListnavDrawerItems; public NavDrawerListAdapter(Context context, ArrayList navDrawerItems){ this.context = context; this.navDrawerItems = navDrawerItems; } @Override public int getCount() { return navDrawerItems.size(); } @Override public Object getItem(int position) { return navDrawerItems.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); convertView = mInflater.inflate(R.layout.drawer_list_item, null); } TextView txtTitle = (TextView) convertView.findViewById(R.id.title); txtTitle.setText(navDrawerItems.get(position).getTitle()); return convertView; }
}
UPD:我理解如何加粗检查项目,切换到不同项目时不会删除它,并且从一开始就没有粗体样式.
更新的代码
public void onItemClick(AdapterView> parent, View view, int position, long id) { View rowView = view; TextView tv = (TextView) rowView.findViewById(R.id.title); tv.setTypeface(null, Typeface.BOLD); displayView(position); }
Abdul Rahman.. 6
这是我的完整解决方案......
@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); } 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); } }
并在初始化应用程序时加粗导航抽屉中的第一项,我在列表适配器获取视图方法中做了...
@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); } return rowView; }
所以,在这里我检查项目的位置是否为0(意味着它是第一项),然后将其设为粗体.整件事对我来说很完美!〜
这是我的完整解决方案......
@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); } 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); } }
并在初始化应用程序时加粗导航抽屉中的第一项,我在列表适配器获取视图方法中做了...
@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); } return rowView; }
所以,在这里我检查项目的位置是否为0(意味着它是第一项),然后将其设为粗体.整件事对我来说很完美!〜