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?

  • Cómo suprimir la notificación en la pantalla de bloqueo en Android 5 (Lollipop), pero dejarlo en el área de notificación?
  • Atascado en "Vaciar memoria, la aplicación se congelará. Brrr. "Mensaje
  • Actividad dinámica de inicio en Android?
  • Android / Java: largo obtiene negativo sin superar max_value
  • Integre Dropbox en la aplicación Android, pero sin iniciar sesión
  • Cómo encontrar el área de texto (altura / ancho) de TextView de forma programática en android
  • 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

  • ¿Cuál es el propósito de la etiqueta <merge> de Android en los diseños XML?
  • ¿Cómo puedo obtener la ubicación GPS actual mediante programación en Android?
  • Cómo pasar datos entre fragmentos
  • Restringir Android Widget a una instancia por dispositivo
  • PhoneGap Introducción a Android "Falta uno de los siguientes"
  • Archivo GIF en la pantalla de inicio Ionic
  • 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.