studio navegacion icono cambiar boton barra bar agregar actionbar android tabs android-actionbar actionbarsherlock android-4.2-jelly-bean

navegacion - menu overflow android studio



Cambiar la altura de la barra de acciones en Android JellyBean (3)

Intenta poner android:actionBarSize y actionBarSize debajo del tema que estás usando, así:

<style name="Theme.white_style" parent="@android:style/Theme.Holo.Light.DarkActionBar"> <item name="android:actionBarSize">55dp</item> <item name="actionBarSize">55dp</item> </style>

Recientemente desarrollé una aplicación para Android, en la que necesito un diseño y una dimensión personalizados para la barra de pestañas. La forma en que lo hice hasta ahora es mediante el uso de la biblioteca ActionBarSherlock de Jake Wharton para dar soporte a las versiones previas de HoneyComb para Android y aplicando un estilo a la aplicación en la que edito el elemento de estilo actionBarSize.

Ahora, he estado probando la aplicación en el Galaxy S3 (con Jellybean en ella), y la altura de la barra de pestañas ya no cambia según el valor de actionBarSize .

Así que comencé a buscar el código de JellyBean, y encontré este método en la clase ActionBarPolicy :

public int getTabContainerHeight() { TypedArray a = mContext.obtainStyledAttributes(null, R.styleable.ActionBar, com.android.internal.R.attr.actionBarStyle, 0); int height = a.getLayoutDimension(R.styleable.ActionBar_height, 0); Resources r = mContext.getResources(); if (!hasEmbeddedTabs()) { // Stacked tabs; limit the height height = Math.min(height, r.getDimensionPixelSize(R.dimen.action_bar_stacked_max_height)); } a.recycle(); return height; }

Por lo que he deducido en este método, parece que JellyBean limita la altura del TabBar, cuando la aplicación está en modo vertical, estableciendo la altura de la barra de pestañas en el valor de dimensión "action_bar_stacked_max_height" (que es 48dp, en 4.1''s /values/dimen.xml file), aunque he configurado la altura de la barra de acciones en actionBarSize .

Intenté sobreescribir este valor de dimensión, estableciéndolo en mi propio valor en mi propio archivo dimen.xml , pero no tuve suerte. No funcionó.

Mi pregunta:

¿Ustedes saben de una manera en la que puedo anular el valor del parámetro "action_bar_stacked_max_height"?

¡Gracias de antemano!


Intenta usar android:height como la siguiente:

<style name="AppActionBar"> <item name="android:height">50dp</item> </style> <style name="MainActivityStyle" parent="@android:style/Theme.Holo"> <item name="android:actionBarStyle">@style/AppActionBar</item> </style>


me parece que fue hecho a propósito y no sé por qué. Hay algunas variables en bools.xml

<bool name="action_bar_embed_tabs">true</bool> <bool name="action_bar_embed_tabs_pre_jb">false</bool>

La altura de las pestañas de inserción está limitada a 48 dips en ActionBarPolicy.java , como ya lo mencionó. Es por eso que ese comportamiento solo se puede ver en Android JellyBean o superior. No puedo encontrar una solución mejor que hacer alguna reflexión java. Así que aquí está el código

private void hackJBPolicy() { View container = findScrollingTabContainer(); if (container == null) return; try { int height = getResources().getDimensionPixelSize(R.dimen.action_bar_height); Method method = container.getClass() .getDeclaredMethod("setContentHeight", Integer.TYPE); method.invoke(container, height); } catch (NoSuchMethodException e) { Log.e(LOG_TAG, e.getLocalizedMessage(), e); } catch (IllegalArgumentException e) { Log.e(LOG_TAG, e.getLocalizedMessage(), e); } catch (IllegalAccessException e) { Log.e(LOG_TAG, e.getLocalizedMessage(), e); } catch (InvocationTargetException e) { Log.e(LOG_TAG, e.getLocalizedMessage(), e); } } private View findScrollingTabContainer() { View decor = getWindow().getDecorView(); int containerId = getResources().getIdentifier("action_bar_container", "id", "android"); // check if appcompat library is used if (containerId == 0) { containerId = R.id.action_bar_container; } FrameLayout container = (FrameLayout) decor.findViewById(containerId); for (int i = 0; i < container.getChildCount(); i++) { View scrolling = container.getChildAt(container.getChildCount() - 1); String simpleName = scrolling.getClass().getSimpleName(); if (simpleName.equals("ScrollingTabContainerView")) return scrolling; } return null; }

Use el método hackJBPolicy() en su onCreate . Tenga en cuenta que utilicé ActionBar de la biblioteca appcompat. Aquí está el enlace al proyecto de muestra con el uso de esta solución.

Después de todo, me parece que sería más fácil en el futuro crear vistas personalizadas alineadas a la parte superior de la pantalla en lugar de usar ActionBar en el modo de pestañas si su diseño de interfaz de usuario está un poco lejos de las líneas de guía.