Estilo conjunto de Android en el código
Estoy intentando utilizar el constructor de TextView con estilo como esto:
TextView myText = new TextView(MyActivity.this, null, R.style.my_style );
- IllegalArgumentException al seleccionar texto en Android TextView
- Cómo configurar unicode en textview para mostrar emoji en android?
- Cómo cambiar el texto de textView de fragmento de la actividad
- Android - Texto seleccionable: selecciona parte de un texto
- Android: última línea de texto cortada
Sin embargo, cuando lo hago, la vista de texto no parece tener el estilo (verifiqué el estilo estableciéndolo en un objeto estático).
También he intentado usar myText.setTextAppearance(MyActivity.this, R.style.my_style)
pero tampoco funciona
- Android - epub reader para leer archivos .epub ..
- Androide ClickableSpan intercepta el evento de clic
- Cómo obtener marcas de acento en las letras de un TextView Android
- Configuración de Ellipsize en TextView reduce las líneas mostradas por uno (en lugar de sólo elipsis último)
- Actividad requiere FLAG_ACTIVITY_NEW_TASK Indicador
- ¿Cómo escalar / cambiar el tamaño del texto para que se ajuste a un TextView?
- Desactivar la conversión de palabras en un TextView multi-línea de Android
- Incluir un TextView y anular el texto
No creo que pueda establecer el estilo mediante programación. Para evitar esto, puede crear un archivo xml de diseño de plantilla con el estilo asignado, por ejemplo en res / layout cree tvtemplate.xml como con el siguiente contenido:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="This is a template" style="@style/my_style" />
Luego infle esto para instanciar tu nuevo TextView:
TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvtemplate, null);
Espero que esto ayude.
Puede crear un estilo genérico y volver a usarlo en varias vistas de texto como la siguiente:
textView.setTextAppearance(this, R.style.MyTextStyle);
Editar: se refiere a Contexto
Puede pasar un ContextThemeWrapper al constructor de la siguiente manera:
TextView myText = new TextView(new ContextThemeWrapper(MyActivity.this, R.style.my_style));
Puede establecer el estilo en el constructor (pero los estilos no se pueden cambiar / establecer dinámicamente).
View(Context, AttributeSet, int)
(el int
es un recurso de estilo)
Respuesta de Romain Guy
referencia
El cambio dinámico de estilos no se admite (todavía). Tienes que configurar el estilo antes de que se cree la vista, a través de XML.
La respuesta aceptada fue una gran solución para mí. La única cosa a agregar es sobre inflate()
método.
En la respuesta aceptada, todos los parámetros de android:layout_*
no se aplicarán.
La razón no es manera de ajustarlo, causa null
se pasó como ViewGroup parent
.
Puedes usarlo así:
View view = inflater.inflate(R.layout.view, parent, false);
Y el parent
es el ViewGroup
, desde donde te gusta ajustar android:layout_*
.
En este caso, se establecerán todas las propiedades relativas.
Espero que sea útil para alguien.
Al utilizar vistas personalizadas que pueden utilizar herencia de estilo (o atributos con estilo de evento), tiene que modificar el segundo constructor para no perder el estilo. Esto funcionó para mí, sin necesidad de utilizar setTextAppearence () :
public CustomView(Context context, AttributeSet attrs) { this(context, attrs, attrs.getStyleAttribute()); }
Conocí el problema también, y encontré la manera de fijar el estilo programatically. Tal vez todos lo necesitan, Así que actualizar allí.
El tercer parámetro de View constructor acepta un tipo de attr en su tema como el código fuente siguiente:
public TextView(Context context, AttributeSet attrs) { this(context, attrs, com.android.internal.R.attr.textViewStyle); }
Por lo que debe pasar un tipo de R.attr. ** en lugar de R.style. **
En mis códigos, hice los siguientes pasos:
En primer lugar, personalizar un attr personalizado para ser utilizado por los temas en attr.xml.
<attr name="radio_button_style" format="reference" />
En segundo lugar, específico de su estilo en el tema utilizado en style.xml.
<style name="AppTheme" parent="android:Theme.Translucent"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> <item name="radio_button_style">@style/radioButtonStyle</item> </style> <style name="radioButtonStyle" parent="@android:style/Widget.CompoundButton.RadioButton"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">64dp</item> <item name="android:background">#000</item> <item name="android:button">@null</item> <item name="android:gravity">center</item> <item name="android:saveEnabled">false</item> <item name="android:textColor">@drawable/option_text_color</item> <item name="android:textSize">9sp</item> </style>
Al final, úsalo!
RadioButton radioButton = new RadioButton(mContext, null, R.attr.radio_button_style);
La vista creada mediante programación utilizará el estilo especificado en su tema.
Usted puede tener un intento, y espero que pueda trabajar para usted perfectamente.
Parámetro int defStyleAttr
no especifica el estilo. En la documentación de Android:
DefStyleAttr – Un atributo en el tema actual que contiene una referencia a un recurso de estilo que suministra valores predeterminados para la vista. Puede ser 0 para no buscar valores por defecto.
Para configurar el estilo en el constructor View tenemos 2 posibles soluciones:
-
Con el uso de ContextThemeWrapper:
ContextThemeWrapper wrappedContext = new ContextThemeWrapper(yourContext, R.style.your_style); TextView textView = new TextView(wrappedContext, null, 0);
-
Con constructor de cuatro argumentos (disponible a partir de LOLLIPOP):
TextView textView = new TextView(yourContext, null, 0, R.style.your_style);
La clave para ambas soluciones – defStyleAttr
parámetro debe ser 0 para aplicar nuestro estilo a la vista.
Sólo he probado con EditText, pero puede utilizar el método
Public void setBackgroundResource (int resid)
Para aplicar un estilo definido en un archivo XML.
Sine este método pertenece a View Creo que funcionará con cualquier elemento de la interfaz de usuario.
Saludos.
- Fragmentos dentro de Fragmentos
- Uso de Intent en una aplicación de Android para mostrar otra actividad