{"id":36739,"date":"2025-12-22T11:41:01","date_gmt":"2025-12-22T08:41:01","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=36739"},"modified":"2025-12-22T11:41:01","modified_gmt":"2025-12-22T08:41:01","slug":"android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/","title":{"rendered":"Android CoordinatorLayout: Esnek ve Etkile\u015fimli UI Tasar\u0131m\u0131nda G\u00fc\u00e7l\u00fc Bir Ara\u00e7"},"content":{"rendered":"<p><body><\/p>\n<h2>Android CoordinatorLayout: Esnek ve Etkile\u015fimli UI Tasar\u0131m\u0131nda G\u00fc\u00e7l\u00fc Bir Ara\u00e7<\/h2>\n<p>Android kullan\u0131c\u0131 aray\u00fcz\u00fc (UI) geli\u015ftirme, g\u00f6rsel \u00e7ekicilik ve kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan s\u00fcrekli bir evrim i\u00e7indedir. Bu evrimin \u00f6nemli bir par\u00e7as\u0131 da, farkl\u0131 UI bile\u015fenlerinin birbirleriyle uyumlu ve dinamik bir \u015fekilde etkile\u015fime girmesini sa\u011flayan d\u00fczen y\u00f6neticileridir. Google&#8217;\u0131n Material Design felsefesiyle birlikte tan\u0131t\u0131lan ve Android Design Support Library&#8217;nin (\u015fimdiki ad\u0131yla AndroidX Material Library) bir par\u00e7as\u0131 olan <code>CoordinatorLayout<\/code>, bu etkile\u015fimli ve esnek UI&#8217;lar\u0131 olu\u015fturmak i\u00e7in tasarlanm\u0131\u015f g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r.<\/p>\n<h3>1. Giri\u015f: CoordinatorLayout Nedir ve Neden \u00d6nemlidir?<\/h3>\n<p>Geleneksel Android d\u00fczen y\u00f6neticileri (FrameLayout, LinearLayout, RelativeLayout vb.) genellikle \u00e7ocuk g\u00f6r\u00fcn\u00fcmlerin (child views) konumland\u0131r\u0131lmas\u0131 ve boyutland\u0131r\u0131lmas\u0131 gibi statik g\u00f6revlere odaklan\u0131rken, <code>CoordinatorLayout<\/code> bu yakla\u015f\u0131m\u0131n \u00f6tesine ge\u00e7er. <code>CoordinatorLayout<\/code>, kendisi bir <code>ViewGroup<\/code> olmakla birlikte, \u00e7ocuk g\u00f6r\u00fcn\u00fcmlerin birbirleriyle veya <code>CoordinatorLayout<\/code>&#8216;un kendisiyle etkile\u015fime girmesini sa\u011flayan \u00f6zel davran\u0131\u015flar\u0131 (Behaviors) y\u00f6netebilme yetene\u011fiyle \u00f6ne \u00e7\u0131kar. Temel amac\u0131, Material Design&#8217;\u0131n \u00f6ng\u00f6rd\u00fc\u011f\u00fc karma\u015f\u0131k kayd\u0131rma efektleri, hareketli bile\u015fenler ve birbirine ba\u011f\u0131ml\u0131 UI \u00f6\u011feleri gibi etkile\u015fimleri kolayca ve tutarl\u0131 bir \u015fekilde uygulamaya koymakt\u0131r.<\/p>\n<p><code>CoordinatorLayout<\/code>, \u00f6zellikle a\u015fa\u011f\u0131daki senaryolarda vazge\u00e7ilmez bir ara\u00e7 haline gelmi\u015ftir:<\/p>\n<p>*   <strong>Kayd\u0131r\u0131labilir Ba\u015fl\u0131klar (Collapsing Toolbars):<\/strong> Kullan\u0131c\u0131 i\u00e7eri\u011fi kayd\u0131rd\u0131k\u00e7a boyutunu de\u011fi\u015ftiren veya kaybolan AppBar&#8217;lar.<br \/>\n*   <strong>Floating Action Button (FAB) Etkile\u015fimleri:<\/strong> FAB&#8217;\u0131n bir Snackbar g\u00f6r\u00fcnd\u00fc\u011f\u00fcnde otomatik olarak yukar\u0131 kaymas\u0131 veya bir Bottom Sheet a\u00e7\u0131ld\u0131\u011f\u0131nda konum de\u011fi\u015ftirmesi.<br \/>\n*   <strong>Paralaks Efektleri:<\/strong> \u0130\u00e7erik kayd\u0131r\u0131ld\u0131\u011f\u0131nda arka plan g\u00f6r\u00fcnt\u00fclerinin farkl\u0131 h\u0131zlarda hareket etmesi.<br \/>\n*   <strong>\u00d6zel UI Etkile\u015fimleri:<\/strong> Bir view&#8217;\u0131n ba\u015fka bir view&#8217;\u0131n hareketine veya durumuna g\u00f6re konumunu, boyutunu veya g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc dinamik olarak de\u011fi\u015ftirmesi.<\/p>\n<p><code>CoordinatorLayout<\/code>, bu t\u00fcr karma\u015f\u0131k etkile\u015fimleri, geli\u015ftiricilerin s\u0131f\u0131rdan \u00f6zel animasyonlar veya olay dinleyicileri yazmas\u0131na gerek kalmadan, yap\u0131land\u0131r\u0131labilir XML \u00f6znitelikleri ve \u00f6zel Behavior s\u0131n\u0131flar\u0131 arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015ftirmesine olanak tan\u0131r. Bu, hem geli\u015ftirme s\u00fcresini k\u0131salt\u0131r hem de Material Design y\u00f6nergelerine uygun, tutarl\u0131 bir kullan\u0131c\u0131 deneyimi sunar.<\/p>\n<h3>2. CoordinatorLayout&#8217;un Temelleri<\/h3>\n<p><code>CoordinatorLayout<\/code>, asl\u0131nda bir <code>FrameLayout<\/code>&#8216;tan t\u00fcremi\u015ftir ve bu nedenle \u00e7ocuk g\u00f6r\u00fcn\u00fcmlerini \u00fcst \u00fcste bindirme yetene\u011fine sahiptir. Ancak, <code>FrameLayout<\/code>&#8216;un statik yap\u0131s\u0131n\u0131n aksine, <code>CoordinatorLayout<\/code> \u00e7ocuk g\u00f6r\u00fcn\u00fcmlerin hareketlerini ve etkile\u015fimlerini koordine etmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Bu koordinasyon, temel olarak iki ana mekanizma arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015fir: <strong>Behavior&#8217;lar<\/strong> ve <strong>Nested Scrolling (\u0130\u00e7 \u0130\u00e7e Kayd\u0131rma)<\/strong>.<\/p>\n<h4>2.1. ViewGroup Olarak Yap\u0131s\u0131<\/h4>\n<p><code>CoordinatorLayout<\/code>, di\u011fer <code>ViewGroup<\/code>&#8216;lar gibi XML d\u00fczen dosyalar\u0131nda tan\u0131mlan\u0131r ve i\u00e7erisine di\u011fer g\u00f6r\u00fcn\u00fcmleri (View veya ViewGroup) \u00e7ocuk olarak alabilir. Genellikle bir ekran\u0131n en \u00fcst d\u00fczey d\u00fczeni (root layout) olarak kullan\u0131l\u0131r, \u00e7\u00fcnk\u00fc di\u011fer t\u00fcm UI bile\u015fenlerinin etkile\u015fimini koordine etmesi beklenir.<\/p>\n<pre><code class=\"language-xml\"><androidx.coordinatorlayout.widget.CoordinatorLayout\n    xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <!-- Child views go here -->\n\n<\/androidx.coordinatorlayout.widget.CoordinatorLayout><\/code><\/pre>\n<p>Bu temel yap\u0131, <code>CoordinatorLayout<\/code>&#8216;un i\u00e7erisindeki t\u00fcm bile\u015fenlerin potansiyel olarak birbirleriyle etkile\u015fime girebilece\u011fi bir \u00e7er\u00e7eve sunar.<\/p>\n<h4>2.2. \u00c7ocuk View&#8217;lar ve Behavior Kavram\u0131<\/h4>\n<p><code>CoordinatorLayout<\/code>&#8216;un \u00e7ocuk g\u00f6r\u00fcn\u00fcmleri, <code>app:layout_behavior<\/code> \u00f6zniteli\u011fi arac\u0131l\u0131\u011f\u0131yla \u00f6zel davran\u0131\u015flar (Behaviors) atanabilen bile\u015fenlerdir. Bir Behavior, belirli bir \u00e7ocuk g\u00f6r\u00fcn\u00fcm\u00fcn <code>CoordinatorLayout<\/code> i\u00e7inde nas\u0131l davranaca\u011f\u0131n\u0131, \u00f6zellikle de di\u011fer \u00e7ocuk g\u00f6r\u00fcn\u00fcmlerin hareketlerine veya <code>CoordinatorLayout<\/code>&#8216;un kayd\u0131rma olaylar\u0131na nas\u0131l tepki verece\u011fini tan\u0131mlayan bir s\u0131n\u0131ft\u0131r.<\/p>\n<p>\u00d6rne\u011fin, bir <code>FloatingActionButton<\/code>&#8216;\u0131n bir <code>Snackbar<\/code> g\u00f6r\u00fcnd\u00fc\u011f\u00fcnde otomatik olarak yukar\u0131 kaymas\u0131, FAB&#8217;a atanan \u00f6zel bir Behavior sayesinde ger\u00e7ekle\u015fir. Bu Behavior, <code>Snackbar<\/code>&#8216;\u0131n g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc dinler ve buna g\u00f6re FAB&#8217;\u0131n konumunu ayarlar. Bu mekanizma, UI bile\u015fenlerinin birbirlerinden haberdar olmalar\u0131n\u0131 ve dinamik olarak tepki vermelerini sa\u011flar.<\/p>\n<h4>2.3. Nested Scrolling ile \u0130li\u015fkisi<\/h4>\n<p><code>CoordinatorLayout<\/code>, Android&#8217;deki i\u00e7 i\u00e7e kayd\u0131rma (Nested Scrolling) mekanizmas\u0131yla derinlemesine entegre olmu\u015ftur. Nested Scrolling, bir kayd\u0131r\u0131labilir g\u00f6r\u00fcn\u00fcm\u00fcn (\u00f6rne\u011fin <code>RecyclerView<\/code> veya <code>NestedScrollView<\/code>) kayd\u0131rma olaylar\u0131n\u0131, kendisini i\u00e7eren \u00fcst g\u00f6r\u00fcn\u00fcmlere (parent views) iletmesine olanak tan\u0131r. <code>CoordinatorLayout<\/code>, bu kayd\u0131rma olaylar\u0131n\u0131 yakalayabilir ve \u00e7ocuk g\u00f6r\u00fcn\u00fcmlerine atanan Behavior&#8217;lar arac\u0131l\u0131\u011f\u0131yla uygun tepkileri tetikleyebilir.<\/p>\n<p>Bu sayede, kullan\u0131c\u0131 bir <code>RecyclerView<\/code>&#8216;\u0131 kayd\u0131rd\u0131\u011f\u0131nda, <code>CoordinatorLayout<\/code> bu kayd\u0131rma olay\u0131n\u0131 alg\u0131layabilir ve \u00f6rne\u011fin bir <code>AppBarLayout<\/code>&#8216;un daralmas\u0131n\u0131 veya geni\u015flemesini sa\u011flayabilir. Bu, Material Design&#8217;\u0131n ak\u0131c\u0131 ve do\u011fal g\u00f6r\u00fcnen kayd\u0131rma efektlerinin temelini olu\u015fturur.<\/p>\n<h3>3. Behavior Kavram\u0131 Detayl\u0131 \u0130nceleme<\/h3>\n<p><code>CoordinatorLayout<\/code>&#8216;un kalbinde Behavior kavram\u0131 yatar. Behavior&#8217;lar, <code>CoordinatorLayout.Behavior<V extends View><\/code> soyut s\u0131n\u0131f\u0131ndan t\u00fcreyen ve belirli bir View t\u00fcr\u00fc i\u00e7in davran\u0131\u015flar\u0131 tan\u0131mlayan s\u0131n\u0131flard\u0131r. Bir Behavior, bir View&#8217;\u0131n <code>CoordinatorLayout<\/code> i\u00e7indeki di\u011fer View&#8217;lara veya <code>CoordinatorLayout<\/code>&#8216;un kendisine nas\u0131l tepki verece\u011fini belirler.<\/p>\n<h4>3.1. Behavior Nedir ve Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h4>\n<p>Bir Behavior, <code>CoordinatorLayout<\/code>&#8216;un ya\u015fam d\u00f6ng\u00fcs\u00fc ve olay ak\u0131\u015f\u0131 \u00fczerinde kontrol sahibi olmas\u0131n\u0131 sa\u011flayan bir dizi geri \u00e7a\u011f\u0131r\u0131m (callback) metodu i\u00e7erir. Bu metotlar, bir View&#8217;\u0131n d\u00fczenlenmesi, kayd\u0131rma olaylar\u0131na tepki vermesi veya di\u011fer View&#8217;lar\u0131n durum de\u011fi\u015fikliklerine g\u00f6re hareket etmesi gibi farkl\u0131 senaryolar\u0131 ele al\u0131r.<\/p>\n<p>Ba\u015fl\u0131ca Behavior metotlar\u0131 \u015funlard\u0131r:<\/p>\n<p>*   <code>onLayoutChild(CoordinatorLayout parent, V child, int layoutDirection)<\/code>: <code>CoordinatorLayout<\/code> bir \u00e7ocuk View&#8217;\u0131 d\u00fczenlemeye (layout) \u00e7al\u0131\u015ft\u0131\u011f\u0131nda \u00e7a\u011fr\u0131l\u0131r. Bu metot, \u00e7ocuk View&#8217;\u0131n ba\u015flang\u0131\u00e7 konumunu ve boyutunu belirlemek i\u00e7in kullan\u0131labilir.<br \/>\n*   <code>onDependentViewChanged(CoordinatorLayout parent, V child, View dependency)<\/code>: Bir \u00e7ocuk View&#8217;\u0131n (child) ba\u011f\u0131ml\u0131 oldu\u011fu ba\u015fka bir View (dependency) de\u011fi\u015fti\u011finde \u00e7a\u011fr\u0131l\u0131r. \u00d6rne\u011fin, FAB&#8217;\u0131n Snackbar&#8217;a ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 bu metot arac\u0131l\u0131\u011f\u0131yla y\u00f6netilir.<br \/>\n*   <code>onStartNestedScroll(...)<\/code>: \u0130\u00e7 i\u00e7e kayd\u0131rma i\u015flemi ba\u015flad\u0131\u011f\u0131nda \u00e7a\u011fr\u0131l\u0131r. Behavior&#8217;\u0131n bu kayd\u0131rma olay\u0131n\u0131 dinleyip dinlemeyece\u011fini belirler.<br \/>\n*   <code>onNestedPreScroll(...)<\/code>: \u00c7ocuk View kayd\u0131rmadan \u00f6nce \u00e7a\u011fr\u0131l\u0131r. Behavior, kayd\u0131rman\u0131n bir k\u0131sm\u0131n\u0131 veya tamam\u0131n\u0131 t\u00fcketebilir.<br \/>\n*   <code>onNestedScroll(...)<\/code>: \u00c7ocuk View kayd\u0131rd\u0131ktan sonra \u00e7a\u011fr\u0131l\u0131r. Behavior, kalan kayd\u0131rma miktar\u0131n\u0131 i\u015fleyebilir.<br \/>\n*   <code>onNestedFling(...)<\/code> ve <code>onNestedPreFling(...)<\/code>: Kayd\u0131rma hareketinin (fling) ba\u015flang\u0131c\u0131nda ve sonunda \u00e7a\u011fr\u0131l\u0131r.<\/p>\n<p>Bu metotlar\u0131 override ederek, geli\u015ftiriciler \u00f6zel etkile\u015fimler yaratabilirler.<\/p>\n<h4>3.2. Haz\u0131r Behavior&#8217;lar<\/h4>\n<p>AndroidX Material Library, <code>CoordinatorLayout<\/code> ile birlikte kullan\u0131labilecek bir\u00e7ok kullan\u0131\u015fl\u0131 haz\u0131r Behavior sunar. Bunlar, Material Design&#8217;\u0131n temel etkile\u015fimlerini uygulamay\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirir.<\/p>\n<p>*   <strong><code>AppBarLayout.Behavior<\/code>:<\/strong> <code>AppBarLayout<\/code> i\u00e7in varsay\u0131lan Behavior&#8217;d\u0131r. \u0130\u00e7eri\u011fin kayd\u0131r\u0131lmas\u0131na g\u00f6re <code>AppBarLayout<\/code>&#8216;un daralmas\u0131n\u0131 (collapse) ve geni\u015flemesini (expand) y\u00f6netir. <code>app:layout_scrollFlags<\/code> \u00f6zniteli\u011fi ile birlikte kullan\u0131l\u0131r.<br \/>\n*   <strong><code>FloatingActionButton.Behavior<\/code>:<\/strong> <code>FloatingActionButton<\/code> i\u00e7in varsay\u0131lan Behavior&#8217;d\u0131r. \u00d6zellikle <code>Snackbar<\/code> veya <code>BottomSheet<\/code> gibi bile\u015fenlerin g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fcne tepki vererek FAB&#8217;\u0131n konumunu ayarlar. <code>app:layout_anchor<\/code> ve <code>app:layout_anchorGravity<\/code> ile birlikte kullan\u0131ld\u0131\u011f\u0131nda, FAB&#8217;\u0131n belirli bir view&#8217;a g\u00f6re konumlanmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong><code>Snackbar.Behavior<\/code>:<\/strong> <code>Snackbar<\/code> i\u00e7in Behavior&#8217;d\u0131r. Kendisini g\u00f6sterdi\u011finde <code>CoordinatorLayout<\/code> i\u00e7indeki di\u011fer kayd\u0131r\u0131labilir g\u00f6r\u00fcn\u00fcmleri veya FAB&#8217;\u0131 etkilemesini sa\u011flar.<br \/>\n*   <strong><code>BottomSheetBehavior<\/code>:<\/strong> <code>BottomSheet<\/code>&#8216;i y\u00f6neten Behavior&#8217;d\u0131r. Bir <code>View<\/code>&#8216;\u0131 ekran\u0131n alt\u0131ndan yukar\u0131 do\u011fru kayd\u0131r\u0131labilir bir panel haline getirir ve farkl\u0131 durumlar\u0131 (collapsed, expanded, hidden) y\u00f6netir.<\/p>\n<p>Bu haz\u0131r Behavior&#8217;lar, genellikle XML&#8217;de <code>app:layout_behavior<\/code> \u00f6zniteli\u011fi ile a\u00e7\u0131k\u00e7a belirtilmez; <code>CoordinatorLayout<\/code> bunlar\u0131 belirli View t\u00fcrleri i\u00e7in otomatik olarak atar. Ancak, \u00f6zel bir Behavior atamak istedi\u011finizde bu \u00f6zniteli\u011fi kullanman\u0131z gerekir.<\/p>\n<h4>3.3. \u00d6zel Behavior Olu\u015fturma: Neden ve Nas\u0131l?<\/h4>\n<p>Haz\u0131r Behavior&#8217;lar bir\u00e7ok senaryoyu kapsasa da, bazen uygulaman\u0131z i\u00e7in tamamen benzersiz bir etkile\u015fim yaratman\u0131z gerekebilir. \u0130\u015fte bu noktada \u00f6zel Behavior&#8217;lar devreye girer.<\/p>\n<p><strong>Neden \u00d6zel Behavior Olu\u015fturmal\u0131s\u0131n\u0131z?<\/strong><\/p>\n<p>*   <strong>Benzersiz UI Etkile\u015fimleri:<\/strong> Material Design y\u00f6nergelerinin \u00f6tesine ge\u00e7en veya uygulaman\u0131za \u00f6zg\u00fc animasyonlar ve hareketler.<br \/>\n*   <strong>View Ba\u011f\u0131ml\u0131l\u0131klar\u0131:<\/strong> Bir View&#8217;\u0131n ba\u015fka bir View&#8217;\u0131n hareketine, boyutuna veya g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fcne dinamik olarak tepki vermesi gereken durumlar.<br \/>\n*   <strong>Karma\u015f\u0131k Kayd\u0131rma Efektleri:<\/strong> <code>AppBarLayout<\/code>&#8216;un sundu\u011fundan daha geli\u015fmi\u015f veya farkl\u0131 kayd\u0131rma davran\u0131\u015flar\u0131.<\/p>\n<p><strong>Nas\u0131l \u00d6zel Behavior Olu\u015fturulur?<\/strong><\/p>\n<p>\u00d6zel bir Behavior olu\u015fturmak i\u00e7in \u015fu ad\u0131mlar\u0131 izleyebilirsiniz:<\/p>\n<p>1.  <strong><code>CoordinatorLayout.Behavior<\/code> S\u0131n\u0131f\u0131ndan T\u00fcretme:<\/strong><\/p>\n<pre><code class=\"language-java\">public class MyCustomBehavior<V extends View> extends CoordinatorLayout.Behavior<V> {\n        \/\/ Constructorlar\n        public MyCustomBehavior() {\n            super();\n        }\n\n        public MyCustomBehavior(Context context, AttributeSet attrs) {\n            super(context, attrs);\n            \/\/ Custom Attribute'lar\u0131 burada oku\n        }\n\n        \/\/ Gerekli metotlar\u0131 override et\n    }<\/code><\/pre>\n<p>2.  <strong>Constructor&#8217;lar\u0131 Tan\u0131mlama:<\/strong> Genellikle iki constructor tan\u0131mlan\u0131r: biri parametresiz, di\u011feri <code>Context<\/code> ve <code>AttributeSet<\/code> alan. \u0130kinci constructor, XML&#8217;den \u00f6zel \u00f6znitelikleri okumak i\u00e7in kullan\u0131l\u0131r.<br \/>\n3.  <strong>\u0130stenilen Metotlar\u0131 Override Etme:<\/strong> Hangi etkile\u015fimi yaratmak istedi\u011finize ba\u011fl\u0131 olarak, yukar\u0131da bahsedilen <code>onLayoutChild<\/code>, <code>onDependentViewChanged<\/code>, <code>onStartNestedScroll<\/code>, <code>onNestedPreScroll<\/code>, <code>onNestedScroll<\/code> gibi metotlar\u0131 override edersiniz.<\/p>\n<p>    *   <strong>\u00d6rnek Senaryo: Bir View&#8217;\u0131 Di\u011ferine Ba\u011flama<\/strong><br \/>\n        Diyelim ki, ekran\u0131n bir k\u00f6\u015fesinde k\u00fc\u00e7\u00fck bir resim var ve bu resmin, ba\u015fka bir <code>RecyclerView<\/code> kayd\u0131r\u0131ld\u0131\u011f\u0131nda boyutunun de\u011fi\u015fmesini istiyorsunuz.<\/p>\n<pre><code class=\"language-java\">public class ShrinkImageBehavior extends CoordinatorLayout.Behavior<ImageView> {\n            private static final float MAX_SCALE = 1.0f;\n            private static final float MIN_SCALE = 0.5f;\n\n            public ShrinkImageBehavior(Context context, AttributeSet attrs) {\n                super(context, attrs);\n            }\n\n            @Override\n            public boolean layoutDependsOn(@NonNull CoordinatorLayout parent, @NonNull ImageView child, @NonNull View dependency) {\n                \/\/ ImageView'\u0131n RecyclerView'a ba\u011f\u0131ml\u0131 oldu\u011funu belirtiyoruz\n                return dependency instanceof RecyclerView;\n            }\n\n            @Override\n            public boolean onDependentViewChanged(@NonNull CoordinatorLayout parent, @NonNull ImageView child, @NonNull View dependency) {\n                if (dependency instanceof RecyclerView) {\n                    \/\/ RecyclerView'\u0131n kayd\u0131rma konumunu al\n                    \/\/ Bu \u00f6rnekte basitle\u015ftirilmi\u015f bir hesaplama yap\u0131yoruz\n                    \/\/ Ger\u00e7ek uygulamada RecyclerView'\u0131n scrollOffset'\u0131n\u0131 daha do\u011fru alman\u0131z gerekebilir\n                    int scrollRange = dependency.getHeight(); \/\/ Basit bir scroll aral\u0131\u011f\u0131 varsay\u0131m\u0131\n                    int scrolledY = dependency.getScrollY(); \/\/ Bu her zaman do\u011fru scroll offset'i vermeyebilir, RecyclerView'\u0131n kendisinden almak daha iyi.\n\n                    \/\/ Scroll durumuna g\u00f6re \u00f6l\u00e7ekleme fakt\u00f6r\u00fcn\u00fc hesapla\n                    float scrollRatio = (float) scrolledY \/ scrollRange;\n                    float scale = MAX_SCALE - (scrollRatio * (MAX_SCALE - MIN_SCALE));\n                    scale = Math.max(MIN_SCALE, Math.min(MAX_SCALE, scale)); \/\/ \u00d6l\u00e7e\u011fi s\u0131n\u0131rlar i\u00e7inde tut\n\n                    child.setScaleX(scale);\n                    child.setScaleY(scale);\n                    child.setAlpha(scale); \/\/ G\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fc de de\u011fi\u015ftirebiliriz\n                    return true;\n                }\n                return false;\n            }\n        }<\/code><\/pre>\n<p>4.  <strong>XML&#8217;de Atama:<\/strong> Behavior s\u0131n\u0131f\u0131n\u0131z\u0131 olu\u015fturduktan sonra, onu XML d\u00fczen dosyas\u0131nda <code>app:layout_behavior<\/code> \u00f6zniteli\u011fini kullanarak ilgili View&#8217;a atars\u0131n\u0131z.<\/p>\n<pre><code class=\"language-xml\"><ImageView\n        android:id=\"@+id\/my_image\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"100dp\"\n        android:src=\"@drawable\/my_image_asset\"\n        app:layout_behavior=\"com.example.myapp.ShrinkImageBehavior\"\n        android:layout_gravity=\"top|start\"\/>\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id\/my_recycler_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        app:layout_behavior=\"@string\/appbar_scrolling_view_behavior\" \/><\/code><\/pre>\n<p>    Bu \u00f6rnekte <code>RecyclerView<\/code> i\u00e7in <code>appbar_scrolling_view_behavior<\/code> kullan\u0131ld\u0131, \u00e7\u00fcnk\u00fc <code>RecyclerView<\/code>&#8216;\u0131n kayd\u0131rma olaylar\u0131n\u0131 <code>CoordinatorLayout<\/code>&#8216;a iletmesi gerekiyor. <code>ShrinkImageBehavior<\/code> ise do\u011frudan <code>ImageView<\/code>&#8216;a atand\u0131.<\/p>\n<p>\u00d6zel Behavior&#8217;lar, Android UI&#8217;da hayal g\u00fcc\u00fcn\u00fcz\u00fc serbest b\u0131rakman\u0131z\u0131 sa\u011flayan son derece g\u00fc\u00e7l\u00fc bir mekanizmad\u0131r.<\/p>\n<h3>4. Yayg\u0131n Kullan\u0131m Senaryolar\u0131 ve \u00d6rnekler<\/h3>\n<p><code>CoordinatorLayout<\/code>, Material Design&#8217;\u0131n temel ta\u015flar\u0131ndan biri olup, bir\u00e7ok yayg\u0131n UI desenini uygulamak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h4>4.1. AppBarLayout ve CollapsingToolbarLayout ile Kayd\u0131r\u0131labilir Ba\u015fl\u0131klar<\/h4>\n<p>Bu, <code>CoordinatorLayout<\/code>&#8216;un en pop\u00fcler kullan\u0131m senaryolar\u0131ndan biridir. Kullan\u0131c\u0131 i\u00e7eri\u011fi a\u015fa\u011f\u0131 kayd\u0131rd\u0131\u011f\u0131nda bir <code>Toolbar<\/code>&#8216;\u0131n daralmas\u0131, kaybolmas\u0131 veya bir resmin paralaks efektiyle hareket etmesi gibi dinamik ba\u015fl\u0131k efektleri yarat\u0131r.<\/p>\n<pre><code class=\"language-xml\"><androidx.coordinatorlayout.widget.CoordinatorLayout\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <com.google.android.material.appbar.AppBarLayout\n        android:id=\"@+id\/app_bar_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:theme=\"@style\/ThemeOverlay.AppCompat.Dark.ActionBar\">\n\n        <com.google.android.material.appbar.CollapsingToolbarLayout\n            android:id=\"@+id\/collapsing_toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"256dp\"\n            app:contentScrim=\"?attr\/colorPrimary\"\n            app:layout_scrollFlags=\"scroll|exitUntilCollapsed\"\n            app:expandedTitleMarginStart=\"48dp\"\n            app:expandedTitleMarginEnd=\"64dp\">\n\n            <ImageView\n                android:id=\"@+id\/header_image\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:scaleType=\"centerCrop\"\n                android:src=\"@drawable\/header_background\"\n                app:layout_collapseMode=\"parallax\"\n                app:layout_collapseParallaxMultiplier=\"0.7\" \/>\n\n            <androidx.appcompat.widget.Toolbar\n                android:id=\"@+id\/toolbar\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"?attr\/actionBarSize\"\n                app:layout_collapseMode=\"pin\"\n                app:popupTheme=\"@style\/ThemeOverlay.AppCompat.Light\" \/>\n\n        <\/com.google.android.material.appbar.CollapsingToolbarLayout>\n\n    <\/com.google.android.material.appbar.AppBarLayout>\n\n    <androidx.core.widget.NestedScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        app:layout_behavior=\"@string\/appbar_scrolling_view_behavior\">\n\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string\/long_text_content\"\n            android:padding=\"16dp\" \/>\n\n    <\/androidx.core.widget.NestedScrollView>\n\n<\/androidx.coordinatorlayout.widget.CoordinatorLayout><\/code><\/pre>\n<p>Burada anahtar \u00f6znitelikler \u015funlard\u0131r:<\/p>\n<p>*   <code>app:layout_scrollFlags<\/code>: <code>AppBarLayout<\/code>&#8216;un kayd\u0131rma davran\u0131\u015f\u0131n\u0131 tan\u0131mlar.<br \/>\n    *   <code>scroll<\/code>: View&#8217;\u0131n kayd\u0131r\u0131labilir olmas\u0131 gerekti\u011fini belirtir. Bu olmadan hi\u00e7bir \u015fey kayd\u0131r\u0131lmaz.<br \/>\n    *   <code>exitUntilCollapsed<\/code>: View, tamamen daralana kadar kaybolur, ancak daralm\u0131\u015f hali ekranda kal\u0131r.<br \/>\n    *   <code>enterAlways<\/code>: View, a\u015fa\u011f\u0131 kayd\u0131r\u0131ld\u0131\u011f\u0131nda hemen g\u00f6r\u00fcn\u00fcr hale gelir.<br \/>\n    *   <code>enterAlwaysCollapsed<\/code>: View, yaln\u0131zca tamamen g\u00f6r\u00fcn\u00fcr hale gelmek i\u00e7in kayd\u0131r\u0131ld\u0131\u011f\u0131nda g\u00f6r\u00fcn\u00fcr.<br \/>\n    *   <code>snap<\/code>: View, daralm\u0131\u015f veya geni\u015flemi\u015f durumlar aras\u0131nda tam olarak oturur.<br \/>\n*   <code>app:layout_collapseMode<\/code>: <code>CollapsingToolbarLayout<\/code> i\u00e7indeki \u00e7ocuk View&#8217;lar\u0131n kayd\u0131rma s\u0131ras\u0131nda nas\u0131l davranaca\u011f\u0131n\u0131 tan\u0131mlar.<br \/>\n    *   <code>parallax<\/code>: View, kayd\u0131rma s\u0131ras\u0131nda daha yava\u015f hareket eder (paralaks efekti). <code>app:layout_collapseParallaxMultiplier<\/code> ile h\u0131z\u0131 ayarlan\u0131r.<br \/>\n    *   <code>pin<\/code>: View, daralma tamamland\u0131\u011f\u0131nda sabitlenir (\u00f6rne\u011fin <code>Toolbar<\/code>).<br \/>\n*   <code>app:layout_behavior=\"@string\/appbar_scrolling_view_behavior\"<\/code>: Bu, <code>AppBarLayout<\/code>&#8216;un kayd\u0131rma olaylar\u0131n\u0131 dinlemesi i\u00e7in <code>NestedScrollView<\/code> (veya <code>RecyclerView<\/code>) gibi kayd\u0131r\u0131labilir View&#8217;lara atanmal\u0131d\u0131r.<\/p>\n<h4>4.2. FloatingActionButton&#8217;\u0131n Snackbar veya AppBar ile Etkile\u015fimi<\/h4>\n<p><code>CoordinatorLayout<\/code>, FAB&#8217;\u0131n di\u011fer UI bile\u015fenlerine ak\u0131ll\u0131ca tepki vermesini sa\u011flar.<\/p>\n<pre><code class=\"language-xml\"><androidx.coordinatorlayout.widget.CoordinatorLayout\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <com.google.android.material.appbar.AppBarLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n        <androidx.appcompat.widget.Toolbar\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?attr\/actionBarSize\"\n            app:layout_scrollFlags=\"scroll|enterAlways\"\/>\n    <\/com.google.android.material.appbar.AppBarLayout>\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        app:layout_behavior=\"@string\/appbar_scrolling_view_behavior\" \/>\n\n    <com.google.android.material.floatingactionbutton.FloatingActionButton\n        android:id=\"@+id\/fab\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"bottom|end\"\n        android:layout_margin=\"16dp\"\n        android:src=\"@drawable\/ic_add\" \/>\n\n<\/androidx.coordinatorlayout.widget.CoordinatorLayout><\/code><\/pre>\n<p>Bu \u00f6rnekte, FAB&#8217;a \u00f6zel bir <code>layout_behavior<\/code> atanmam\u0131\u015ft\u0131r. Ancak <code>CoordinatorLayout<\/code>, <code>FloatingActionButton<\/code> i\u00e7in varsay\u0131lan <code>FloatingActionButton.Behavior<\/code>&#8216;\u0131 otomatik olarak atar. Bu Behavior, FAB&#8217;\u0131n bir <code>Snackbar<\/code> g\u00f6r\u00fcnd\u00fc\u011f\u00fcnde otomatik olarak yukar\u0131 kaymas\u0131n\u0131 veya <code>AppBarLayout<\/code> kayd\u0131r\u0131ld\u0131\u011f\u0131nda gizlenip g\u00f6r\u00fcnmesini sa\u011flar.<\/p>\n<p>E\u011fer FAB&#8217;\u0131 belirli bir View&#8217;a g\u00f6re konumland\u0131rmak isterseniz:<\/p>\n<pre><code class=\"language-xml\"><com.google.android.material.floatingactionbutton.FloatingActionButton\n    android:id=\"@+id\/fab\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    app:layout_anchor=\"@id\/bottom_app_bar\"\n    app:layout_anchorGravity=\"top|center\"\n    android:src=\"@drawable\/ic_add\" \/>\n\n<com.google.android.material.bottomappbar.BottomAppBar\n    android:id=\"@+id\/bottom_app_bar\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_gravity=\"bottom\" \/><\/code><\/pre>\n<p>Burada <code>app:layout_anchor<\/code> ve <code>app:layout_anchorGravity<\/code> \u00f6znitelikleri, FAB&#8217;\u0131n <code>BottomAppBar<\/code>&#8216;a g\u00f6re nas\u0131l konumland\u0131r\u0131laca\u011f\u0131n\u0131 belirler.<\/p>\n<h4>4.3. Bottom Sheets Entegrasyonu<\/h4>\n<p><code>BottomSheetBehavior<\/code>, <code>CoordinatorLayout<\/code> ile birlikte kullan\u0131larak ekran\u0131n alt\u0131ndan kayd\u0131r\u0131labilen paneller olu\u015fturmay\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-xml\"><androidx.coordinatorlayout.widget.CoordinatorLayout\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <!-- Main content here -->\n\n    <LinearLayout\n        android:id=\"@+id\/bottom_sheet\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        android:background=\"@android:color\/white\"\n        app:layout_behavior=\"com.google.android.material.bottomsheet.BottomSheetBehavior\">\n\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Bottom Sheet Content\"\n            android:padding=\"16dp\"\n            android:textSize=\"20sp\" \/>\n        <!-- More content -->\n\n    <\/LinearLayout>\n\n<\/androidx.coordinatorlayout.widget.CoordinatorLayout><\/code><\/pre>\n<p>Burada <code>BottomSheetBehavior<\/code> do\u011frudan <code>LinearLayout<\/code>&#8216;a atanm\u0131\u015ft\u0131r. Bu sayede <code>LinearLayout<\/code>, kullan\u0131c\u0131 etkile\u015fimleriyle (kayd\u0131rma, s\u00fcr\u00fckleme) a\u00e7\u0131l\u0131p kapanabilen bir Bottom Sheet haline gelir.<\/p>\n<h4>4.4. Paralaks Efektleri<\/h4>\n<p>Yukar\u0131daki <code>CollapsingToolbarLayout<\/code> \u00f6rne\u011finde oldu\u011fu gibi, <code>app:layout_collapseMode=\"parallax\"<\/code> ve <code>app:layout_collapseParallaxMultiplier<\/code> \u00f6znitelikleri, bir <code>ImageView<\/code>&#8216;\u0131n kayd\u0131rma s\u0131ras\u0131nda farkl\u0131 bir h\u0131zda hareket etmesini sa\u011flayarak paralaks efekti yarat\u0131r. Bu, genellikle ba\u015fl\u0131k resimlerinde veya arka plan g\u00f6rsellerinde derinlik hissi yaratmak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h4>4.5. Di\u011fer Custom Etkile\u015fimler<\/h4>\n<p>\u00d6zel Behavior&#8217;lar sayesinde, hayal edebilece\u011finiz hemen hemen her t\u00fcrl\u00fc etkile\u015fimi yaratabilirsiniz. \u00d6rne\u011fin:<br \/>\n*   Bir kayd\u0131rma \u00e7ubu\u011funun (Seekbar) kayd\u0131r\u0131labilir i\u00e7eri\u011fin ilerlemesine g\u00f6re hareket etmesi.<br \/>\n*   Bir profil avatar\u0131n\u0131n, kayd\u0131rma s\u0131ras\u0131nda k\u00fc\u00e7\u00fcl\u00fcp b\u00fcy\u00fcmesi ve konum de\u011fi\u015ftirmesi.<br \/>\n*   Birden fazla FAB&#8217;\u0131n, ana FAB&#8217;a bas\u0131ld\u0131\u011f\u0131nda animasyonlu bir \u015fekilde g\u00f6r\u00fcnmesi ve kaybolmas\u0131.<\/p>\n<h3>5. Nested Scrolling ve CoordinatorLayout<\/h3>\n<p>Nested Scrolling (\u0130\u00e7 \u0130\u00e7e Kayd\u0131rma), Android&#8217;de birden fazla kayd\u0131r\u0131labilir View&#8217;\u0131n ayn\u0131 anda veya s\u0131rayla kayd\u0131rma olaylar\u0131n\u0131 i\u015flemesine olanak tan\u0131yan bir mekanizmad\u0131r. <code>CoordinatorLayout<\/code>, bu mekanizmay\u0131 kendi Behavior&#8217;lar\u0131 ile birle\u015ftirerek geli\u015fmi\u015f kayd\u0131rma efektleri sunar.<\/p>\n<h4>5.1. Nested Scrolling Nedir, Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h4>\n<p>Android 5.0 (API 21) ile tan\u0131t\u0131lan Nested Scrolling, <code>NestedScrollingChild<\/code> ve <code>NestedScrollingParent<\/code> aray\u00fczleri arac\u0131l\u0131\u011f\u0131yla \u00e7al\u0131\u015f\u0131r.<br \/>\n*   <strong><code>NestedScrollingChild<\/code>:<\/strong> Kayd\u0131rma olaylar\u0131n\u0131 \u00fcst View&#8217;lar\u0131na iletebilen View&#8217;lard\u0131r (\u00f6rne\u011fin <code>RecyclerView<\/code>, <code>NestedScrollView<\/code>).<br \/>\n*   <strong><code>NestedScrollingParent<\/code>:<\/strong> \u00c7ocuk View&#8217;lar\u0131ndan gelen kayd\u0131rma olaylar\u0131n\u0131 dinleyebilen ve i\u015fleyebilen View&#8217;lard\u0131r (\u00f6rne\u011fin <code>CoordinatorLayout<\/code>).<\/p>\n<p>Bir <code>NestedScrollingChild<\/code> kayd\u0131r\u0131lmaya ba\u015flad\u0131\u011f\u0131nda, kayd\u0131rma olay\u0131n\u0131 zincirleme bir \u015fekilde \u00fcst <code>NestedScrollingParent<\/code>&#8216;\u0131na iletir. \u00dcst View, bu olay\u0131 \u00f6nceden i\u015fleyebilir (<code>onNestedPreScroll<\/code>) veya \u00e7ocuk View kayd\u0131rd\u0131ktan sonra kalan kayd\u0131rma miktar\u0131n\u0131 i\u015fleyebilir (<code>onNestedScroll<\/code>). Bu, <code>AppBarLayout<\/code>&#8216;un daralmas\u0131 gibi senaryolarda <code>CoordinatorLayout<\/code>&#8216;un kayd\u0131rma olaylar\u0131n\u0131 yakalamas\u0131na ve kendi \u00e7ocuklar\u0131na (yani <code>AppBarLayout<\/code>&#8216;a) iletmesine olanak tan\u0131r.<\/p>\n<h4>5.2. CoordinatorLayout&#8217;un Nested Scrolling&#8217;u Nas\u0131l Y\u00f6netti\u011fi<\/h4>\n<p><code>CoordinatorLayout<\/code>, kendisi bir <code>NestedScrollingParent<\/code> olarak davran\u0131r. \u0130\u00e7indeki <code>NestedScrollingChild<\/code> View&#8217;lardan gelen kayd\u0131rma olaylar\u0131n\u0131 yakalar. Daha sonra, bu kayd\u0131rma olaylar\u0131n\u0131, etkilenen \u00e7ocuk View&#8217;lara (\u00f6rne\u011fin <code>AppBarLayout<\/code> veya <code>FloatingActionButton<\/code>) atanm\u0131\u015f Behavior&#8217;lara iletir. Behavior&#8217;lar, bu olaylar\u0131 i\u015fleyerek View&#8217;lar\u0131n konumunu, boyutunu veya g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc dinamik olarak g\u00fcnceller.<\/p>\n<p>Bu mekanizma, \u00f6zellikle <code>AppBarLayout<\/code> gibi bile\u015fenlerin kayd\u0131r\u0131labilir i\u00e7erikle senkronize bir \u015fekilde hareket etmesini sa\u011flar. <code>AppBarLayout<\/code> i\u00e7indeki <code>Toolbar<\/code>&#8216;\u0131n gizlenmesi veya bir resmin paralaks efektiyle hareket etmesi, <code>CoordinatorLayout<\/code>&#8216;un Nested Scrolling olaylar\u0131n\u0131 Behavior&#8217;lar arac\u0131l\u0131\u011f\u0131yla y\u00f6netmesiyle m\u00fcmk\u00fcn olur.<\/p>\n<h4>5.3. <code>android:fitsSystemWindows<\/code> ve <code>app:layout_scrollFlags<\/code> \u00d6nemi<\/h4>\n<p>*   <strong><code>android:fitsSystemWindows=\"true\"<\/code>:<\/strong> Bu \u00f6znitelik, View&#8217;\u0131n sistem pencere eklerini (system window insets) i\u015flemesini sa\u011flar. \u00d6zellikle durum \u00e7ubu\u011fu (status bar) ve navigasyon \u00e7ubu\u011fu (navigation bar) gibi sistem UI elemanlar\u0131n\u0131n kaplad\u0131\u011f\u0131 alan\u0131 dikkate alarak View&#8217;\u0131n i\u00e7eri\u011fini do\u011fru bir \u015fekilde konumland\u0131rmak i\u00e7in kullan\u0131l\u0131r. <code>CoordinatorLayout<\/code> ve <code>AppBarLayout<\/code> gibi bile\u015fenlerde kullan\u0131ld\u0131\u011f\u0131nda, i\u00e7eri\u011fin sistem \u00e7ubuklar\u0131n\u0131n alt\u0131na kaymas\u0131n\u0131 veya \u00e7ubuklar\u0131n arkas\u0131nda kalmas\u0131n\u0131 \u00f6nler. Genellikle <code>CoordinatorLayout<\/code>&#8216;un kendisinde veya <code>AppBarLayout<\/code>&#8216;ta ayarlan\u0131r.<\/p>\n<p>*   <strong><code>app:layout_scrollFlags<\/code>:<\/strong> Daha \u00f6nce bahsedildi\u011fi gibi, bu \u00f6znitelik <code>AppBarLayout<\/code> i\u00e7indeki \u00e7ocuk View&#8217;lar\u0131n kayd\u0131rma davran\u0131\u015f\u0131n\u0131 belirler. <code>scroll<\/code>, <code>exitUntilCollapsed<\/code>, <code>enterAlways<\/code>, <code>enterAlwaysCollapsed<\/code>, <code>snap<\/code> gibi bayraklar\u0131n kombinasyonlar\u0131, <code>AppBarLayout<\/code>&#8216;un i\u00e7eri\u011fin kayd\u0131r\u0131lmas\u0131na nas\u0131l tepki verece\u011fini detayl\u0131 bir \u015fekilde kontrol etmenizi sa\u011flar. Do\u011fru <code>scrollFlags<\/code> kullan\u0131m\u0131, ak\u0131c\u0131 ve beklenen kayd\u0131rma efektleri i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h3>6. Geli\u015fmi\u015f Konular ve \u0130pu\u00e7lar\u0131<\/h3>\n<p><code>CoordinatorLayout<\/code>&#8216;u etkili bir \u015fekilde kullanmak i\u00e7in baz\u0131 geli\u015fmi\u015f kavramlar\u0131 ve ipu\u00e7lar\u0131n\u0131 bilmek faydal\u0131d\u0131r.<\/p>\n<h4>6.1. <code>app:layout_anchor<\/code> ve <code>app:layout_anchorGravity<\/code> Kullan\u0131m\u0131<\/h4>\n<p>Bu \u00f6znitelikler, bir View&#8217;\u0131 ba\u015fka bir View&#8217;a (\u00e7apa View) g\u00f6re konumland\u0131rmak i\u00e7in kullan\u0131l\u0131r. \u00d6zellikle <code>FloatingActionButton<\/code> gibi View&#8217;lar i\u00e7in yayg\u0131n olarak kullan\u0131l\u0131r.<\/p>\n<p>*   <strong><code>app:layout_anchor=\"@id\/anchor_view_id\"<\/code>:<\/strong> Bu View&#8217;\u0131n, belirtilen ID&#8217;ye sahip View&#8217;a (anchor_view_id) ba\u011flanaca\u011f\u0131n\u0131 s\u00f6yler. Ba\u011fl\u0131 View, \u00e7apa View hareket etti\u011finde onunla birlikte hareket edecektir.<br \/>\n*   <strong><code>app:layout_anchorGravity=\"top|end\"<\/code>:<\/strong> Ba\u011fl\u0131 View&#8217;\u0131n \u00e7apa View&#8217;a g\u00f6re nerede hizalanaca\u011f\u0131n\u0131 belirler. Standart <code>gravity<\/code> de\u011ferleri (top, bottom, start, end, center vb.) kullan\u0131labilir.<\/p>\n<p>Bu \u00f6znitelikler, View&#8217;lar\u0131n birbirine g\u00f6re dinamik olarak konumland\u0131r\u0131lmas\u0131n\u0131 sa\u011flayarak esnek ve tepkisel UI&#8217;lar olu\u015fturmaya yard\u0131mc\u0131 olur.<\/p>\n<h4>6.2. <code>app:layout_behavior<\/code> ve Custom Behavior&#8217;lar\u0131n XML&#8217;de Atanmas\u0131<\/h4>\n<p>Haz\u0131r Behavior&#8217;lar\u0131n \u00e7o\u011fu otomatik olarak atan\u0131rken, \u00f6zel Behavior&#8217;lar\u0131n\u0131z\u0131 XML&#8217;de a\u00e7\u0131k\u00e7a <code>app:layout_behavior=\"com.example.myapp.MyCustomBehavior\"<\/code> \u015feklinde ataman\u0131z gerekir. Bu, <code>CoordinatorLayout<\/code>&#8216;a hangi View&#8217;\u0131n hangi \u00f6zel davran\u0131\u015f\u0131 sergileyece\u011fini bildirir. Behavior s\u0131n\u0131f\u0131n\u0131n tam nitelikli ad\u0131n\u0131 (paket ad\u0131 dahil) belirtmek \u00f6nemlidir.<\/p>\n<h4>6.3. Performans Konular\u0131<\/h4>\n<p><code>CoordinatorLayout<\/code> g\u00fc\u00e7l\u00fc olsa da, performans \u00fczerinde dikkatli olunmas\u0131 gereken baz\u0131 noktalar vard\u0131r:<\/p>\n<p>*   <strong>Derin Hiyerar\u015filer:<\/strong> \u00c7ok derin View hiyerar\u015fileri, \u00f6l\u00e7me ve d\u00fczenleme (measure and layout) i\u015flemlerini yava\u015flatabilir. <code>CoordinatorLayout<\/code>&#8216;u m\u00fcmk\u00fcn oldu\u011funca d\u00fcz bir yap\u0131da tutmaya \u00e7al\u0131\u015f\u0131n.<br \/>\n*   <strong>A\u015f\u0131r\u0131 \u00c7izim (Overdraw):<\/strong> Birbirini \u00f6rten \u00e7ok say\u0131da View, a\u015f\u0131r\u0131 \u00e7izime neden olabilir. <code>android:background<\/code> veya <code>android:fitsSystemWindows<\/code> gibi \u00f6znitelikleri do\u011fru kullanarak gereksiz \u00e7izimleri \u00f6nleyin.<br \/>\n*   <strong>Karma\u015f\u0131k Behavior&#8217;lar:<\/strong> \u00d6zel Behavior&#8217;lar\u0131n\u0131z\u0131n <code>onLayoutChild<\/code> veya <code>onDependentViewChanged<\/code> gibi metotlar\u0131nda \u00e7ok fazla hesaplama yapmamas\u0131na dikkat edin. Bu metotlar s\u0131k\u00e7a \u00e7a\u011fr\u0131labilir ve karma\u015f\u0131k i\u015flemler UI donmalar\u0131na neden olabilir. Animasyonlar i\u00e7in <code>ObjectAnimator<\/code> veya <code>ViewPropertyAnimator<\/code> gibi optimize edilmi\u015f s\u0131n\u0131flar\u0131 tercih edin.<\/p>\n<h4>6.4. Dikkat Edilmesi Gerekenler ve S\u0131k Yap\u0131lan Hatalar<\/h4>\n<p>*   <strong><code>CoordinatorLayout<\/code>&#8216;un K\u00f6k Olmas\u0131:<\/strong> Genellikle <code>CoordinatorLayout<\/code>&#8216;un ekran\u0131n k\u00f6k d\u00fczeni olmas\u0131 \u00f6nerilir, aksi takdirde baz\u0131 etkile\u015fimler do\u011fru \u00e7al\u0131\u015fmayabilir.<br \/>\n*   <strong><code>app:layout_behavior<\/code> Eksikli\u011fi:<\/strong> Kayd\u0131r\u0131labilir bir View&#8217;\u0131n <code>AppBarLayout<\/code> ile etkile\u015fime girmesi i\u00e7in <code>app:layout_behavior=\"@string\/appbar_scrolling_view_behavior\"<\/code> \u00f6zniteli\u011fi gereklidir. Bu \u00f6zniteli\u011fin unutulmas\u0131, <code>AppBarLayout<\/code>&#8216;un kayd\u0131rma s\u0131ras\u0131nda hi\u00e7bir tepki vermemesine neden olur.<br \/>\n*   <strong><code>android:fitsSystemWindows<\/code> Yanl\u0131\u015f Kullan\u0131m\u0131:<\/strong> Durum \u00e7ubu\u011fu veya navigasyon \u00e7ubu\u011fu ile ilgili sorunlar ya\u015f\u0131yorsan\u0131z, <code>fitsSystemWindows<\/code> \u00f6zniteli\u011fini do\u011fru View&#8217;lara (genellikle <code>CoordinatorLayout<\/code> veya <code>AppBarLayout<\/code>) uygulad\u0131\u011f\u0131n\u0131zdan emin olun.<br \/>\n*   <strong>Behavior \u00c7ak\u0131\u015fmalar\u0131:<\/strong> Birden fazla Behavior&#8217;\u0131n ayn\u0131 View \u00fczerinde ayn\u0131 \u00f6zelli\u011fi (\u00f6rne\u011fin konumland\u0131rma) de\u011fi\u015ftirmeye \u00e7al\u0131\u015fmas\u0131 beklenmedik sonu\u00e7lara yol a\u00e7abilir. Behavior&#8217;lar\u0131n\u0131z\u0131 dikkatlice tasarlay\u0131n.<br \/>\n*   <strong>Nested Scrolling&#8217;i Anlamak:<\/strong> Nested Scrolling&#8217;in nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve kayd\u0131rma olaylar\u0131n\u0131n nas\u0131l iletildi\u011fini anlamak, karma\u015f\u0131k kayd\u0131rma senaryolar\u0131nda hata ay\u0131klama ve do\u011fru davran\u0131\u015flar\u0131 uygulama a\u00e7\u0131s\u0131ndan kritiktir.<\/p>\n<h3>7. CoordinatorLayout ve Di\u011fer D\u00fczenler<\/h3>\n<p><code>CoordinatorLayout<\/code>, Android UI tasar\u0131m\u0131nda bir &#8220;s\u00fcper d\u00fczen&#8221; olarak d\u00fc\u015f\u00fcn\u00fclebilir, ancak di\u011fer d\u00fczen y\u00f6neticileriyle birlikte uyumlu bir \u015fekilde \u00e7al\u0131\u015f\u0131r.<\/p>\n<h4>7.1. ConstraintLayout ile Entegrasyon<\/h4>\n<p><code>ConstraintLayout<\/code>, d\u00fcz View hiyerar\u015fileri ve esnek konumland\u0131rma yetenekleri nedeniyle modern Android UI&#8217;da yayg\u0131n olarak kullan\u0131lmaktad\u0131r. <code>CoordinatorLayout<\/code> ve <code>ConstraintLayout<\/code> birbirinin yerine ge\u00e7mekten ziyade, birbirini tamamlayan ara\u00e7lard\u0131r.<\/p>\n<p>*   <strong><code>CoordinatorLayout<\/code> D\u0131\u015f Katman Olarak:<\/strong> Genellikle <code>CoordinatorLayout<\/code>, bir ekran\u0131n en d\u0131\u015ftaki d\u00fczeni olarak kullan\u0131l\u0131r ve i\u00e7inde <code>AppBarLayout<\/code>, <code>FloatingActionButton<\/code> gibi <code>CoordinatorLayout<\/code>&#8216;a \u00f6zel etkile\u015fimler gerektiren bile\u015fenleri bar\u0131nd\u0131r\u0131r.<br \/>\n*   <strong><code>ConstraintLayout<\/code> \u0130\u00e7 Katman Olarak:<\/strong> <code>CoordinatorLayout<\/code>&#8216;un i\u00e7erisindeki <code>NestedScrollView<\/code> veya <code>FrameLayout<\/code> gibi alanlarda, karma\u015f\u0131k View gruplar\u0131n\u0131 d\u00fczenlemek i\u00e7in <code>ConstraintLayout<\/code> kullan\u0131labilir. \u00d6rne\u011fin, <code>CollapsingToolbarLayout<\/code> i\u00e7indeki bir ba\u015fl\u0131k alan\u0131n\u0131 veya bir kart\u0131n i\u00e7eri\u011fini <code>ConstraintLayout<\/code> ile d\u00fczenlemek, esnekli\u011fi art\u0131r\u0131r ve View hiyerar\u015fisini d\u00fcz tutmaya yard\u0131mc\u0131 olur.<\/p>\n<p>Bu kombinasyon, hem etkile\u015fimli Material Design davran\u0131\u015flar\u0131n\u0131 hem de karma\u015f\u0131k ve duyarl\u0131 d\u00fczenleri verimli bir \u015fekilde olu\u015fturman\u0131za olanak tan\u0131r.<\/p>\n<h4>7.2. FrameLayout, LinearLayout Gibi D\u00fczenlerle Farklar\u0131 ve Birlikte Kullan\u0131m\u0131<\/h4>\n<p>*   <strong><code>FrameLayout<\/code>:<\/strong> <code>CoordinatorLayout<\/code>, <code>FrameLayout<\/code>&#8216;tan t\u00fcredi\u011fi i\u00e7in temel \u00fcst \u00fcste bindirme yeteneklerini miras al\u0131r. Ancak <code>CoordinatorLayout<\/code>, <code>FrameLayout<\/code>&#8216;un statik yap\u0131s\u0131n\u0131n aksine, \u00e7ocuk View&#8217;lar aras\u0131nda dinamik etkile\u015fimleri ve kayd\u0131rma koordinasyonunu y\u00f6netebilir. <code>CoordinatorLayout<\/code>&#8216;un \u00e7ocuklar\u0131 olarak <code>FrameLayout<\/code>&#8216;lar kullan\u0131labilir, \u00f6zellikle basit View gruplar\u0131n\u0131 \u00fcst \u00fcste bindirmek gerekti\u011finde.<br \/>\n*   <strong><code>LinearLayout<\/code> ve <code>RelativeLayout<\/code>:<\/strong> Bu d\u00fczenler, \u00e7ocuk View&#8217;lar\u0131 do\u011frusal veya g\u00f6receli olarak d\u00fczenlemek i\u00e7in iyidir. <code>CoordinatorLayout<\/code>&#8216;un i\u00e7inde, belirli bir b\u00f6l\u00fcm\u00fcn i\u00e7eri\u011fini d\u00fczenlemek i\u00e7in <code>LinearLayout<\/code> veya <code>RelativeLayout<\/code> kullan\u0131labilir. \u00d6rne\u011fin, bir <code>NestedScrollView<\/code>&#8216;un i\u00e7ine yerle\u015ftirilen bir <code>LinearLayout<\/code>, kayd\u0131r\u0131labilir i\u00e7eri\u011fi dikey olarak d\u00fczenlemek i\u00e7in m\u00fckemmeldir.<\/p>\n<p>\u00d6zetle, <code>CoordinatorLayout<\/code> genellikle ekran\u0131n ana yap\u0131s\u0131n\u0131 ve etkile\u015fimlerini y\u00f6netirken, di\u011fer d\u00fczen y\u00f6neticileri bu ana yap\u0131n\u0131n i\u00e7indeki daha k\u00fc\u00e7\u00fck, statik veya \u00f6zel d\u00fczenleme gerektiren b\u00f6l\u00fcmleri d\u00fczenlemek i\u00e7in kullan\u0131l\u0131r. Bu katmanl\u0131 yakla\u015f\u0131m, hem g\u00fc\u00e7 hem de esneklik sa\u011flar.<\/p>\n<h3>8. Sonu\u00e7<\/h3>\n<p>Android <code>CoordinatorLayout<\/code>, modern ve etkile\u015fimli kullan\u0131c\u0131 aray\u00fczleri olu\u015fturmak isteyen her Android geli\u015ftiricisi i\u00e7in vazge\u00e7ilmez bir ara\u00e7t\u0131r. Material Design felsefesinin temel bir bile\u015feni olarak, kayd\u0131r\u0131labilir ba\u015fl\u0131klar, dinamik d\u00fc\u011fme etkile\u015fimleri, paralaks efektleri ve \u00f6zel UI davran\u0131\u015flar\u0131 gibi karma\u015f\u0131k senaryolar\u0131 basit ve yap\u0131land\u0131r\u0131labilir bir \u015fekilde uygulamaya koymay\u0131 sa\u011flar.<\/p>\n<p>Behavior kavram\u0131 ve Nested Scrolling mekanizmas\u0131yla entegrasyonu sayesinde, <code>CoordinatorLayout<\/code>, View&#8217;lar\u0131n birbirleriyle ve <code>CoordinatorLayout<\/code>&#8216;un kendisiyle ak\u0131ll\u0131ca etkile\u015fime girmesine olanak tan\u0131r. Haz\u0131r Behavior&#8217;lar geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131rken, \u00f6zel Behavior&#8217;lar uygulamalara benzersiz ve yarat\u0131c\u0131 etkile\u015fimler eklemek i\u00e7in s\u0131n\u0131rs\u0131z olanaklar sunar.<\/p>\n<p><code>CoordinatorLayout<\/code>&#8216;u do\u011fru bir \u015fekilde kullanmak, sadece g\u00f6rsel olarak \u00e7ekici uygulamalar yaratmakla kalmaz, ayn\u0131 zamanda kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde geli\u015ftirir. Performans ipu\u00e7lar\u0131na dikkat ederek ve s\u0131k yap\u0131lan hatalardan ka\u00e7\u0131narak, geli\u015ftiriciler <code>CoordinatorLayout<\/code>&#8216;un t\u00fcm potansiyelini a\u00e7\u0131\u011fa \u00e7\u0131karabilir ve Material Design standartlar\u0131na uygun, ak\u0131c\u0131 ve duyarl\u0131 Android uygulamalar\u0131 geli\u015ftirebilirler. Android UI geli\u015ftirme d\u00fcnyas\u0131 ilerlemeye devam ettik\u00e7e, <code>CoordinatorLayout<\/code>&#8216;un esnek ve etkile\u015fimli tasar\u0131m yetenekleri, \u015f\u00fcphesiz daha uzun y\u0131llar boyunca temel bir rol oynamaya devam edecektir.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Android CoordinatorLayout: Esnek ve Etkile\u015fimli UI Tasar\u0131m\u0131nda G\u00fc\u00e7l\u00fc Bir Ara\u00e7\nAndroid kullan\u0131c\u0131 aray\u00fcz\u00fc (UI) geli\u015ftirme, g\u00f6rsel \u00e7ekicil","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-36739","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Android CoordinatorLayout: Esnek ve Etkile\u015fimli UI Tasar\u0131m\u0131nda G\u00fc\u00e7l\u00fc Bir Ara\u00e7 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/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:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Android CoordinatorLayout: Esnek ve Etkile\u015fimli UI Tasar\u0131m\u0131nda G\u00fc\u00e7l\u00fc Bir Ara\u00e7\" \/>\n<meta property=\"og:description\" content=\"Android CoordinatorLayout: Esnek ve Etkile\u015fimli UI Tasar\u0131m\u0131nda G\u00fc\u00e7l\u00fc Bir Ara\u00e7 Android kullan\u0131c\u0131 aray\u00fcz\u00fc (UI) geli\u015ftirme, g\u00f6rsel \u00e7ekicil\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-22T08:41:01+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Android CoordinatorLayout: Esnek ve Etkile\u015fimli UI Tasar\u0131m\u0131nda G\u00fc\u00e7l\u00fc Bir Ara\u00e7\",\"datePublished\":\"2025-12-22T08:41:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/\"},\"wordCount\":3531,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/\",\"name\":\"Android CoordinatorLayout: Esnek ve Etkile\u015fimli UI Tasar\u0131m\u0131nda G\u00fc\u00e7l\u00fc Bir Ara\u00e7 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-22T08:41:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Android CoordinatorLayout: Esnek ve Etkile\u015fimli UI Tasar\u0131m\u0131nda G\u00fc\u00e7l\u00fc Bir Ara\u00e7\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Android CoordinatorLayout: Esnek ve Etkile\u015fimli UI Tasar\u0131m\u0131nda G\u00fc\u00e7l\u00fc Bir Ara\u00e7 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/","og_locale":"tr_TR","og_type":"article","og_title":"Android CoordinatorLayout: Esnek ve Etkile\u015fimli UI Tasar\u0131m\u0131nda G\u00fc\u00e7l\u00fc Bir Ara\u00e7","og_description":"Android CoordinatorLayout: Esnek ve Etkile\u015fimli UI Tasar\u0131m\u0131nda G\u00fc\u00e7l\u00fc Bir Ara\u00e7 Android kullan\u0131c\u0131 aray\u00fcz\u00fc (UI) geli\u015ftirme, g\u00f6rsel \u00e7ekicil","og_url":"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-22T08:41:01+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"20 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Android CoordinatorLayout: Esnek ve Etkile\u015fimli UI Tasar\u0131m\u0131nda G\u00fc\u00e7l\u00fc Bir Ara\u00e7","datePublished":"2025-12-22T08:41:01+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/"},"wordCount":3531,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/","url":"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/","name":"Android CoordinatorLayout: Esnek ve Etkile\u015fimli UI Tasar\u0131m\u0131nda G\u00fc\u00e7l\u00fc Bir Ara\u00e7 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-22T08:41:01+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/android-coordinatorlayout-esnek-ve-etkilesimli-ui-tasariminda-guclu-bir-arac\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Android CoordinatorLayout: Esnek ve Etkile\u015fimli UI Tasar\u0131m\u0131nda G\u00fc\u00e7l\u00fc Bir Ara\u00e7"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=36739"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36739\/revisions"}],"predecessor-version":[{"id":36740,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36739\/revisions\/36740"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}