Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Ancho de navegación de la lista de acciones – envolver contenido

De forma predeterminada, en la barra de acciones, el ancho de navegación de la lista del elemento seleccionado es tan ancho como el elemento más ancho. Me gustaría "wrap_content" en el elemento seleccionado, ya que está en google +, gmail, mapas de aplicaciones para Android.

¿Alguien sabe caliente para hacerlo?

  • Android Carga de mapa de bits de error de memoria Galaxy S3 WXGA
  • Parámetros de conexión de baja energía de Bluetooth para Android, iOS y Win8
  • Android: cambiar pantallas con nueva actividad o simplemente cambiar la vista de contenido
  • Evitar la recuperación de fragmentos en Android
  • Desbordamiento-x: oculto; No funciona en dispositivos Android
  • Android Studio compilador en línea que muestra errores rojos, pero la compilación con gradle funciona bien
  • Intenté anular el getView del adaptador de la navegación pero no trabaja. Parece que esta vista está envuelta con otra vista que tiene el ancho del elemento más ancho. También intenté la opinión de actionbar.setCustom con el hilandero pero el comportamiento del hilandero es igual. Utiliza la anchura más amplia del artículo.

    Gracias por todas las sugerencias, enlaces y ayuda.

    Estado actual

    Estado requerido

  • No se puede iniciar el servicio Intención: no se encuentra
  • Java.lang.RuntimeException: No se puede instanciar la actividad ComponentInfo / ClassNotFoundException
  • Infinite Auto Scroll ListView con velocidad de desplazamiento controlada
  • ¿Mueve los diseños cuando se muestra el teclado suave?
  • Cambiar el color del borde de la forma en tiempo de ejecución
  • Cómo influenciar linebreak en Android Textview
  • 4 Solutions collect form web for “Ancho de navegación de la lista de acciones – envolver contenido”

    He encontrado el mismo problema. Parece que Android llamará al método getView () para todos los elementos, y finalmente establecerá el ancho al ancho del elemento más ancho.

    Así que aquí está mi solución:

    1. Almacene la sección seleccionada actual (por ejemplo, sección en su ejemplo), diga selectedSection, en su código. De hecho, hay que hacerlo en el método onNavigationItemSelected () de NavigationListener.

    2. Substituya el método getView () de su SpinnerAdapter, siempre defina su contenido como selectedSection.

    3. En el método onNavigationItemSelected () de NavigationListener, intente llamar al método notifyDataSetChanged () de su spinnerAdapter después de establecer el modo actual en selectedSection.

    Aquí está el código de ejemplo:

    final int selectedSection = 0; final String sectionLabels[] = {"short sec", "long section", "looooonger section"}; final ArrayAdapter<String> arrayAdapter = new arrayAdapter<String>(this, simple_list_item_1) { @Override public int getCount() { // You need to implement here. } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.you_entry, null); } TextView textView = (TextView) convertView.findViewById(R.id.you_text); // Set the text to the current section. textView.setText(sectionLabels[selectedSection]); } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { // You need to implement here. } } actionBar.setListNavigationCallbacks(navigationAdpater, new ActionBar.OnNavigationListener() { @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { // Store the current section. selectedSection = itemPosition; navigationAdpater.notifyDataSetChanged(); return true; } }); 

    Necesita reemplazar el método getView () en su adaptador y establecer los parámetros de diseño en la vista de texto para envolver el contenido. La ruleta cambiará automáticamente el tamaño del elemento seleccionado.

    He creado un adaptador personalizado se extiende desde ArrayAdapter:

     public class CustomAdapter extends ArrayAdapter<String> { 

    Después de eso, anule el método getView () cambiando el LayoutParams de la vista actual:

     @Override public View getView(final int position, final View convertView, final ViewGroup parent) { View view = convertView; if (null == view) { view = LayoutInflater.from(this.getContext()) .inflate(android.R.layout.simple_list_item1, null); ((TextView) view).setText(getItem(position)); } final LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); view.setLayoutParams(params); return view; } 

    En su actividad, cree la instancia del adaptador y establezca la ruleta con ella:

     List<String> stringList = new ArrayList<String>(); stringList.add("test1"); stringList.add("test12"); stringList.add("test123"); stringList.add("test1234"); final SpinnerAdapter adapter = new CustomAdapter(this.getContext(), android.R.layout.simple_list_item1, android.R.id.text1, stringList); mySpinner.setAdapter(adapter); 

    Cuando elige algo en la lista, el hilandero volverá a crear la vista, reordenará el elemento seleccionado a la primera posición y lo redimensionará al tamaño del contenido.

    Cree un hilandero y agregue vistas de texto a eso. En la ruleta, establezca el campo maxWidth a cualquier valor que desee y que manejaría esto. Otra opción sería

     android:layout_width="0" android_layout_weight="0.3" 

    Esto significaría que la hiladora ocuparía sólo 1/3 de la anchura scrren.

    En la vista de texto que establecería:

     android:singleLine="false" android:ellipsize="end" 

    Esto funcionó para mí. Parte importante es esto. Ponga el código de abajo es su adaptador y use selectedItemPosition para seleccionar el texto de la matriz de objetos.

     int selectedItemPosition = position; if (parent instanceof AdapterView) { selectedItemPosition = ((AdapterView) parent) .getSelectedItemPosition(); } 

    El ejemplo se da a continuación.

     public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = getLayoutInflater(); final View spinnerCell; if (convertView == null) { // if it's not recycled, inflate it from layout spinnerCell = inflater.inflate(R.layout.layout_spinner_cell, parent, false); } else { spinnerCell = convertView; } int selectedItemPosition = position; if (parent instanceof AdapterView) { selectedItemPosition = ((AdapterView) parent) .getSelectedItemPosition(); } TextView title = (TextView) spinnerCell.findViewById(R.id.spinnerTitle); title.setText(titles[selectedItemPosition]); return spinnerCell; } 

    Si necesita una explicación, siga este enlace: http://coding-thoughts.blogspot.in/2013/11/help-my-spinner-is-too-wide.html

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.