android - studio - SlidingTabLayout para adaptarse a la pantalla
android studio (9)
Estoy usando SlidingTabLayout de Google. Como solo tengo 3 pestañas para mostrar, veo un espacio vacío después de la última pestaña. Por favor captura de pantalla de abajo.
Alguien me puede explicar cómo encajar las pestañas en pantalla completa. Gracias por tu tiempo.
Cambiar el archivo SlidingTabLayout.java puede ayudar. Sin embargo, la solución puede no parecer mucho genérica. En el archivo SlidingTabLayout.java, busque el método
protected TextView createDefaultTabView(Context context)
Debajo de los métodos de ''conjunto'' de TextView, escriba el siguiente código.
textView.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1f));
Cada tira de pestaña es simplemente un LinearLayout personalizado.
Google ha lanzado Design Support Library . Ahora puedes usar TabLayout
. Para hacer que las pestañas se setTabMode(TabLayout.MODE_FIXED);
la pantalla, puede llamar setTabMode(TabLayout.MODE_FIXED);
La respuesta de SubliemeSiem está en el camino correcto. Una respuesta más flexible y breve es agregar un peso de 1 a cada TextView que conforma una pestaña.
En SlidingTabLayout.java , encuentra
protected TextView createDefaultTabView(Context context)
Era la línea 171 en el momento de escribir. Añade esta línea a la función.
textView.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));
TableLayout.LayoutParams toma tres argumentos, el final de los cuales es el peso. Como todas las vistas en el diseño horizontal tendrán el mismo peso, tendrán el mismo tamaño. El contenido de la envoltura debe permitir un comportamiento elegante a medida que aumenta el número de pestañas y el tamaño supera el ancho de la pantalla, pero no lo he probado.
Puede crear un diseño de pestaña personalizado y asignarlo a su SlidingTabLayout para inflar.
custom_tab.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/customTab">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/customText"/>
</FrameLayout>
En su código:
viewPager = (ViewPager) rootView.findViewById(R.id.viewPager);
viewPager.setAdapter(new SampleAdapter(getChildFragmentManager()));
SlidingTabLayout tabLayout = (SlidingTabLayout)rootView.findViewById(R.id.slidingTab);
tabLayout.setCustomTabView(R.layout.custom_tab,R.id.customText);
tabLayout.setViewPager(viewPager);
Al mantener el ancho a 0 dp y el peso como 1 (el número es arbitrario), el diseño debe tener en cuenta que todas las pestañas tengan el mismo espacio de pantalla. Esto también debería funcionar para cualquier número de pestañas. No debería necesitar modificar su SlidingTabLayout.java.
Use esto antes de setViewPager ():
slidingTabs.setDistributeEvenly(true);
Si recibió este error Cannot resolve method ''setDistributeEvenly(boolean)''
, debe actualizar su SlidingTabLayout.java y SlidingTabStrip.java desde el código fuente de Google I / O:
en SlidingTabLayout.java
bajo el siguiente método, justo antes de la declaración de retorno:
protected TextView createDefaultTabView(Context context)
Agregué estas líneas a ese método:
final PagerAdapter adapter = mViewPager.getAdapter();
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1.0f / adapter.getCount());
textView.setLayoutParams(param);
eso está muy cerca de la respuesta marcada como la solución para la pregunta, sin embargo no tuve que usar el administrador de ventanas.
enfoque más dinámico es
Editar SlidingTabLayout.java
localice el método private void populateTabStrip()
y elimine
mTabStrip.addView(tabView);
con
// get dimension of current layout
DisplayMetrics display = this.getResources().getDisplayMetrics();
int width = display.widthPixels;
//your tab names here
String[] tabTitles = {"tab1", "tab2", "tab3"}
// compare max width and number of tabs''s length
//will not fit to the maxwidth it will distribute the tabs evenly
if(width%(width/tabTitles.length) == 0){
mTabStrip.addView(tabView,
new LinearLayout.LayoutParams(width/tabTitles.length, ViewGroup.LayoutParams.WRAP_CONTENT));
} else {
mTabStrip.addView(tabView);
}
prueba este android:layout_weight="1"
en tu diseño xml para cada vista de texto.
En SlidingTabLayout.java
, encuentra
protected TextView createDefaultTabView(Context context)
y agrega estas líneas a ese método:
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
textView.setWidth(size.x / 3);
Eso lo arregló para mí. Básicamente, está obteniendo el ancho de su pantalla y dividiéndolo por 3 (el número de pestañas) y configurándolo como el ancho del TextField
que conforma su pestaña.
ACTUALIZAR:
En la fuente actual, Google agregó un setDistributeEvenly(Boolean);
método, por lo que puede utilizar slidingTabs.setDistributeEvenly(true);
en lugar. Cuando use el código fuente anterior, use mi solución anterior o actualice a la fuente más reciente (se recomienda este último).