studio programacion para libros gratis edición desarrollo desarrollar aprende aplicaciones android android-layout android-recyclerview android-xml

para - programacion android pdf 2018



TextView se corta en algunas resoluciones (12)

Creo que no deberías arreglar el spanCount de GridLayout . Sería mejor si para high resolutions mostrara 4 elementos, para small resolutions muestre 3 elementos, para landscape display 5 elementos, ...

Para hacerlo, debe crear una constants para todos los valores de la carpeta que admitirá como

res/values-small/dimens.xml constants.xml res/values-large/dimens.xml constants.xml

para cada constants.xml , se verá como

<resources> <integer name="span_count">3</integer> </resources>

Luego cuando creas GridLayoutManager

GridLayoutManager lm = new GridLayoutManager(Context context, getContext().getResources().getInteger(R.integer.span_count));

Después de que hagas esto, tu problema no pasará.

Tengo un RecyclerView que consiste en CardView s que tienen un TextView y un ImageView , entre algunos otros diseños.
El problema es que, en algunas resoluciones de pantalla, el TextView se corta o se TextView a la siguiente línea, que no quiero.
En otras resoluciones, el TextView tiene mucho espacio.

Pequeñas resoluciones:

Altas Resoluciones:

¿Cómo organizo el diseño para que haya suficiente espacio para el TextView , y el ImageView se dimensionará en consecuencia?

Este es mi xml para los elementos RecyclerView :

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cardview="http://schemas.android.com/apk/res-auto" android:id="@+id/zmanCard" android:layout_width="match_parent" android:layout_height="50dp" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" cardview:cardUseCompatPadding="false" cardview:cardPreventCornerOverlap="false" cardview:cardCornerRadius="4dp" cardview:cardElevation="2dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/colorPrimary" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="20dp" android:layout_gravity="top" android:gravity="center" android:orientation="vertical" android:background="?attr/colorPrimaryDark"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/zmanCardTitle" android:textColor="#ffffff" android:gravity="center" android:textSize="13sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:layout_width="24dp" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:layout_marginLeft="2dp" android:layout_marginRight="4dp" android:alpha="0.8" android:id="@+id/zmanCardImage" /> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="7dp" android:layout_marginLeft="0dp" android:layout_marginRight="4dp"> <TextView android:text="5:40" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="2dp" android:id="@+id/zmanCardTime" android:textColor="#ffffff" android:textSize="18sp" /> <ProgressBar android:id="@+id/zmanProgressBar" android:layout_width="24dp" android:layout_height="24dp" android:layout_gravity="top|left" style="@style/Base.Widget.AppCompat.ProgressBar" /> </FrameLayout> </LinearLayout> </LinearLayout>


De una manera más sencilla, cree su diseño utilizando un diseño relativo con alguna técnica adecuada que se resolverá. Si aún tiene problemas, pídame un archivo .xml.


Debe usar el relleno para que la vista de texto siempre tenga un relleno fijo y nunca se corte. En su código realice los siguientes cambios.

<TextView android:text="5:40" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="2dp" android:id="@+id/zmanCardTime" android:textColor="#ffffff" android:padding:"3dp" android:textSize="18sp" />


Mi experiencia en Android siempre uso dp en lugar de sp, así que arregla el valor de dp para todas las vistas de texto y se ajustará a cualquier pantalla.

Déjame saber si hay algún problema.

Mejores regds


Prueba esto. Funciona al 100%.

AutoResizeTextView unidad AutoResizeTextView o sdp puede ayudarlo.

sdp - una unidad de tamaño escalable

Un SDK de Android que proporciona una nueva unidad de tamaño - sdp ( dp escalable ). Esta unidad de tamaño se escala con el tamaño de la pantalla. Puede ayudar a los desarrolladores de Android con el soporte de múltiples pantallas.

para las vistas de texto, consulte ssp que se basa en la unidad de tamaño sp para textos.

sdp

AutoResizeTextView

Y si quieres soportar diferentes diseños de diseño para diferentes pantallas:

res/layout/my_layout.xml // layout for normal screen size ("default") res/layout-small/my_layout.xml // layout for small screen size res/layout-large/my_layout.xml // layout for large screen size res/layout-xlarge/my_layout.xml // layout for extra large screen size res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

Para más información mira here


Puedo sugerir la solución de dos pasos uno para el tamaño del texto, por lo que con el atributo wrap_content se ajusta al texto y sugiero usar un calificador para proporcionar varios diseños alternativos para diferentes configuraciones de pantalla. Lo hace utilizando calificadores de configuración, que permiten que el tiempo de ejecución seleccione automáticamente el recurso apropiado según la configuración del dispositivo actual (como un diseño de diseño diferente para diferentes tamaños de pantalla). Soportar diferentes tamaños de pantalla

desde esta parte hasta el final copié mi respuesta de este enlace de la respuesta de @ Herry: Creo que debe consultar este Pdf de Google IO para el diseño . En ese pdf, vaya a la página No: 77, donde encontrará sugerencias para usar dimens.xml para diferentes dispositivos de Android, por ejemplo, vea la siguiente estructura:

res / values ​​/ dimens.xml

res / values-small / dimens.xml

res / values-normal / dimens.xml

res / values-large / dimens.xml

res / values-xlarge / dimens.xml

Por ejemplo, usted ha usado debajo de dimens.xml en valores.

<?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="text_size">18sp</dimen> </resources>

En la carpeta de otros valores, necesita cambiar los valores para el tamaño de su texto.

por ejemplo:

<resources> <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> <dimen name="font_size_small">10sp</dimen> <dimen name="font_size_medium">20sp</dimen> <dimen name="font_size_large">30sp</dimen> </resources>


Si desea pantallas escalables, no debe usar la altura o el ancho fijos tanto como sea posible. En su caso, debe colocar sus componentes proporcionalmente con layout_weight.

Para más detalles;

¿Qué significa android: layout_weight?


Utilice AutoScaleTextView

AutoScaleTextView toma el valor de android:textSize y lo usa como el tamaño de texto preferido. También puede establecer el tamaño de texto mínimo. El valor predeterminado para el tamaño de texto mínimo es 10dp . AutoScaleTextView ahora intenta tomar el valor máximo entre el tamaño preferido y el mínimo que se ajusta al ancho de Vistas (con respecto al relleno).

Encuentre la clase completa de AutoScaleTextView y sus implementaciones en el siguiente enlace

http://ankri.de/autoscale-textview/


intente dar peso al diseño de vista de texto y diseño de vista de imagen dar peso 1 a ambos diseños


Un TextView que automáticamente cambia el tamaño del texto para que se ajuste perfectamente a sus límites .

Uso:

dependencies { compile ''me.grantland:autofittextview:0.2.+'' }

Habilitar cualquier vista extendiendo TextView en el código:

AutofitHelper.create(textView);

Habilitar cualquier vista extendiendo TextView en XML:

<me.grantland.widget.AutofitLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:singleLine="true" /> </me.grantland.widget.AutofitLayout>

Utilice el Widget incorporado en código o XML:

<RootElement xmlns:autofit="http://schemas.android.com/apk/res-auto" ... <me.grantland.widget.AutofitTextView android:layout_width="match_parent" android:layout_height="wrap_content" android:singleLine="true" android:maxLines="2" android:textSize="40sp" autofit:minTextSize="16sp" />

Enlace de referencia: https://github.com/grantland/android-autofittextview


Solución 1

here

// The TEXT SIZE in dp private static final float TEXT_SIZE_DP = 16.0f; // Get the screen''s density scale final float scale = getResources().getDisplayMetrics().density; // Convert the dps to pixels, based on density scale int textSize = (int) (TEXT_SIZE_DP * scale + 0.5f); textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize);

Solución 2:

float dpi = getResources().getDisplayMetrics().widthPixels; dpi = dpi / 320; textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,TEXT_SIZE_DP*dpi);

Cómo se refiere su trabajo a continuación enlace

http://canvasonandroid.blogspot.in/2016/04/how-to-scale-font-size-for-different.html

Nota: funcionará solo en el dispositivo, no en la tableta. Necesitamos escribir diferentes lógicas para la tableta. para esto necesitas establecer el tamaño de fuente en dimen.xml


Aquí vuelves por segunda vez con la palabra clave.

Resolución

¿Cuáles son las opciones que tiene en la mano ahora?

¡Simplemente resumí esas respuestas (todo en uno)! ¿Quedan otras opciones?

Como puedo ver, su problema está relacionado con dos casos de la mano.

  1. Por supuesto, su texto no cambia de tamaño 2. Su diseño es demasiado flexible.

A veces, vea que TextView se reduce. ¿Hay otras opciones que pueda intentar evitar, en lugar de las soluciones que tiene?

PercentRelativeLayout

¿Alguna ventaja extra de esto? Sí, esto admite dimensiones y márgenes basados ​​en porcentajes. Usted ha establecido márgenes fijos y esto le dará un porcentaje. Incluso tiene un atributo genial llamado layout_aspectRatio . Aquí hay un enlace para un pequeño tutorial .

Dar tamaños basados ​​en la relación / posición absoluta de una vista

Antes de PercentRelativeLayout , en su mayoría usé esto. Primero, debe tener una imagen / boceto modelo de su vista. Mi modelo es de 1920 px de altura y 1080 de ancho (normalmente es una resolución HDTV, relación de aspecto 16: 9)

En esa imagen sabemos dónde se ubican las vistas.

Luego, para cualquier vista / cualquier otra pantalla, puedo usar la misma proporción para LayoutParams usando LayoutParams . Ahora ve las estancias de acuerdo a tus reglas.

Aquí hay un ejemplo:

DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); height = displaymetrics.heightPixels; width = displaymetrics.widthPixels; LinearLayout.LayoutParams topLenP= new LinearLayout.LayoutParams(300 * width / 1080, 400 * width / 1920); //topLenP.topMargin = x* height / 1920; //topLenP.leftMargin = y* width / 1080; myView.setLayoutParams(topLenP);

Lo que realmente hice aquí, como dije en mi vista de modelo, esta vista tomó 300 de ancho, 400 de altura, con esto estoy ajustando la misma proporción para mi pantalla de grosella (usando el tamaño de la pantalla de grosella).

Volviendo a la escala automática, ya que ahora tenemos una vista basada en la misma proporción, esta es otra buena respuesta.

Ajuste automático de TextView para Android

android: textAppearance

Finalmente, hay tamaños fijos dados en android /platforms/android-X/data/res/values/themes.xml basado en pequeño, grande y mediano.

Sin especificar qué necesita exactamente, también puede usarlo como

<TextView android:textAppearance="?android:attr/textAppearance" .... />

¡Espero que esto ayude!