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 );

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

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:

  1. Con el uso de ContextThemeWrapper:

     ContextThemeWrapper wrappedContext = new ContextThemeWrapper(yourContext, R.style.your_style); TextView textView = new TextView(wrappedContext, null, 0); 
  2. 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.

  • TextView android: ellipsize = "end" issue
  • Centrar el contenido de TextView vertical y horizontalmente - LinearLayout
  • Tools: text para artículos de RecyclerView
  • Cómo establecer programaticamente maxLength en Android TextView?
  • ¿Cómo puedo añadir un TextView a un LinearLayout dinámicamente en Android?
  • Resaltar Textview con EditText
  • Android: singleLine de TextView es nolonger en el "Deprecated"?
  • ¿Cómo puedo detectar un clic en el título de ActionBar?
  • ¿Cómo puedo escribir en un archivo .txt en Android?
  • Android 2.2: ¿Cómo actualizar las vistas de texto automáticamente con un temporizador?
  • ¿Cómo detectar pulsaciones de teclas de caracteres?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.