How to change a TextView's style at runtime
I did this by creating a new XML file res/values/style.xml
as follows:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="boldText">
<item name="android:textStyle">bold|italic</item>
<item name="android:textColor">#FFFFFF</item>
</style>
<style name="normalText">
<item name="android:textStyle">normal</item>
<item name="android:textColor">#C0C0C0</item>
</style>
</resources>
I also have an entries in my "strings.xml" file like this:
<color name="highlightedTextViewColor">#000088</color>
<color name="normalTextViewColor">#000044</color>
Then, in my code I created a ClickListener to trap the tap event on that TextView:
EDIT:
As from API 23 'setTextAppearance' is deprecated
myTextView.setOnClickListener(new View.OnClickListener() {
public void onClick(View view){
//highlight the TextView
//myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
if (Build.VERSION.SDK_INT < 23) {
myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
} else {
myTextView.setTextAppearance(R.style.boldText);
}
myTextView.setBackgroundResource(R.color.highlightedTextViewColor);
}
});
To change it back, you would use this:
if (Build.VERSION.SDK_INT < 23) {
myTextView.setTextAppearance(getApplicationContext(), R.style.normalText);
} else{
myTextView.setTextAppearance(R.style.normalText);
}
myTextView.setBackgroundResource(R.color.normalTextViewColor);
As for the TextView, programmatically change the style?
Thank you all , I found the solution I need .
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(AbsListView.LayoutParams.WRAP_CONTENT, AbsListView.LayoutParams.FILL_PARENT);
params.weight = 1.0f;
params.gravity = Gravity.CENTER;
TextView textView = new TextView(PhotoActivity.this);
textView.setText("Photo not found.");
textView.setTextColor(Color.WHITE);
textView.setLayoutParams(params);
As an alternative way:
textView.setGravity(Gravity.CENTER);
How do I set the style of a textView programmatically?
You can't programmatically set the style of a View, but you might be able to do something like textView.setTextAppearance(context, android.R.style.TextAppearance_Small);
.
Android - set TextView TextStyle programmatically?
textview.setTypeface(Typeface.DEFAULT_BOLD);
setTypeface is the Attribute textStyle.
As Shankar V added, to preserve the previously set typeface attributes you can use:
textview.setTypeface(textview.getTypeface(), Typeface.BOLD);
android dynamically change style at runtime
Changing the style after creating the view is not supported .. so what you can do is:
- create a new android xml file of type values
- add new theme
- add your elements to that theme and their values and save the file
Now, when you are dynamically creating the new view you call the constructor that will allow to define a defStyle. Then, you point to the style ID you have just created by pointing to R."the XML file name"."your style ID"
myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
android : Textview Set Style in runtime
If you can use the layout file, do the following - it's simpler.
<TextView
style="@style/TitleSep"
android:text="hello" />
UPDATE: (from comment)
Why don't create the textview at compile time, but make it invisible, and set it to visible if and when you need to show it. The reason I suggest this roundabout method is because setting the style at compile time seems simpler.
Set style for TextView programmatically
I do not believe you can set the style programatically. To get around this you can create a template layout xml file with the style assigned, for example in res/layout create tvtemplate.xml as with the following content:
<?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" />
then inflate this to instantiate your new TextView:
TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvtemplate, null);
How to change existing TextView style in action
I used these two answers to make it work:
- https://stackoverflow.com/a/5488652/1639556
- https://stackoverflow.com/a/14195090/1639556
and the code is:
ViewManager parent = (ViewManager) unknown.getParent();
parent.removeView(unknown);
TextView newUnknown = (TextView)getLayoutInflater().inflate(R.layout.tvtemplate, null);
newUnknown.setId(unknown.getId());
parent.addView(newUnknown, unknown.getLayoutParams());
unknown = newUnknown;
Related Topics
What Is the Default Access Specifier in Java
Java 32-Bit VS 64-Bit Compatibility
Java - When to Use 'This' Keyword
Recommendations on a Free Library to Be Used for Zipping Files
Pkix Path Building Failed: Unable to Find Valid Certification Path to Requested Target
How to Set the Maximum Memory Usage for Jvm
Why Does Java Implicitly (Without Cast) Convert a 'Long' to a 'Float'
Converting JSON to Xml in Java
How to Avoid Using Scriptlets in My Jsp Page
Java Compiled Classes Contain Dollar Signs
Java Map with Values Limited by Key's Type Parameter
How to Add Native Library to "Java.Library.Path" with Eclipse Launch (Instead of Overriding It)
How to Check If Internet Connection Is Present in Java
How to Load a Resource from Web-Inf Directory of a Web Archive