<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
	<channel>
		<title>How to Support Themes in Custom Views for Android Apps | Infinum</title>
		<atom:link href="https://infinum.com/blog/how-to-support-themes-in-custom-views-for-android-apps/feed/" rel="self" type="application/rss+xml" />
		<link>https://infinum.com/blog/how-to-support-themes-in-custom-views-for-android-apps/</link>
		<description>Building digital products</description>
		<lastBuildDate>Tue, 14 Apr 2026 10:32:35 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>

					<item>
				<image>
					<url>8026https://infinum.com/uploads/2019/12/how-to-support-themes-in-custom-views-for-android-apps-0.webp</url>
				</image>
				<title>How to Support Themes in Custom Views for Android Apps</title>
				<link>https://infinum.com/blog/how-to-support-themes-in-custom-views-for-android-apps/</link>
				<pubDate>Thu, 05 Dec 2019 14:45:00 +0000</pubDate>
				<dc:creator>Mladen Rakonjac</dc:creator>
				<guid isPermaLink="false">https://infinum.com/the-capsized-eight/how-to-support-themes-in-custom-views-for-android-apps/</guid>
				<description>
					<![CDATA[<p>Have you ever supported multiple themes in your application? Learn how to prepare a custom view that won't fall apart.</p>
<p>The post <a href="https://infinum.com/blog/how-to-support-themes-in-custom-views-for-android-apps/">How to Support Themes in Custom Views for Android Apps</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-304"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-92">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-95"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-93">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-94'
	>
	Have you ever supported multiple themes in your application? You made a new theme, added new colors, made a new build and everything looked shiny – except your custom view? Learn how to prepare a custom view that won’t fall apart.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-98"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-96">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-97'
	>
	The glue that keeps it all in one place</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-101"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-99">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-100'
	>
	Your custom view should support theming, so that it does not break the theme once you change it. Let’s go over a simple example.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-104"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-102">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-103'
	>
	Let’s say you want to make a custom view that will have an icon, title, and a description. Here’s how to create a layout for that custom view:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-107"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-105"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-auto" data-id="es-106">
	<picture class="image__picture block-media__image-picture">
								
			<source
				srcset=https://infinum.com/uploads/2019/12/how-to-support-themes-in-custom-views-for-android-apps-1-1400x354.webp				media='(max-width: 699px)'
				type=image/webp								height="354"
												width="1400"
				 />
												<img
					src="https://infinum.com/uploads/2019/12/how-to-support-themes-in-custom-views-for-android-apps-1.webp"
					class="image__img block-media__image-img"
					alt=""
										height="368"
															width="1454"
										loading="lazy"
					 />
					</picture>

			<figcaption class="image__figcaption block-media__image-figcaption">
			Layout for the custom view		</figcaption>
	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-109"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;?</span><span class="token" style="color: #22863a;">xml</span><span class="token" style="color: #6f42c1;"> version</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">1.0</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #6f42c1;"> encoding</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">utf-8</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">?&gt;</span><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">merge</span><span class="token"> </span><span class="token" style="color: #6f42c1;">tools</span><span class="token" style="color: #6f42c1;">:</span><span class="token" style="color: #6f42c1;">parentTag</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">androidx.constraintlayout.widget.ConstraintLayout</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> ... </span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">ImageView</span><span class="token"> </span><span class="token" style="color: #6f42c1;">android</span><span class="token" style="color: #6f42c1;">:</span><span class="token">id=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">@+id/image</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> ... </span><span class="token">/&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">TextView</span><span class="token"> </span><span class="token" style="color: #6f42c1;">android</span><span class="token" style="color: #6f42c1;">:</span><span class="token">id=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">@+id/title</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> ...</span><span class="token">/&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">TextView</span><span class="token"> </span><span class="token" style="color: #6f42c1;">android</span><span class="token" style="color: #6f42c1;">:</span><span class="token">id=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">@+id/description</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> ...</span><span class="token">/&gt;</span><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">merge</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-112"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-110">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-111'
	>
	The next step is to create a class for that custom view:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-114"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-kotlin github-light" data-language="kotlin" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">&lt;</span><span class="token">span </span><span class="token" style="color: #d73a49;">data</span><span class="token" style="color: #d73a49;">-</span><span class="token">es</span><span class="token" style="color: #d73a49;">-</span><span class="token">language</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">c</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token">span</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">lass AwesomeCustomView </span><span class="token">constructor</span><span class="token">(
</span></span><span class="line"><span class="token">   context</span><span class="token">: </span><span class="token" style="color: #6f42c1;">Context</span><span class="token">,
</span></span><span class="line"><span class="token">   attrs</span><span class="token">: </span><span class="token" style="color: #6f42c1;">AttributeSet</span><span class="token">? </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">null</span><span class="token">,
</span></span><span class="line"><span class="token">   defStyleAttr</span><span class="token">: </span><span class="token" style="color: #6f42c1;">Int</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">0</span><span class="token">
</span></span><span class="line"><span class="token">) </span><span class="token">: </span><span class="token" style="color: #6f42c1;">ConstraintLayout</span><span class="token">(</span><span class="token" style="color: #6f42c1;">context</span><span class="token">, </span><span class="token" style="color: #6f42c1;">attrs</span><span class="token">, </span><span class="token" style="color: #6f42c1;">defStyleAttr</span><span class="token">) </span><span class="token">{
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token" style="color: #d73a49;">init</span><span class="token"> {
</span></span><span class="line"><span class="token">       View</span><span class="token">.inflate</span><span class="token">(context, R.layout.layout_awesome_custom_view, </span><span class="token" style="color: #005cc5;">this</span><span class="token">)
</span></span><span class="line"><span class="token">   }
</span></span><span class="line"><span class="token">}
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-117"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-115">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-116'
	>
	You shouldn’t set drawable for ImageView nor the text size, line height, and the color for your TextViews directly in the layout of the custom view.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-120"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-118">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-119'
	>
	Stylable</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-123"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-121">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-122'
	>
	Let’s make the custom view styleable, so that different themes can have different style values. To do that, add the following code in <code>attrs.xml</code> file:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-125"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">resources</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">declare-styleable</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">AwesomeCustomView</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">       </span><span class="token" style="color: #6a737d;">&lt;!--</span><span class="token" style="color: #6a737d;">  todo add custom attributes </span><span class="token" style="color: #6a737d;">--&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">declare-styleable</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">resources</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-128"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-126">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-127'
	>
	Now, add <code>image</code> and <code>imageTintColor</code> attributes, which will be used to set image drawable and tint color:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-130"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">resources</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">declare-styleable</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">AwesomeCustomView</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">       </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">attr</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">awesomeImage</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">format</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">reference</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">/&gt;</span><span class="token">
</span></span><span class="line"><span class="token">       </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">attr</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">awesomeImageTintColor</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">format</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">color</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">/&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">declare-styleable</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">resources</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-133"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-131">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-132'
	>
	You can use those attributes when adding <code>AwesomeCustomView</code> in fragment or activity layout. For example, if you want to add it in <code>fragment_example.xml</code>:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-135"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">androidx.constraintlayout.widget.ConstraintLayout</span><span class="token"> ... </span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">co.infinum.styles.AwesomeCustomView</span><span class="token">
</span></span><span class="line"><span class="token">       ...
</span></span><span class="line"><span class="token">       </span><span class="token" style="color: #6f42c1;">app</span><span class="token" style="color: #6f42c1;">:</span><span class="token" style="color: #6f42c1;">awesomeImage</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">@drawable/ic_info</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">       </span><span class="token" style="color: #6f42c1;">app</span><span class="token" style="color: #6f42c1;">:</span><span class="token" style="color: #6f42c1;">awesomeImageTintColor</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">@color/green</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">       </span><span class="token">/&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">androidx.constraintlayout.widget.ConstraintLayout</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-140"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="blockquote block-blockquote__blockquote" data-id="es-136">
	
	<div class="blockquote__content">
		<i
	class="icon blockquote__icon icon--size-16 icon--scale-100"
	 aria-hidden='true' data-name='blockquote-24' data-id='es-137'>
	<svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path clip-rule='evenodd' d='m12 24c6.6274 0 12-5.3726 12-12 0-2.79685-.9568-5.37021-2.561-7.41062-.581.22951-1.0832.60583-1.5069 1.12898-.5132.60844-.7698 1.41969-.7698 2.43375v.07605h2.5789v5.59004h-5.6197v-5.01962c0-1.11547.154-2.06616.4619-2.85205.3336-.81125.757-1.48307 1.2702-2.01545.528-.52161 1.1175-.92155 1.7687-1.1998-2.0728-1.70651-4.7279-2.73128-7.6223-2.73128-6.62742 0-12 5.37258-12 12 0 6.6274 5.37258 12 12 12zm-3.53811-18.05347c-.30793.78589-.46189 1.73658-.46189 2.85205v5.01962h5.6197v-5.59004h-2.5789v-.07605c0-1.01406.2566-1.82531.7698-2.43375.5389-.63379 1.1804-1.05209 1.9245-1.2549v-2.28164c-.7441.07605-1.4626.25351-2.1555.53238-.6928.27887-1.3086.68449-1.84752 1.21688-.51321.53238-.9366 1.2042-1.27019 2.01545z' fill='currentColor' fill-rule='evenodd'/></svg></i><p	class='typography typography--size-36-text js-typography blockquote__quote'
	data-id='es-138'
	>
	When you use custom attribute, you should use app: prefix instead of android: prefix.</p>
		<div class="blockquote__caption-wrap">
					</div>
	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-143"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-141">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-142'
	>
	To support those attributes, you should get values for those attributes in <code>AwesomeCustomView</code> class. You can do that from <code>attrs</code>, using <code>obtainStyledAttributes()</code> function:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-145"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-c github-light" data-language="c" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">&lt;</span><span class="token">span data</span><span class="token" style="color: #d73a49;">-</span><span class="token">es</span><span class="token" style="color: #d73a49;">-</span><span class="token">language</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">c</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token">span</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">lass AwesomeCustomView @JvmOverloads </span><span class="token" style="color: #6f42c1;">constructor</span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">   context: Context</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">   attrs: AttributeSet</span><span class="token" style="color: #d73a49;">?</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> null</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">   defStyleAttr</span><span class="token" style="color: #d73a49;">:</span><span class="token"> Int </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">0</span><span class="token">
</span></span><span class="line"><span class="token">)</span><span class="token"> : </span><span class="token" style="color: #6f42c1;">ConstraintLayout</span><span class="token">(</span><span class="token">context</span><span class="token">,</span><span class="token"> attrs</span><span class="token">,</span><span class="token"> defStyleAttr</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">   init </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">       </span><span class="token" style="color: #24292e;">View</span><span class="token">.</span><span class="token" style="color: #6f42c1;">inflate</span><span class="token">(</span><span class="token">context</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">R</span><span class="token">.</span><span class="token" style="color: #24292e;">layout</span><span class="token">.</span><span class="token" style="color: #24292e;">layout_awesome_custom_view</span><span class="token">,</span><span class="token"> this</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">       attrs</span><span class="token" style="color: #d73a49;">?</span><span class="token">.let </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">           val typedArray </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #24292e;">context</span><span class="token">.</span><span class="token" style="color: #6f42c1;">obtainStyledAttributes</span><span class="token">(</span><span class="token">it</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">R</span><span class="token">.</span><span class="token" style="color: #24292e;">styleable</span><span class="token">.</span><span class="token" style="color: #24292e;">AwesomeCustomView</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">           </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;">todo get value for attrs                            </span><span class="token">
</span></span><span class="line"><span class="token">           </span><span class="token" style="color: #24292e;">typedArray</span><span class="token">.</span><span class="token" style="color: #6f42c1;">recycle</span><span class="token">(</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">       </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">   }
</span></span><span class="line"><span class="token">}
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-148"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-146">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-147'
	>
	Once you’re finished with <code>typedArray</code>, you will need to recycle it.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-151"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-149">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-150'
	>
	To set tint, do the following:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-153"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-kotlin github-light" data-language="kotlin" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">val </span><span class="token">imageTintColorResource </span><span class="token" style="color: #d73a49;">=</span><span class="token"> typedArray</span><span class="token">.getResourceId</span><span class="token">(R.styleable.AwesomeCustomView_awesomeImageTintColor,
</span></span><span class="line"><span class="token">   android.R.color.white)
</span></span><span class="line"><span class="token">val </span><span class="token">imageTintColor </span><span class="token" style="color: #d73a49;">=</span><span class="token"> ContextCompat</span><span class="token">.getColor</span><span class="token">(context, imageTintColorResource)
</span></span><span class="line"><span class="token">ImageViewCompat</span><span class="token">.setImageTintList</span><span class="token">(image, ColorStateList</span><span class="token">.valueOf</span><span class="token">(imageTintColor))
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-156"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-154">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-155'
	>
	Unless you specify tint color, it will fall back to white color.<br>You can do a similar thing for <code>awesomeImage</code>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-159"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-157">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-158'
	>
	Style attribute</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-162"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-160">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-161'
	>
	Should you set the <code>awesomeImageTintColor</code> and <code>awesomeImage</code> attributes wherever you use <code>AwesomeCustomView</code> with the desired tint color? <code>No</code>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-165"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-163">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-164'
	>
	There is a better way to handle it. In the <code>styles.xml</code>, let’s make a new style :</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-167"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">resources</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">style</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">Widget.AppTheme.AwesomeCustomView</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">parent</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">       </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">item</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">awesomeImageTintColor</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">@color/green</span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">item</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">style</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">resources</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-172"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="blockquote block-blockquote__blockquote" data-id="es-168">
	
	<div class="blockquote__content">
		<i
	class="icon blockquote__icon icon--size-16 icon--scale-100"
	 aria-hidden='true' data-name='blockquote-24' data-id='es-169'>
	<svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path clip-rule='evenodd' d='m12 24c6.6274 0 12-5.3726 12-12 0-2.79685-.9568-5.37021-2.561-7.41062-.581.22951-1.0832.60583-1.5069 1.12898-.5132.60844-.7698 1.41969-.7698 2.43375v.07605h2.5789v5.59004h-5.6197v-5.01962c0-1.11547.154-2.06616.4619-2.85205.3336-.81125.757-1.48307 1.2702-2.01545.528-.52161 1.1175-.92155 1.7687-1.1998-2.0728-1.70651-4.7279-2.73128-7.6223-2.73128-6.62742 0-12 5.37258-12 12 0 6.6274 5.37258 12 12 12zm-3.53811-18.05347c-.30793.78589-.46189 1.73658-.46189 2.85205v5.01962h5.6197v-5.59004h-2.5789v-.07605c0-1.01406.2566-1.82531.7698-2.43375.5389-.63379 1.1804-1.05209 1.9245-1.2549v-2.28164c-.7441.07605-1.4626.25351-2.1555.53238-.6928.27887-1.3086.68449-1.84752 1.21688-.51321.53238-.9366 1.2042-1.27019 2.01545z' fill='currentColor' fill-rule='evenodd'/></svg></i><p	class='typography typography--size-36-text js-typography blockquote__quote'
	data-id='es-170'
	>
	Note: When you use a custom attribute in style, don’t use the android or app prefix.</p>
		<div class="blockquote__caption-wrap">
					</div>
	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-175"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-173">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-174'
	>
	For example, instead of having <code>android:awesomeImageTintColor</code> you should just have <code>awesomeImageTintColor</code>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-178"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-176">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-177'
	>
	Apply it in <code>activity_acv_example.xml</code>:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-180"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">androidx.constraintlayout.widget.ConstraintLayout</span><span class="token"> ... </span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">co.infinum.styles.AwesomeCustomView</span><span class="token">
</span></span><span class="line"><span class="token">       ...
</span></span><span class="line"><span class="token">       </span><span class="token" style="color: #6f42c1;">style</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">@style/Widget.AppTheme.AwesomeCustomView</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">       </span><span class="token">/&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">androidx.constraintlayout.widget.ConstraintLayout</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-183"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-181"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-182">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2019/12/how-to-support-themes-in-custom-views-for-android-apps-2.webp"
					class="image__img block-media__image-img"
					alt=""
										height="365"
															width="1080"
										loading="lazy"
					 />
					</picture>

			<figcaption class="image__figcaption block-media__image-figcaption">
			Custom view with applied style		</figcaption>
	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-186"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-184">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-185'
	>
	At this point, you should only use one line in all the places where you want this style for your view.<br>If you want to have a different style, you can do it with ease:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-188"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">resources</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">style</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">Widget.AppTheme.AwesomeCustomView.Warning</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">parent</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">       </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">item</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">awesomeImageTintColor</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">@color/sunset</span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">item</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">style</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">resources</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-191"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-189">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-190'
	>
	To use this in layout, just change one line:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-193"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">androidx.constraintlayout.widget.ConstraintLayout</span><span class="token"> ... </span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">co.infinum.styles.AwesomeCustomView</span><span class="token">
</span></span><span class="line"><span class="token">       ...
</span></span><span class="line"><span class="token">       </span><span class="token" style="color: #6f42c1;">style</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">@style/Widget.AppTheme.AwesomeCustomView.Warning</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">       </span><span class="token">/&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">androidx.constraintlayout.widget.ConstraintLayout</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-196"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-194"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-195">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2019/12/how-to-support-themes-in-custom-views-for-android-apps-3.webp"
					class="image__img block-media__image-img"
					alt=""
										height="381"
															width="1080"
										loading="lazy"
					 />
					</picture>

			<figcaption class="image__figcaption block-media__image-figcaption">
			Custom view when Warning Theme is applied		</figcaption>
	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-199"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-197">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-198'
	>
	How did you end up with the name <code>Widget.AppTheme.AwesomeCustomView</code>?</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-202"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-200">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-201'
	>
	Let’s break it down to parts:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-205"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-203">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-204'
	>
	<li><code>Widget</code> —  describes that there is a defined style for a view</li><li><code>AppTheme</code> —  describes that this style is for the base AppTheme base theme</li><li><code>AwesomeCustomView</code> —  describes which view the style is for</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-208"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-206">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-207'
	>
	Instead of having lines of code for each custom attribute, now you can just use the style attribute.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-211"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-209">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-210'
	>
	TextAppearance attributes</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-214"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-212">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-213'
	>
	You should do a similar thing for our <code>TextViews</code>. Instead of making attributes for text size, text line height, text color, font, and other characteristics for each <code>TextView</code>, you should make a custom <code>textAppearance</code> attr.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-217"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-215">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-216'
	>
	What is the <code>textAppearance</code> attr? It is the same as style attribute but for the text. Instead of supporting all the attributes, as style does, <code>textAppearance</code> supports only some attributes, like <code>textColor</code>,<code>textSize</code>, <code>typeface</code>, <code>fontFamily</code> etc. However, it does not support ellipsize or background for example.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-220"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-218">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-219'
	>
	In the <code>attr.xml</code> file, you should add the new attribute:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-222"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">resources</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">declare-styleable</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">AwesomeCustomView</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">       ...
</span></span><span class="line"><span class="token">       </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">attr</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">awesomeTitleTextAppearance</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">format</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">reference</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">/&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">declare-styleable</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">resources</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-225"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-223">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-224'
	>
	To support it, you will need to make the following changes in the AwesomeCustomView class:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-227"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-kotlin github-light" data-language="kotlin" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">val </span><span class="token">titleStyleRes </span><span class="token" style="color: #d73a49;">=</span><span class="token"> typedArray</span><span class="token">.getResourceId</span><span class="token">(R.styleable.AwesomeCustomView_awesomeTitleTextAppearance,
</span></span><span class="line"><span class="token">   R.style.TextAppearance_AppCompat_Title)
</span></span><span class="line"><span class="token">TextViewCompat</span><span class="token">.setTextAppearance</span><span class="token">(title, titleStyleRes)
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-230"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-228">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-229'
	>
	If you don’t specify text appearance, it will fallback to AppCompat’s Title TextAppearance.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-233"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-231">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-232'
	>
	Now, you can get down to adding the special <code>TextAppearance</code> style for the title in the <code>styles.xml</code> file.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-236"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-234">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-235'
	>
	Let’s call that style Header :</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-238"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">style</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">TextAppearance.AppTheme.Header</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">parent</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">android:TextAppearance</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">item</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">android:lineSpacingMultiplier</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">0</span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">item</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">item</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">android:textSize</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">32sp</span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">item</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">item</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">android:lineSpacingExtra</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">40sp</span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">item</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">item</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">android:textStyle</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">bold</span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">item</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">style</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-241"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-239">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-240'
	>
	Let’s explain the naming for <code>TextAppearance.AppTheme.Header</code> :</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-244"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-242">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-243'
	>
	<li><code>TextAppearance</code>  —  describes that we have a style for textAppearance attr</li><li><code>AppTheme</code>  — describes that this style is for our AppTheme base theme</li><li><code>Header</code> — describes our text style</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-247"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-245">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-246'
	>
	You’ll do a similar code for description.<br>To use them in the <code>Widget.AppTheme.AwesomeCustomView</code> style, add the following:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-249"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">style</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">Widget.AppTheme.AwesomeCustomView</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">parent</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   ...
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">item</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">awesomeTitleTextAppearance</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">@style/TextAppearance.AppTheme.Header</span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">item</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">item</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">awesomeDescriptionTextAppearance</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">@style/TextAppearance.AppTheme.Body</span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">item</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">style</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-252"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-250">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-251'
	>
	Theme</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-255"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-253">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-254'
	>
	Let’s say you want to use the same style for your <code>AwesomeCustomView</code> everywhere where the base <code>AppTheme</code> is used. In that case, you should declare <code>AppTheme</code> styleable and add a special attribute in <code>attrs.xml</code>:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-257"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">declare-styleable</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">AppTheme</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">attr</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">awesomeCustomViewStyle</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">format</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">reference</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">/&gt;</span><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">declare-styleable</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-260"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-258">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-259'
	>
	Next, you should set value for <code>awesomeCustomViewStyle</code> in your <code>AppTheme</code> :</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-262"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">style</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">AppTheme</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">parent</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">Theme.AppCompat.Light.NoActionBar</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">   
</span></span><span class="line"><span class="token">     </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">item</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">awesomeCustomViewStyle</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">@style/Widget.AppTheme.AwesomeCustomView</span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">item</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">style</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-265"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-263">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-264'
	>
	Now, you should end up with different parameters for <code>obtainStyledAttributes</code> function:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-267"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-kotlin github-light" data-language="kotlin" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">val </span><span class="token">typedArray </span><span class="token" style="color: #d73a49;">=</span><span class="token"> context</span><span class="token">.obtainStyledAttributes</span><span class="token">(
</span></span><span class="line"><span class="token">   it,
</span></span><span class="line"><span class="token">   R.styleable.AwesomeCustomView,
</span></span><span class="line"><span class="token">   R.attr.awesomeCustomViewStyle,                                   
</span></span><span class="line"><span class="token">   R.style.Widget_AppTheme_AwesomeCustomView
</span></span><span class="line"><span class="token">)
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-270"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-268">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-269'
	>
	During the initialization of the <code>AwesomeCustomView</code> , Android will get the style of your view from <code>R.attr.awesomeCustomViewStyle</code>. If you use another theme, in which there is no set value for awesomeCustomViewStyle attribute, it will fall back to <code>R.style.Widget_AppTheme_AwesomeCustomView</code>.<br><br>That means you don’t have to use this line anymore:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-272"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-kotlin github-light" data-language="kotlin" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">style</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">@style/Widget.AppTheme.AwesomeCustomView</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-275"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-273">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-274'
	>
	Having done all that, you should now support themes for your custom view. If you want to use it in another theme, you can easily do it:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-277"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">style</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">AnotherTheme</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">parent</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">AppTheme</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">item</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">awesomeCustomViewStyle</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">@style/Widget.AnotherTheme.AwesomeCustomView</span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">item</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">style</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-280"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-278">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-279'
	>
	Dark theme</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-283"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-281">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-282'
	>
	Once you have a default custom view style per theme, it is really easy to support dark theme for your custom view. Your <code>AppTheme</code> should extend <code>Theme.AppCompat.DayNight</code> in <code>res/values/themes.xml</code> :</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-285"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">style</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">AppTheme</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">parent</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">Theme.AppCompat.DayNight</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">   
</span></span><span class="line"><span class="token">     </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">item</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">awesomeCustomViewStyle</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">@style/Widget.AppTheme.AwesomeCustomView</span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">item</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">style</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-288"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-286">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-287'
	>
	And in <code>res/values-night/themes.xml</code>, just define the dark resources:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-290"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-xml github-light" data-language="xml" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">
</span></span><span class="line"><span class="token">&lt;</span><span class="token" style="color: #22863a;">style</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">AppTheme</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">parent</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">Theme.AppCompat.DayNight</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">   
</span></span><span class="line"><span class="token">     </span><span class="token">&lt;</span><span class="token" style="color: #22863a;">item</span><span class="token"> </span><span class="token" style="color: #6f42c1;">name</span><span class="token">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">awesomeCustomViewStyle</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">@style/Widget.AppTheme.Dark.AwesomeCustomView</span><span class="token">&lt;/</span><span class="token" style="color: #22863a;">item</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #22863a;">style</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-293"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-291"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-292">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2019/12/how-to-support-themes-in-custom-views-for-android-apps-4.webp"
					class="image__img block-media__image-img"
					alt=""
										height="372"
															width="1080"
										loading="lazy"
					 />
					</picture>

			<figcaption class="image__figcaption block-media__image-figcaption">
			Custom view when dark theme is applied		</figcaption>
	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-296"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-294">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-295'
	>
	The checklist</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-299"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-297">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-298'
	>
	To conclude, if you want to avoid problems with custom views when you theme your app, your custom views should support custom <code>style</code> attributes for each child view style, and custom <code>textAppearance</code> attributes for each child TextView.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-302"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-300">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-301'
	>
	Furthermore, it should have defined styles for each different usage in each theme, as well as a default style for each theme.</p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/how-to-support-themes-in-custom-views-for-android-apps/">How to Support Themes in Custom Views for Android Apps</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
		
	</channel>
</rss>