{"id":3382,"date":"2011-05-06T09:07:34","date_gmt":"2011-05-06T07:07:34","guid":{"rendered":"http:\/\/blog.jteam.nl\/?p=3382"},"modified":"2011-05-06T09:07:34","modified_gmt":"2011-05-06T07:07:34","slug":"android-basics-applying-some-ui-patterns","status":"publish","type":"post","link":"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/","title":{"rendered":"Android basics &#8211; Applying some UI patterns"},"content":{"rendered":"<p>When I started with my Android application, I had the idea to create a home screen and an action bar just like one of the Android developers described in a <a href=\"http:\/\/android-developers.blogspot.com\/2010\/05\/twitter-for-android-closer-look-at.html\" target=\"_blank\" rel=\"noopener\">blog<\/a> item. I was really helped by the source code of the Google I\/O Schedule <a href=\"http:\/\/code.google.com\/p\/iosched\/\" target=\"_blank\" rel=\"noopener\">app<\/a>. In this post I will explain how I used several layouts to create my app.<\/p>\n<p><!--more--><\/p>\n<h3>Action bar<\/h3>\n<p><a href=\"http:\/\/blog.jteam.nl\/wp-content\/uploads\/2011\/05\/actionbar.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none;margin: 0px 10px 0px 0px;padding-left: 0px;padding-right: 0px;float: left;padding-top: 0px;border-width: 0px\" title=\"actionbar\" src=\"http:\/\/blog.jteam.nl\/wp-content\/uploads\/2011\/05\/actionbar_thumb.png\" border=\"0\" alt=\"actionbar\" width=\"169\" height=\"26\" align=\"left\" \/><\/a>The action bar is a bar on the top of the screen that provides your users with quick access to common actions. In the screenshot I placed an icon in the right corner that lets the user quickly return to the home screen.<\/p>\n<p>The XML layout: <\/p>\n<pre>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n    &lt;LinearLayout style=&quot;@style\/TitleBar&quot;&gt;\n        &lt;ImageView style=&quot;@style\/TitleBarAction&quot;\n                   android:src=&quot;@drawable\/title_bar_logo&quot;\/&gt;\n        &lt;ImageView style=&quot;@style\/TitleBarSeparator&quot;\/&gt;\n\n        &lt;TextView style=&quot;@style\/TitleBarText&quot;\n                  android:text=&quot;JTeam&quot;\/&gt;\n\n        &lt;ImageView style=&quot;@style\/TitleBarSeparator&quot;\/&gt;\n\n        &lt;ImageButton style=&quot;@style\/TitleBarAction&quot;\n                     android:src=&quot;@drawable\/ic_title_home_default&quot;\n                     android:onClick=&quot;onHomeClick&quot;\/&gt;\n    &lt;\/LinearLayout&gt;\n<\/pre>\n<p>The XML file for the style (<span style=\"font-family: Courier New\">styles.xml<\/span>):<\/p>\n<pre><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n    &lt;style name=&quot;TitleBar&quot;&gt;\n        &lt;item name=&quot;android:id&quot;&gt;@+id\/title_container&lt;\/item&gt;\n        &lt;item name=&quot;android:layout_width&quot;&gt;fill_parent&lt;\/item&gt;\n        &lt;item name=&quot;android:layout_height&quot;&gt;45dip&lt;\/item&gt;\n        &lt;item name=&quot;android:orientation&quot;&gt;horizontal&lt;\/item&gt;\n        &lt;item name=&quot;android:background&quot;&gt;#4b08a3&lt;\/item&gt;\n    &lt;\/style&gt;\n\n    &lt;style name=&quot;TitleBarAction&quot;&gt;\n        &lt;item name=&quot;android:layout_width&quot;&gt;45dip&lt;\/item&gt;\n        &lt;item name=&quot;android:layout_height&quot;&gt;fill_parent&lt;\/item&gt;\n        &lt;item name=&quot;android:background&quot;&gt;@drawable\/title_button&lt;\/item&gt;\n    &lt;\/style&gt;\n\n    &lt;style name=&quot;TitleBarSeparator&quot;&gt;\n        &lt;item name=&quot;android:layout_width&quot;&gt;1px&lt;\/item&gt;\n        &lt;item name=&quot;android:layout_height&quot;&gt;fill_parent&lt;\/item&gt;\n        &lt;item name=&quot;android:background&quot;&gt;#40ffffff&lt;\/item&gt;\n    &lt;\/style&gt;\n\n    &lt;style name=&quot;TitleBarText&quot;&gt;\n        &lt;item name=&quot;android:layout_width&quot;&gt;0dp&lt;\/item&gt;\n        &lt;item name=&quot;android:layout_height&quot;&gt;fill_parent&lt;\/item&gt;\n        &lt;item name=&quot;android:layout_weight&quot;&gt;1&lt;\/item&gt;\n        &lt;item name=&quot;android:gravity&quot;&gt;center_vertical&lt;\/item&gt;\n        &lt;item name=&quot;android:textSize&quot;&gt;18sp&lt;\/item&gt;\n        &lt;item name=&quot;android:paddingLeft&quot;&gt;12dip&lt;\/item&gt;\n        &lt;item name=&quot;android:paddingRight&quot;&gt;12dip&lt;\/item&gt;\n        &lt;item name=&quot;android:textStyle&quot;&gt;bold&lt;\/item&gt;\n        &lt;item name=&quot;android:textColor&quot;&gt;#ffffffff&lt;\/item&gt;\n        &lt;item name=&quot;android:singleLine&quot;&gt;true&lt;\/item&gt;\n        &lt;item name=&quot;android:ellipsize&quot;&gt;end&lt;\/item&gt;\n    &lt;\/style&gt;\n<\/pre>\n<p>In your activity you need to implement the <span style=\"font-family: Courier New\">onClick<\/span> of the home button.<\/p>\n<pre>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\n     public void onHomeClick(View v) {\n        startActivity(new Intent(this, HomeActivity.class));\n    }\n<\/pre>\n<h3>Dashboard<\/h3>\n<p><a href=\"http:\/\/blog.jteam.nl\/wp-content\/uploads\/2011\/05\/dashboard.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none;margin: 0px 10px 0px 0px;padding-left: 0px;padding-right: 0px;float: left;padding-top: 0px;border-width: 0px\" title=\"dashboard\" src=\"http:\/\/blog.jteam.nl\/wp-content\/uploads\/2011\/05\/dashboard_thumb.png\" border=\"0\" alt=\"dashboard\" width=\"133\" height=\"211\" align=\"left\" \/><\/a>The dashboard is often your home orientation activity and contains the main features of your application. To create a dashboard you need to create a layout file and program the behaviour of the buttons when they are clicked.<\/p>\n<p>On the left you can see the dashboard that I created. I have copied the icons just to give you an impression of how a \u201cfull\u201d dashboard could look like.<\/p>\n<h3><\/h3>\n<p>The XML layout (<span style=\"font-family: Courier New\">main.xml<\/span>):<\/p>\n<pre>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\n&lt;LinearLayout xmlns:android=&quot;http:\/\/schemas.android.com\/apk\/res\/android&quot;\n              android:id=&quot;@+id\/home_root&quot;\n              android:orientation=&quot;vertical&quot;\n              android:layout_width=&quot;fill_parent&quot;\n              android:layout_height=&quot;fill_parent&quot;\n              android:background=&quot;#ffffffff&quot;&gt;\n\n    &lt;!-- Actionbar --&gt;\n    &lt;LinearLayout style=&quot;@style\/TitleBar&quot;&gt;\n        ...\n    &lt;\/LinearLayout&gt;\n\n    &lt;!-- Buttons --&gt;\n    &lt;LinearLayout android:orientation=&quot;vertical&quot;\n                  android:layout_width=&quot;fill_parent&quot;\n                  android:layout_height=&quot;wrap_content&quot;\n                  android:layout_weight=&quot;1&quot;\n                  android:padding=&quot;6dip&quot;&gt;\n        &lt;LinearLayout android:orientation=&quot;horizontal&quot;\n                      android:layout_width=&quot;fill_parent&quot;\n                      android:layout_height=&quot;wrap_content&quot;\n                      android:layout_weight=&quot;1&quot;&gt;\n            &lt;Button android:id=&quot;@+id\/home_btn_users&quot;\n                    style=&quot;@style\/HomeButton&quot;\n                    android:onClick=&quot;onEmployeesClick&quot;\n                    android:text=&quot;Employees&quot;\n                    android:drawableTop=&quot;@drawable\/btn_employees&quot;\/&gt;\n            &lt;Button android:id=&quot;@+id\/home_btn_player_availability&quot;\n                    style=&quot;@style\/HomeButton&quot;\n                    android:onClick=&quot;onCalendarClick&quot;\n                    android:text=&quot;Calendar&quot;\n                    android:drawableTop=&quot;@drawable\/btn_calendar&quot;\/&gt;\n        &lt;\/LinearLayout&gt;\n\n        ...\n\n    &lt;\/LinearLayout&gt;\n&lt;\/LinearLayout&gt;\n<\/pre>\n<p>The activity (<span style=\"font-family: Courier New\">HomeActivity.java<\/span>):<\/p>\n<pre>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\npublic class HomeActivity extends Activity {\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.main);\n    }\n\n    public void onEmployeesClick(View v) {\n        startActivity(new Intent(this, EmployeesActivity.class));\n    }\n}\n<\/pre>\n<h3>ProcessDialog<\/h3>\n<p><a href=\"http:\/\/blog.jteam.nl\/wp-content\/uploads\/2011\/05\/processdialog.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none;margin: 0px 15px 0px 0px;padding-left: 0px;padding-right: 0px;float: left;padding-top: 0px;border: 0px\" title=\"processdialog\" src=\"http:\/\/blog.jteam.nl\/wp-content\/uploads\/2011\/05\/processdialog_thumb.png\" border=\"0\" alt=\"processdialog\" width=\"131\" height=\"211\" align=\"left\" \/><\/a>The ProcessDialog allows you to load data in the background while you show your users a loading screen. The ProcessDialog can be realised with an <a href=\"http:\/\/developer.android.com\/reference\/android\/os\/AsyncTask.html\" target=\"_blank\" rel=\"noopener\">AsyncTask<\/a>.<\/p>\n<p>I created a subclass of the AsyncTask that overrides three methods.<\/p>\n<ul>\n<li><em>doInBackground(\u2026)<\/em> &#8211; In this method you can make the call to get your data.<\/li>\n<li><em>onPreExecute()<\/em> &#8211; In this method you can show your dialog.<\/li>\n<li><em>onPostExecute()<\/em> &#8211; This method will be executed when all data is retrieved. Here you can dismiss your dialog and add the data to your adapter.<\/li>\n<\/ul>\n<p>The XML layout (<span style=\"font-family: Courier New\">activity_employees.xml<\/span>):<\/p>\n<pre>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\n&lt;LinearLayout xmlns:android=&quot;http:\/\/schemas.android.com\/apk\/res\/android&quot;\n              android:orientation=&quot;vertical&quot;\n              android:layout_width=&quot;fill_parent&quot;\n              android:layout_height=&quot;fill_parent&quot;&gt;\n\n    &lt;!-- Actionbar --&gt;\n    &lt;LinearLayout style=&quot;@style\/TitleBar&quot;&gt;\n        ...\n    &lt;\/LinearLayout&gt;\n\n    &lt;ListView android:id=&quot;@android:id\/list&quot;\n              android:layout_width=&quot;fill_parent&quot;\n              android:layout_height=&quot;fill_parent&quot;\/&gt;\n&lt;\/LinearLayout&gt;\n<\/pre>\n<p>The activity (<span style=\"font-family: Courier New\">EmployeesActivity.java<\/span>):<\/p>\n<pre>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\npublic class EmployeesActivity extends ListActivity {\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_employees);\n\n        new EmployeesTask().execute();\n    }\n\n    public void onHomeClick(View v) {\n        startActivity(new Intent(this, HomeActivity.class));\n    }\n\n    \/\/================================================= EmployeesTask ==================================================\n\n    private class EmployeesTask extends AsyncTask&lt;Void, Void, String&#x5B;]&gt; {\n\n        private ProgressDialog progressDialog;\n\n        @Override\n        protected String&#x5B;] doInBackground(Void... voids) {\n            return new String&#x5B;]{&quot;Roberto van der Linden&quot;, &quot;Employee 2&quot;, &quot;Employee 3&quot;};\n        }\n\n        @Override\n        protected void onPreExecute() {\n            progressDialog = ProgressDialog.show(EmployeesActivity.this, &quot;&quot;, &quot;Loading...&quot;);\n        }\n\n        @Override\n        protected void onPostExecute(String&#x5B;] employees) {\n            progressDialog.dismiss();\n            setListAdapter(new ArrayAdapter&lt;String&gt;(EmployeesActivity.this, android.R.layout.simple_list_item_1, employees));\n        }\n    }\n}\n<\/pre>\n<p>So I hope this blog helped a few of people in their journey to create a great Android app. If you want to know more about creating an app with asynchronous retrieval of data, you can read my <a href=\"http:\/\/blog.jteam.nl\/2011\/02\/07\/creating-an-android-app-for-your-website-with-spring-android-and-rest\/\" target=\"_blank\" rel=\"noopener\">previous blog post.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>When I started with my Android application, I had the idea to create a home screen and an action bar just like one of the Android developers described in a blog item. I was really helped by the source code of the Google I\/O Schedule app. In this post I will explain how I used [&hellip;]<\/p>\n","protected":false},"author":102,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[53,31,55,10],"tags":[25,202,258],"class_list":["post-3382","post","type-post","status-publish","format-standard","hentry","category-android","category-java","category-mobile","category-development","tag-android","tag-apps","tag-layout"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Android basics - Applying some UI patterns - Trifork Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Android basics - Applying some UI patterns - Trifork Blog\" \/>\n<meta property=\"og:description\" content=\"When I started with my Android application, I had the idea to create a home screen and an action bar just like one of the Android developers described in a blog item. I was really helped by the source code of the Google I\/O Schedule app. In this post I will explain how I used [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/\" \/>\n<meta property=\"og:site_name\" content=\"Trifork Blog\" \/>\n<meta property=\"article:published_time\" content=\"2011-05-06T07:07:34+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blog.jteam.nl\/wp-content\/uploads\/2011\/05\/actionbar_thumb.png\" \/>\n<meta name=\"author\" content=\"Roberto van der Linden\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Roberto van der Linden\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/\",\"url\":\"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/\",\"name\":\"Android basics - Applying some UI patterns - Trifork Blog\",\"isPartOf\":{\"@id\":\"https:\/\/trifork.nl\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.jteam.nl\/wp-content\/uploads\/2011\/05\/actionbar_thumb.png\",\"datePublished\":\"2011-05-06T07:07:34+00:00\",\"author\":{\"@id\":\"https:\/\/trifork.nl\/blog\/#\/schema\/person\/037974cf3e24a7b09a93770b190d6e35\"},\"breadcrumb\":{\"@id\":\"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/#primaryimage\",\"url\":\"http:\/\/blog.jteam.nl\/wp-content\/uploads\/2011\/05\/actionbar_thumb.png\",\"contentUrl\":\"http:\/\/blog.jteam.nl\/wp-content\/uploads\/2011\/05\/actionbar_thumb.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/trifork.nl\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Android basics &#8211; Applying some UI patterns\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/trifork.nl\/blog\/#website\",\"url\":\"https:\/\/trifork.nl\/blog\/\",\"name\":\"Trifork Blog\",\"description\":\"Keep updated on the technical solutions Trifork is working on!\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/trifork.nl\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/trifork.nl\/blog\/#\/schema\/person\/037974cf3e24a7b09a93770b190d6e35\",\"name\":\"Roberto van der Linden\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/trifork.nl\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/afe49faf7ef8dd3753baefb334568b10?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/afe49faf7ef8dd3753baefb334568b10?s=96&d=mm&r=g\",\"caption\":\"Roberto van der Linden\"},\"url\":\"https:\/\/trifork.nl\/blog\/author\/roberto\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Android basics - Applying some UI patterns - Trifork Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/","og_locale":"en_US","og_type":"article","og_title":"Android basics - Applying some UI patterns - Trifork Blog","og_description":"When I started with my Android application, I had the idea to create a home screen and an action bar just like one of the Android developers described in a blog item. I was really helped by the source code of the Google I\/O Schedule app. In this post I will explain how I used [&hellip;]","og_url":"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/","og_site_name":"Trifork Blog","article_published_time":"2011-05-06T07:07:34+00:00","og_image":[{"url":"http:\/\/blog.jteam.nl\/wp-content\/uploads\/2011\/05\/actionbar_thumb.png","type":"","width":"","height":""}],"author":"Roberto van der Linden","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Roberto van der Linden","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/","url":"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/","name":"Android basics - Applying some UI patterns - Trifork Blog","isPartOf":{"@id":"https:\/\/trifork.nl\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/#primaryimage"},"image":{"@id":"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.jteam.nl\/wp-content\/uploads\/2011\/05\/actionbar_thumb.png","datePublished":"2011-05-06T07:07:34+00:00","author":{"@id":"https:\/\/trifork.nl\/blog\/#\/schema\/person\/037974cf3e24a7b09a93770b190d6e35"},"breadcrumb":{"@id":"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/#primaryimage","url":"http:\/\/blog.jteam.nl\/wp-content\/uploads\/2011\/05\/actionbar_thumb.png","contentUrl":"http:\/\/blog.jteam.nl\/wp-content\/uploads\/2011\/05\/actionbar_thumb.png"},{"@type":"BreadcrumbList","@id":"https:\/\/trifork.nl\/blog\/android-basics-applying-some-ui-patterns\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/trifork.nl\/blog\/"},{"@type":"ListItem","position":2,"name":"Android basics &#8211; Applying some UI patterns"}]},{"@type":"WebSite","@id":"https:\/\/trifork.nl\/blog\/#website","url":"https:\/\/trifork.nl\/blog\/","name":"Trifork Blog","description":"Keep updated on the technical solutions Trifork is working on!","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/trifork.nl\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/trifork.nl\/blog\/#\/schema\/person\/037974cf3e24a7b09a93770b190d6e35","name":"Roberto van der Linden","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/trifork.nl\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/afe49faf7ef8dd3753baefb334568b10?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/afe49faf7ef8dd3753baefb334568b10?s=96&d=mm&r=g","caption":"Roberto van der Linden"},"url":"https:\/\/trifork.nl\/blog\/author\/roberto\/"}]}},"_links":{"self":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/posts\/3382","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/users\/102"}],"replies":[{"embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/comments?post=3382"}],"version-history":[{"count":0,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/posts\/3382\/revisions"}],"wp:attachment":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/media?parent=3382"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/categories?post=3382"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/tags?post=3382"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}