Setting TextView TextAppeareance Programmatically in android

AndroidTextview

Android Problem Overview


I am going to implement a LinearLayout in which the input fields are programmatically generated according to the number of fields of the database table.

Unfortunately, when I am trying to set the attribute: textApperance as textApperanceLarge in the TextView, it doesn't work. Below is my code...

for (int i = 0; i < selectedProducts; i++) {

			premLayout[i] = new LinearLayout(this);
			premLayout[i].setLayoutParams(new LinearLayout.LayoutParams(
					LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
			premLayout[i].setOrientation(LinearLayout.HORIZONTAL);
			premLayout[i].setGravity(Gravity.TOP);

			premTextView[i] = new TextView(this);
			premTextView[i].setLayoutParams(new LinearLayout.LayoutParams(
					LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
					2.0f));
			premTextView[i].setTextAppearance(this, android.R.attr.textAppearanceLarge);
			
			premTextView[i].setText(premiumChannels.get(i));
			premTextView[i].setId(i + 600);
		
			int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, getResources().getDisplayMetrics());
			premTextView[i].setWidth(px);
			
			premLayout[i].addView(premTextView[i]);

Android Solutions


Solution 1 - Android

Use like this. It will work.

textView.setTextAppearance(this, android.R.style.TextAppearance_Large);

Or, since API 23, you don't need to pass a context. Hence, you can simply call:

textView.setTextAppearance(android.R.style.TextAppearance_Large);

If you want to support API 23 or higher as well as lower one, you can use the below method to simplify your task. Use the below method only if you are already targeting API 23 or higher. If you are targeting API is less than 23, the below code will give error as the new method wasn't available in it.

public void setTextAppearance(Context context, int resId) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        super.setTextAppearance(context, resId);
    } else {
        super.setTextAppearance(resId);
    }
}

Solution 2 - Android

Use TextViewCompat.setTextAppearance() method which will take care of your sdk version checks.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRaju yourPepeView Question on Stackoverflow
Solution 1 - AndroidHomamView Answer on Stackoverflow
Solution 2 - AndroidRaghav SharmaView Answer on Stackoverflow