Elemento en negrita después de la selección
Ahora estoy usando el cajón de la navegación con los fragmentos y los artículos seleccionados resaltaron color rojo. I varita para utilizar el tipo de letra en negrilla para el artículo elegido en lugar de destacar. ¿Puede alguien decirme, cómo puedo realizar esto?
Actividad principal
- Toque en cualquier lugar para deslizar el menú abierto para el cajón de navegación
- Adición de un diseño lineal al cajón de navegación (termina chocando con un ClassCastException)
- Uso de syncState () en ActionBarDrawerToggle
- Guardar estado de fragmentos con el cajón de navegación
- Android: cajón de navegación sin xml
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 ArrayList<NavDrawerItem> navDrawerItems; 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<NavDrawerItem>(); 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 ArrayList<NavDrawerItem> navDrawerItems; public NavDrawerListAdapter(Context context, ArrayList<NavDrawerItem> 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: Entiendo cómo el elemento marcado en negrita, no se elimina al cambiar a un elemento diferente y no tiene un estilo en negrita desde el principio.
Código actualizado
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); }
- Detección del estado de la aplicación de currículum de diferentes android estado de navegación
- Cajón de navegación para múltiples actividades
- Cambiar el color del ícono del cajón de navegación en la plantilla predeterminada de Android Studio
- Icono de gavetas de navegación en la parte superior derecha muestra Icono de flecha trasero insted de icono de hamburguesa
- Navegación Ver Texto Multilínea
- Cajón de navegación Android Studio 1.4
- Retardo de cajón de navegación en Android
- Establecer el margen de arrastre para el Cajón de navegación Android
Aquí está mi solución completa …
@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); } }
Y en negrita el primer elemento en el cajón de navegación tras la inicialización de la aplicación, lo hice en el adaptador de lista obtener método de vista …
@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; }
Por lo tanto, aquí he comprobado si la posición del elemento es 0 (es decir, su primer elemento), a continuación, lo hacen en negrita. ¡Todo esto funciona perfectamente para mí! ~
En tu SlideMenuClickListeners onItemClick, establece todos los elementos en Typeface.DEFAULT
y, a continuación, configura el elemento en el que te interesa Typeface.DEFAULT_BOLD
:
for (int i = 0; i < parent.getCount(); i++) { TextView v = (TextView)parent.getChildAt(i); if (v != null) v.setTypeface(Typeface.DEFAULT); } ((TextView)view).setTypeface(Typeface.DEFAULT_BOLD);
Para eliminar el resaltado de la selección, elimine mDrawerList.setChecked
y mDrawerList.setSelection
en su método displayView
Sin embargo, tomar esta solución con un grano de sal porque estoy teniendo problemas para envalentonar el primer elemento después de la inicialización de la aplicación.
- Transición de elementos compartidos y Fresco no funcionan correctamente
- ¿Cómo puedo crear un botón de superposición en mi diseño de Android?