diff --git a/.gitbook/assets/image (10).png b/.gitbook/assets/image (10).png index 8218196..d47251e 100644 Binary files a/.gitbook/assets/image (10).png and b/.gitbook/assets/image (10).png differ diff --git a/.gitbook/assets/image (11).png b/.gitbook/assets/image (11).png index d38bc20..48c01ea 100644 Binary files a/.gitbook/assets/image (11).png and b/.gitbook/assets/image (11).png differ diff --git a/.gitbook/assets/image (12).png b/.gitbook/assets/image (12).png index b804ff7..8218196 100644 Binary files a/.gitbook/assets/image (12).png and b/.gitbook/assets/image (12).png differ diff --git a/.gitbook/assets/image (13).png b/.gitbook/assets/image (13).png index 29648e4..d38bc20 100644 Binary files a/.gitbook/assets/image (13).png and b/.gitbook/assets/image (13).png differ diff --git a/.gitbook/assets/image (14).png b/.gitbook/assets/image (14).png index 6f84476..b804ff7 100644 Binary files a/.gitbook/assets/image (14).png and b/.gitbook/assets/image (14).png differ diff --git a/.gitbook/assets/image (15).png b/.gitbook/assets/image (15).png index b58bca9..29648e4 100644 Binary files a/.gitbook/assets/image (15).png and b/.gitbook/assets/image (15).png differ diff --git a/.gitbook/assets/image (16).png b/.gitbook/assets/image (16).png index 78108ca..6f84476 100644 Binary files a/.gitbook/assets/image (16).png and b/.gitbook/assets/image (16).png differ diff --git a/.gitbook/assets/image (17).png b/.gitbook/assets/image (17).png index 4e08193..b58bca9 100644 Binary files a/.gitbook/assets/image (17).png and b/.gitbook/assets/image (17).png differ diff --git a/.gitbook/assets/image (18).png b/.gitbook/assets/image (18).png index 8493ed0..78108ca 100644 Binary files a/.gitbook/assets/image (18).png and b/.gitbook/assets/image (18).png differ diff --git a/.gitbook/assets/image (19).png b/.gitbook/assets/image (19).png index ccf8863..4e08193 100644 Binary files a/.gitbook/assets/image (19).png and b/.gitbook/assets/image (19).png differ diff --git a/.gitbook/assets/image (20).png b/.gitbook/assets/image (20).png index ac214fc..8493ed0 100644 Binary files a/.gitbook/assets/image (20).png and b/.gitbook/assets/image (20).png differ diff --git a/.gitbook/assets/image (21).png b/.gitbook/assets/image (21).png index f7d5a08..ccf8863 100644 Binary files a/.gitbook/assets/image (21).png and b/.gitbook/assets/image (21).png differ diff --git a/.gitbook/assets/image (22).png b/.gitbook/assets/image (22).png index d47251e..ac214fc 100644 Binary files a/.gitbook/assets/image (22).png and b/.gitbook/assets/image (22).png differ diff --git a/.gitbook/assets/image (23).png b/.gitbook/assets/image (23).png index ebf4ad8..f7d5a08 100644 Binary files a/.gitbook/assets/image (23).png and b/.gitbook/assets/image (23).png differ diff --git a/.gitbook/assets/image (24).png b/.gitbook/assets/image (24).png index 421e13d..d47251e 100644 Binary files a/.gitbook/assets/image (24).png and b/.gitbook/assets/image (24).png differ diff --git a/.gitbook/assets/image (25).png b/.gitbook/assets/image (25).png new file mode 100644 index 0000000..ebf4ad8 Binary files /dev/null and b/.gitbook/assets/image (25).png differ diff --git a/.gitbook/assets/image (26).png b/.gitbook/assets/image (26).png new file mode 100644 index 0000000..421e13d Binary files /dev/null and b/.gitbook/assets/image (26).png differ diff --git a/.gitbook/assets/image (27).png b/.gitbook/assets/image (27).png new file mode 100644 index 0000000..421e13d Binary files /dev/null and b/.gitbook/assets/image (27).png differ diff --git a/.gitbook/assets/image (9).png b/.gitbook/assets/image (9).png index 48c01ea..4e08193 100644 Binary files a/.gitbook/assets/image (9).png and b/.gitbook/assets/image (9).png differ diff --git a/README.md b/README.md index fb53f0a..725b433 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ Tam olarak hangi alanların değiştiğini merak ediyorsan, alttaki linkten GitH ## 🌍 Tüm [YEmreAk ](https://wiki.yemreak.com)İçerikleri -![YEmreAk tüm içerikleri \(her sütun bir web sitesidir\)](.gitbook/assets/image%20%2819%29.png) +![YEmreAk tüm içerikleri \(her sütun bir web sitesidir\)](.gitbook/assets/image%20%2821%29.png) ## 💖 Destek ve İletişim diff --git a/SUMMARY.md b/SUMMARY.md index e6fbcd6..ac5949c 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -3,33 +3,29 @@ * [📱 YAndroid](README.md) * [💖 Katkıda Bulunma Rehberi](https://wiki.yemreak.com/contributing) * [🌟 Faydalı Kaynaklar](https://learn.yemreak.com/icerikler/android) +* [🧱 Temel Kavramlar](temel-kavramlar/README.md) + * [💫 Activity Yaşam Döngüsü](temel-kavramlar/activity-lifecycle-and-state.md) + * [🏹 Implicit intents](temel-kavramlar/implicit-intents.md) + * [⏩ Activity ve Intent'ler](temel-kavramlar/activity-ve-intentler.md) + * [🧐 Component İsimleri](temel-kavramlar/component-isimleri.md) +* [💾 Veri Saklama Yöntemleri](veri-saklama-yoentemleri.md) +* [🎪 Android'de Animasyonlar](androidde-animasyonlar.md) * [🌄 Arkaplan'da Çalışma](arkaplanda-calisma/README.md) * [💫 AsyncTask ve AsyncTaskLoader](arkaplanda-calisma/asynctask-ve-asynctaskloader.md) * [✨ Faydalı Bilgiler](faydali-bilgiler/README.md) + * [⭐ Activity Örnekleri](faydali-bilgiler/activity-notlari.md) * [✍ Kişisel Notlarım](faydali-bilgiler/kisisel-notlarim.md) * [📲 Telefonu Bilgisayara Bağlama](faydali-bilgiler/telefonu-bilgisayara-baglama.md) * [👜 Google Play Store](faydali-bilgiler/google-play-store.md) * [🐛 Hata Notları](faydali-bilgiler/hata-notlari.md) - * [🥴 Karışık Notlar](faydali-bilgiler/karisik-notlar.md) - -## Programlama Notları - -* [🔰 Giriş](programlama-notlari-1/giris.md) -* [👶 İlk Etkileşimli UI](programlama-notlari-1/ilk-etkilesimli-ui.md) -* [🔤 TextView](programlama-notlari-1/textview.md) -* [⏬ Scrolling views](programlama-notlari-1/scrolling-views.md) -* [📜 XML Örneği](programlama-notlari-1/xml-oernegi.md) -* [⏩ Activity ve Intent'ler](programlama-notlari-1/activity-ve-intentler.md) -* [💫 Activity lifecycle and state](programlama-notlari-1/activity-lifecycle-and-state.md) -* [🏹 Implicit intents](programlama-notlari-1/implicit-intents.md) -* [🚧 AsyncTask ve AsyncTaskLoader](programlama-notlari-1/asynctask-ve-asynctaskloader.md) + * [🚧 Proje İşlemleri](faydali-bilgiler/proje-islemleri.md) + * [🔗 Karışık Bağlantılar](faydali-bilgiler/karisik-notlar.md) +* [🥴 Düzensiz Notlar](duezensiz-notlar/README.md) + * [📜 XML Örneği](duezensiz-notlar/xml-oernegi.md) + * [⏬ Scrolling views](duezensiz-notlar/scrolling-views.md) + * [🔤 TextView](duezensiz-notlar/textview.md) + * [👶 İlk Etkileşimli UI](duezensiz-notlar/ilk-etkilesimli-ui.md) + * [🔰 Giriş](duezensiz-notlar/giris.md) ## Eski Notlarım -* [🧐 Component İsimleri](programlama-notlari/component-isimleri.md) -* [🚧 Proje İşlemleri](programlama-notlari/proje-islemleri.md) -* [📃 Activity Notları](programlama-notlari/activity-notlari.md) -* [💾 Veri Saklama Yöntemleri](programlama-notlari/veri-saklama-yoentemleri.md) -* [⏩ Kaydırmalı Uygulama \(ViewPager ve PageAdapter\)](programlama-notlari/kaydirmali-uygulama-viewpager-ve-pageadapter.md) -* [🎪 Android'de Animasyonlar](programlama-notlari/androidde-animasyonlar.md) - diff --git a/programlama-notlari/androidde-animasyonlar.md b/androidde-animasyonlar.md similarity index 57% rename from programlama-notlari/androidde-animasyonlar.md rename to androidde-animasyonlar.md index ffb81b6..9e656b7 100644 --- a/programlama-notlari/androidde-animasyonlar.md +++ b/androidde-animasyonlar.md @@ -2,10 +2,17 @@ ## ⏫ Aşağıdan Gelme Animasyonu -![](../.gitbook/assets/image%20%2817%29.png) +* Proje dizinine `anim` adlı klasör oluşturup içinde bir `resource file'`a bu kodları yazıyoruz. +* `Main`'e alttakiler eklenmeli: + * `btn_start` = Get Started adlı view'ın ID'si + * `frombutton` = üstteki kodların yazıldığı dosyanın adı -Proje dizinine `anim` adlı klasör oluşturup içinde bir `resource file'`a bu kodları yazıyoruz. +{% tabs %} +{% tab title="⭐ Görsel" %} +![](.gitbook/assets/image%20%289%29.png) +{% endtab %} +{% tab title="📜 XML Kodları" %} ```markup @@ -15,10 +22,10 @@ Proje dizinine `anim` adlı klasör oluşturup içinde bir `resource file'`a bu android:fromYDelta="100%p"/> ``` +{% endtab %} -`Main`'e alttakiler eklenmeli: - -```text +{% tab title="👨‍💻 Main Kodları" %} +```java class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -28,14 +35,17 @@ class MainActivity : AppCompatActivity() { ... } ``` - -* `btn_start` = Get Started adlı view'ın ID'si -* `frombutton` = üstteki kodların yazıldığı dosyanın adı +{% endtab %} +{% endtabs %} ## 👁‍🗨 Soluk Belirme -![](../.gitbook/assets/image%20%2822%29.png) +{% tabs %} +{% tab title="⭐ Görsel" %} +![](.gitbook/assets/image%20%2810%29.png) +{% endtab %} +{% tab title="📜 XML Kodları" %} ```markup ``` +{% endtab %} +{% endtabs %} diff --git a/arkaplanda-calisma/asynctask-ve-asynctaskloader.md b/arkaplanda-calisma/asynctask-ve-asynctaskloader.md index ab074e4..379673e 100644 --- a/arkaplanda-calisma/asynctask-ve-asynctaskloader.md +++ b/arkaplanda-calisma/asynctask-ve-asynctaskloader.md @@ -29,7 +29,7 @@ Android'teki tüm görüntü işlemlerinin yapıldı alandır. * UI Thread sadece görsel işlemler için kullanılmalıdır * Tüm işlemler 16ms'den kısa bir sürede tamamlanmalıdır -![](../.gitbook/assets/image%20%2818%29.png) +![](../.gitbook/assets/image%20%2820%29.png) {% hint style="danger" %} Yaklaşık olarak 5s'den uzun süren işlemler "[application not responding](http://developer.android.com/guide/practices/responsiveness.html)" \(ANR\) diyaloğunu oluşturur ve kullanıcı bunu görmesi durumunda uygulamayı kapatıp, siler 😥 @@ -50,9 +50,9 @@ Verilen işlemi arkaplanda, sistemi bloklamadan tamamlar. {% tabs %} {% tab title="🎈 Kullanım" %} -![](../.gitbook/assets/image%20%2812%29.png) +![](../.gitbook/assets/image%20%2814%29.png) -![](../.gitbook/assets/image%20%289%29.png) +![](../.gitbook/assets/image%20%2811%29.png) | 💠 Metot | 📜 Açıklama | | :--- | :--- | @@ -126,5 +126,7 @@ private class DownloadFilesTask extends AsyncTask { {% endtab %} {% endtabs %} +## 🔗 Harici Bağlantılar +{% embed url="https://google-developer-training.github.io/android-developer-fundamentals-course-concepts-v2/unit-3-working-in-the-background/lesson-7-background-tasks/7-1-c-asynctask-and-asynctaskloader/7-1-c-asynctask-and-asynctaskloader.html" %} diff --git a/duezensiz-notlar/README.md b/duezensiz-notlar/README.md new file mode 100644 index 0000000..ca5b1a5 --- /dev/null +++ b/duezensiz-notlar/README.md @@ -0,0 +1,2 @@ +# 🥴 Düzensiz Notlar + diff --git a/programlama-notlari-1/giris.md b/duezensiz-notlar/giris.md similarity index 100% rename from programlama-notlari-1/giris.md rename to duezensiz-notlar/giris.md diff --git a/programlama-notlari-1/ilk-etkilesimli-ui.md b/duezensiz-notlar/ilk-etkilesimli-ui.md similarity index 100% rename from programlama-notlari-1/ilk-etkilesimli-ui.md rename to duezensiz-notlar/ilk-etkilesimli-ui.md diff --git a/programlama-notlari-1/scrolling-views.md b/duezensiz-notlar/scrolling-views.md similarity index 100% rename from programlama-notlari-1/scrolling-views.md rename to duezensiz-notlar/scrolling-views.md diff --git a/programlama-notlari-1/textview.md b/duezensiz-notlar/textview.md similarity index 100% rename from programlama-notlari-1/textview.md rename to duezensiz-notlar/textview.md diff --git a/programlama-notlari-1/xml-oernegi.md b/duezensiz-notlar/xml-oernegi.md similarity index 100% rename from programlama-notlari-1/xml-oernegi.md rename to duezensiz-notlar/xml-oernegi.md diff --git a/faydali-bilgiler/activity-notlari.md b/faydali-bilgiler/activity-notlari.md new file mode 100644 index 0000000..bdb952d --- /dev/null +++ b/faydali-bilgiler/activity-notlari.md @@ -0,0 +1,239 @@ +--- +description: Activity'ler için faydalı örnekler +--- + +# ⭐ Activity Örnekleri + +## 🚶‍♂️ Gecikmeli Activity Başlatma + +```java +Handler().postDelayed({ startActivity(Intent(this, SnakeActivity1::class.java)) +}, 400) +``` + +## 🌃 Arka planda Çalıştırma + +```java +override fun onCreate(savedInstanceState: Bundle?) { + // Arkaplanda çalıştırma + moveTaskToBack(true) + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_share) + + ... +} +``` + +## 🧹 Bütün Eski Activity'leri Sonlandırıp Yeni Activity Açma + +```java +val intent = Intent(this, MainActivity::class.java) +intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK // Tüm işlemleri bitirme +finish() // İşlemi sonlandırma +startActivity(intent) +``` + +## ⏩ Kaydırmalı Uygulama \(ViewPager ve PageAdapter\) + +{% tabs %} +{% tab title="⭐ Örnek" %} +![](../.gitbook/assets/image%20%2827%29.png) +{% endtab %} + +{% tab title="Manifest" %} +```markup + + + + + + + + + + + + + +``` +{% endtab %} + +{% tab title="Main" %} +```java +package com.yemreak.iuapp + +import android.support.v7.app.AppCompatActivity +import android.os.Bundle +import android.support.v4.view.ViewPager +import kotlinx.android.synthetic.main.activity_main.* + +class MainActivity : AppCompatActivity() { + + private lateinit var slideAdapter: SlideAdapter + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + slideAdapter = SlideAdapter(applicationContext) + vp_main.adapter = slideAdapter + }} + ... +} +``` +{% endtab %} + +{% tab title="SlideAdapter" %} +```java +package com.yemreak.iuapp + +import android.content.Context +import android.graphics.Color +import android.support.v4.view.PagerAdapter +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView + +class SlideAdapter(context : Context) : PagerAdapter() { + + lateinit var layoutInflater: LayoutInflater + + private val context = context + private val arr_images = arrayListOf( + R.drawable.ic_launcher_foreground, + R.drawable.ic_launcher_foreground, + R.drawable.water, + R.drawable.text + ) + private val arr_titles = arrayListOf("a", "b", "c", "d") + private val arr_descriptions = arrayListOf("aa", "bb", "cc", "dd") + private val arr_bgColors = arrayListOf( + Color.rgb(55, 55, 55), + Color.rgb(239, 85, 85), + Color.rgb(110, 49, 89), + Color.rgb(1, 118, 212) + ) + + + + override fun isViewFromObject(view: View, `object` : Any): Boolean { + return (view == `object` as LinearLayout) + } + + override fun getCount(): Int { + return arr_images.size + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + layoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater + + val view = layoutInflater.inflate(R.layout.slide, container, false) + val layout = view.findViewById(R.id.ll_slide1) + val image = view.findViewById(R.id.iv_slide) + val title = view.findViewById(R.id.tv_slide_tittle) + val description = view.findViewById(R.id.tv_slide_description) + + layout.setBackgroundColor(arr_bgColors[position]) + image.setImageResource(arr_images[position]) + title.text = arr_titles[position] + description.text = arr_descriptions[position] + container.addView(view) + return view + } + override fun destroyItem(container: ViewGroup, position: Int, `object` : Any) { container.removeView(`object` as LinearLayout) } +} +``` +{% endtab %} + +{% tab title="Styles.xml" %} +```markup + + + + +``` +{% endtab %} + +{% tab title="String.xml" %} +```markup + + IUApp + Bu uygulama da nedir? + +``` +{% endtab %} + +{% tab title="activity\_main" %} +```markup + + + + + + +``` +{% endtab %} + +{% tab title="Slide.xml" %} +```markup + + + + + + + + +``` +{% endtab %} +{% endtabs %} + diff --git a/faydali-bilgiler/karisik-notlar.md b/faydali-bilgiler/karisik-notlar.md index c5ce62c..bb17998 100644 --- a/faydali-bilgiler/karisik-notlar.md +++ b/faydali-bilgiler/karisik-notlar.md @@ -2,7 +2,7 @@ description: "Derlenmemiş, karışık notları barındırır \U0001F625" --- -# 🥴 Karışık Notlar +# 🔗 Karışık Bağlantılar ## 🌍 Faydalı Bağlantılar diff --git a/programlama-notlari/proje-islemleri.md b/faydali-bilgiler/proje-islemleri.md similarity index 87% rename from programlama-notlari/proje-islemleri.md rename to faydali-bilgiler/proje-islemleri.md index 0aba0bd..343b10f 100644 --- a/programlama-notlari/proje-islemleri.md +++ b/faydali-bilgiler/proje-islemleri.md @@ -10,11 +10,11 @@ * Son olarak; Manifestimize girip "package name"i güncelliyoruz. * Artık başarıyla "package name"i güncellemiş olduk. Emin olmak için projenizi Build etmeyi unutmayın :\) -![](../.gitbook/assets/image%20%2815%29.png) +![](../.gitbook/assets/image%20%2817%29.png) -![](../.gitbook/assets/image%20%2816%29.png) +![](../.gitbook/assets/image%20%2818%29.png) -![](../.gitbook/assets/image%20%2811%29.png) +![](../.gitbook/assets/image%20%2813%29.png) -![](../.gitbook/assets/image%20%2814%29.png) +![](../.gitbook/assets/image%20%2816%29.png) diff --git a/programlama-notlari-1/implicit-intents.md b/programlama-notlari-1/implicit-intents.md deleted file mode 100644 index ac32977..0000000 --- a/programlama-notlari-1/implicit-intents.md +++ /dev/null @@ -1,344 +0,0 @@ -# 🏹 Implicit intents - -## ❔ Nedir - -![](../.gitbook/assets/image%20%285%29.png) - -## Create implicit Intent objects - -* `Intent` oluşturmadan önce isteği karşılayabilecek `Activity` var mı kontrol edilmelidir. -* İsteklerini sağlayacak `Activity` olmazsa uygulama kapanır - -```java -// Implicit intent oluşturma -Intent sendIntent= new Intent(); -sendIntent.setAction(Intent.ACTION_SEND); -sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage); -sendIntent.setType("text/plain"); - -// Intent başlığını ayarlama -String title = getResources().getString(R.string.chooser_title); - -// App Chooser oluşturma -Intent chooser = Intent.createChooser(sendIntent, title); - -// İsteği sağlayacak Activity var mı kontrolü -if (sendIntent.resolveActivity(getPackageManager()) != null) { - startActivity(chooser); -} -``` - -### App Chooser - -![](../.gitbook/assets/image%20%2810%29.png) - -## Receiving an implicit Intent - -* `AndroidManifest.xml`dosyasında `intent-filter` ile tanımlanan uygulamalardan biri seçilir -* `intent-filter` 0 veya daha fazla `action`,`category`veya `data` içerir -* `intent-filter` içermeyen `Activity`'ler sadece explicit intent ile çağrılabilir -* Birden fazla `intent-filter` veya bir `intent-filter` için birden fazla `action`, `category` veya `data` tanımlanabilir - -```markup - - - - - - -``` - -```markup - - - - - - - -``` - -### Actions - -* Action yapısı Intent üzerinde `ACTION_` ön eki ile kullanılır - -```markup - - - - - -``` - -### Categories - -* Category yapısı Intent üzerinde `CATEGORY_` ön eki ile kullanılır -* Tüm implicit intent objelerine varsayılan olarak `android.intent.category.DEFAULT` atanır - -```markup - - - - -``` - -### Data - -* Alttaki yapıları vardır - * URI Scheme - * URI Host - * URI Path - * Mime type - -```markup - - - - -``` - -## Sharing data using ShareCompat.IntentBuilder - -* Sosyal ağ uygulamalarında veri paylaşmak için kullanılan yöntemdir -* Implicit intent yerine, Android sunduğu bu yapı daha faydalıdır - -```java -ShareCompat.IntentBuilder - .from(this) // information about the calling activity - .setType(mimeType) // mime type for the data - .setChooserTitle("Share this text with: ") //title for the app chooser - .setText(txt) // intent data - .startChooser(); // send the intent -``` - -## Managing tasks - -* Android'in çalışma yapısı gereği, `Activity`'ler eski açık olanı kullanmak yerine kendileri yeni `Activity` oluştururlar \(Şekil 1\) -* Implicit intent ile açılan `Activity`'ler de, asıl çalışan `Activity`'den bağımsız olarak açılır \(Şekil 2\) - -{% hint style="info" %} -Bu yapı **Android Launch Modes** ile değiştirilebilmektedir. -{% endhint %} - -![](../.gitbook/assets/image%20%283%29.png) - -![](../.gitbook/assets/image.png) - -## Activity launch modes - -`AndroidManifest.xml` dosyası içerisindeki `` alanının değiştirilmesi ile yönetilir - -### Activity attributes - -* Belirtilen `launchMode`değerlerinden biri kullanılır -* Varsayılan olarak `standart` değeri seçilir - -| Launch Mode | Anlamı | -| :--- | :--- | -| `standart` | Android'in varsayılan modu | -| `singleTop` | Activity, stack'te en tepede ise yeni işlerde yeni activity oluşturulmaz | -| `singleTask` | Activity için yeni bir işlem tanımlandığında, işlem yapan activity kullanılır, yeni oluşturulmaz | -| `singleInstance` | Activity yalnızca bir kez oluşturulur | - -```markup - - - -``` - -### Intent flags - -* Activity attributes gibidir, ama çakışma durumunda bayraklar ele alınır -* `setFlag()` ve `getFlag()` ile kullanılır - -| Flag | Launch Mode karşılığı | Anlamı | -| :--- | :--- | :--- | -| [`FLAG_ACTIVITY_NEW_TASK`](https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK) | `singleTask` | İşlem için var olan Activity'i kullanır | -| [`FLAG_ACTIVITY_SINGLE_TOP`](https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_SINGLE_TOP) | `singleTop` | Activity, stack'te en tepede ise yeni işlerde yeni activity oluşturulmaz | -| [`FLAG_ACTIVITY_CLEAR_TOP`](https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP) | | Eğer activity stack'te varsa, onu tepeye alıp, üstündeki her activity'i `destroy` eder. FLAG\_ACTIVITY\_NEW\_TASK ile kullanılırsa activity işlemlerini ön plana taşır | - -### Handle a new Intent - -* Genellikle `onResume()`'den sonra çalışır -* `getIntent()` metodu her zaman, `Activity`'nin kendi `intent`'ini döndürdüğünden bu yapı kullanılır -* `setIntent()` ile Activity intent'i değiştirilir - -```java -@Override -public void onNewIntent(Intent intent) { - super.onNewIntent(intent); - // Use the new intent, not the original one - setIntent(intent); -} -``` - -## Create implicit Intent objects - -* `Intent` oluşturmadan önce isteği karşılayabilecek `Activity` var mı kontrol edilmelidir. -* İsteklerini sağlayacak `Activity` olmazsa uygulama kapanır - -```java -// Implicit intent oluşturma -Intent sendIntent= new Intent(); -sendIntent.setAction(Intent.ACTION_SEND); -sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage); -sendIntent.setType("text/plain"); - -// Intent başlığını ayarlama -String title = getResources().getString(R.string.chooser_title); - -// App Chooser oluşturma -Intent chooser = Intent.createChooser(sendIntent, title); - -// İsteği sağlayacak Activity var mı kontrolü -if (sendIntent.resolveActivity(getPackageManager()) != null) { - startActivity(chooser); -} -``` - -### App Chooser - -## Receiving an implicit Intent - -* `AndroidManifest.xml`dosyasında `intent-filter` ile tanımlanan uygulamalardan biri seçilir -* `intent-filter` 0 veya daha fazla `action`,`category`veya `data` içerir -* `intent-filter` içermeyen `Activity`'ler sadece explicit intent ile çağrılabilir -* Birden fazla `intent-filter` veya bir `intent-filter` için birden fazla `action`, `category` veya `data` tanımlanabilir - -```markup - - - - - - -``` - -```markup - - - - - - - -``` - -### Actions - -* Action yapısı Intent üzerinde `ACTION_` ön eki ile kullanılır - -```markup - - - - - -``` - -### Categories - -* Category yapısı Intent üzerinde `CATEGORY_` ön eki ile kullanılır -* Tüm implicit intent objelerine varsayılan olarak `android.intent.category.DEFAULT` atanır - -```markup - - - - -``` - -### Data - -* Alttaki yapıları vardır - * URI Scheme - * URI Host - * URI Path - * Mime type - -```markup - - - - -``` - -## Sharing data using ShareCompat.IntentBuilder - -* Sosyal ağ uygulamalarında veri paylaşmak için kullanılan yöntemdir -* Implicit intent yerine, Android sunduğu bu yapı daha faydalıdır - -```java -ShareCompat.IntentBuilder - .from(this) // information about the calling activity - .setType(mimeType) // mime type for the data - .setChooserTitle("Share this text with: ") //title for the app chooser - .setText(txt) // intent data - .startChooser(); // send the intent -``` - -## Managing tasks - -* Android'in çalışma yapısı gereği, `Activity`'ler eski açık olanı kullanmak yerine kendileri yeni `Activity` oluştururlar \(Şekil 1\) -* Implicit intent ile açılan `Activity`'ler de, asıl çalışan `Activity`'den bağımsız olarak açılır \(Şekil 2\) - -{% hint style="info" %} -Bu yapı **Android Launch Modes** ile değiştirilebilmektedir. -{% endhint %} - -## Activity launch modes - -`AndroidManifest.xml` dosyası içerisindeki `` alanının değiştirilmesi ile yönetilir - -### Activity attributes - -* Belirtilen `launchMode`değerlerinden biri kullanılır -* Varsayılan olarak `standart` değeri seçilir - -| Launch Mode | Anlamı | -| :--- | :--- | -| `standart` | Android'in varsayılan modu | -| `singleTop` | Activity, stack'te en tepede ise yeni işlerde yeni activity oluşturulmaz | -| `singleTask` | Activity için yeni bir işlem tanımlandığında, işlem yapan activity kullanılır, yeni oluşturulmaz | -| `singleInstance` | Activity yalnızca bir kez oluşturulur | - -```markup - - - -``` - -### Intent flags - -* Activity attributes gibidir, ama çakışma durumunda bayraklar ele alınır -* `setFlag()` ve `getFlag()` ile kullanılır - -| Flag | Launch Mode karşılığı | Anlamı | -| :--- | :--- | :--- | -| [`FLAG_ACTIVITY_NEW_TASK`](https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK) | `singleTask` | İşlem için var olan Activity'i kullanır | -| [`FLAG_ACTIVITY_SINGLE_TOP`](https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_SINGLE_TOP) | `singleTop` | Activity, stack'te en tepede ise yeni işlerde yeni activity oluşturulmaz | -| [`FLAG_ACTIVITY_CLEAR_TOP`](https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP) | | Eğer activity stack'te varsa, onu tepeye alıp, üstündeki her activity'i `destroy` eder. FLAG\_ACTIVITY\_NEW\_TASK ile kullanılırsa activity işlemlerini ön plana taşır | - -### Handle a new Intent - -* Genellikle `onResume()`'den sonra çalışır -* `getIntent()` metodu her zaman, `Activity`'nin kendi `intent`'ini döndürdüğünden bu yapı kullanılır -* `setIntent()` ile Activity intent'i değiştirilir - -```java -@Override -public void onNewIntent(Intent intent) { - super.onNewIntent(intent); - // Use the new intent, not the original one - setIntent(intent); -} -``` - diff --git a/programlama-notlari/activity-notlari.md b/programlama-notlari/activity-notlari.md deleted file mode 100644 index 806b3fb..0000000 --- a/programlama-notlari/activity-notlari.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -description: >- - Android üzerinde her sayfa activity olarak adlandırılır, burada da onlar - hakkında bilgilere yer verilecektir. ---- - -# 📃 Activity Notları - -## 🚶‍♂️ Gecikmeli Activity Başlatma - -```text -Handler().postDelayed({ startActivity(Intent(this, SnakeActivity1::class.java)) -}, 400) -``` - -## 🌃 Arka planda Çalıştırma - -```text -override fun onCreate(savedInstanceState: Bundle?) { - // Arkaplanda çalıştırma - moveTaskToBack(true) - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_share) - - ... -} -``` - -## 🧹 Bütün Eski Activity'leri Sonlandırıp Yeni Activity Açma - -```text -val intent = Intent(this, MainActivity::class.java) -intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK // Tüm işlemleri bitirme -finish() // İşlemi sonlandırma -startActivity(intent) -``` - diff --git a/temel-kavramlar/README.md b/temel-kavramlar/README.md new file mode 100644 index 0000000..7968f8e --- /dev/null +++ b/temel-kavramlar/README.md @@ -0,0 +1,2 @@ +# 🧱 Temel Kavramlar + diff --git a/programlama-notlari-1/activity-lifecycle-and-state.md b/temel-kavramlar/activity-lifecycle-and-state.md similarity index 84% rename from programlama-notlari-1/activity-lifecycle-and-state.md rename to temel-kavramlar/activity-lifecycle-and-state.md index a1954dd..45226ca 100644 --- a/programlama-notlari-1/activity-lifecycle-and-state.md +++ b/temel-kavramlar/activity-lifecycle-and-state.md @@ -1,10 +1,10 @@ -# 💫 Activity lifecycle and state +# 💫 Activity Yaşam Döngüsü -## Activity states and lifecycle callback methods +## 🔄 Activity Yaşam Döngüsü -![](../.gitbook/assets/image%20%2823%29.png) +![](../.gitbook/assets/image%20%2825%29.png) -### Temel Kullanım +## 🧱 Metot Prototipi ```java @Override @@ -14,7 +14,9 @@ public void onCreate(Bundle savedInstanceState) { } ``` -## Saving Activity instance state +## 💾 Uygulama Verilerini Koruma + +`Activity`'deki `InstanceState` yapısı ile veriler geçici olarak saklanır * Lifecycle metodlarından değildir * Kullanıcı `Activity`'den ayrılıken çağırılır. @@ -31,7 +33,7 @@ public void onSaveInstanceState(Bundle savedInstanceState) { } ``` -### Restoring Activity instance state +## 🔙 Verileri Geri Alma * Kaydedilen `Bundle` verileri `onCreate()` callback metodunda kullanılmakta * `Activity` oluşturulduktan sonra çalışan `onStart()` metodunun ardından çalışan `onRestoreInstanceState()`callback metodunda da kullanılabilir diff --git a/programlama-notlari-1/activity-ve-intentler.md b/temel-kavramlar/activity-ve-intentler.md similarity index 71% rename from programlama-notlari-1/activity-ve-intentler.md rename to temel-kavramlar/activity-ve-intentler.md index 4aebc7d..3208760 100644 --- a/programlama-notlari-1/activity-ve-intentler.md +++ b/temel-kavramlar/activity-ve-intentler.md @@ -1,10 +1,9 @@ # ⏩ Activity ve Intent'ler -## Create the Activity +## ✨ Activity Oluşturma -When you create a new project in Android Studio and choose the **Backwards Compatibility \(AppCompat\)** option, the `MainActivity` is, by default, a subclass of the [`AppCompatActivity`](https://developer.android.com/reference/android/support/v7/app/AppCompatActivity.html) class. The `AppCompatActivity` class lets you use up-to-date Android app features such as the app bar and Material Design, while still enabling your app to be compatible with devices running older versions of Android. - -Here is a skeleton subclass of `AppCompatActivity`: +* Normal olarak **Activity** class'ı extend edilir +* Eski sürümleri desteklemek için **AppCompat** class'ı extend edilir ```java public class MainActivity extends AppCompatActivity { @@ -16,7 +15,9 @@ public class MainActivity extends AppCompatActivity { } ``` -### 📑 Declare the Activity in AndroidManifest.xml +## 📑 Activity Tanımlama + +Activity `AndroidManifest.xml` dosyasına aşağıdaki gibi tanıtılmalıdır ```java @@ -27,17 +28,24 @@ public class MainActivity extends AppCompatActivity { ``` -## ⏫ Starting an Activity with an explicit Intent +## ⏫ Explicit Intent ile Activity Başlatma -Yeni aktivity oluşturulduğunda eskisi **Paused** olur +Yeni `Activity` oluşturulduğunda eskisi **paused** olur ```java Intent messageIntent = new Intent(this, ShowMessageActivity.class); startActivity(messageIntent); ``` -## 💾 Add data to the Intent +{% tabs %} +{% tab title="🎈 Basit Kullanım" %} +```java +Intent messageIntent = new Intent(this, ShowMessageActivity.class); +startActivity(messageIntent); +``` +{% endtab %} +{% tab title="Data Ekleme" %} ```java Intent messageIntent = new Intent(this, ShowMessageActivity.class); // A web page URL @@ -51,9 +59,9 @@ messageIntent.setData(Uri.parse("custom:" + dataID + buttonId)); startActivity(messageIntent); ``` +{% endtab %} -### Add extras to the Intent - +{% tab title="Extras Ekleme" %} ```java Intent messageIntent = new Intent(this, ShowMessageActivity.class); @@ -72,8 +80,28 @@ messageIntent.putExtras(extras); startActivity(messageIntent); ``` +{% endtab %} + +{% tab title="👨‍💻 " %} +```java +Intent intent = getIntent(); + +// Data alma +Uri locationUri = intent.getData(); + +// Extra alma +String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); +int positionX = intent.getIntExtra(MainActivity.EXTRA_POSITION_X); +int positionY = intent.getIntExtra(MainActivity.EXTRA_POSITION_Y); + +// Bundle alma +Bundle extras = intent.getExtras(); +String message = extras.getString(MainActivity.EXTRA_MESSAGE); +``` +{% endtab %} +{% endtabs %} -### Retrieve the data from the Intent in the started Activity +## 🔙 Başlatılan Activity Üzerinden Intent Verilerini Alma ```java Intent intent = getIntent(); @@ -91,9 +119,9 @@ Bundle extras = intent.getExtras(); String message = extras.getString(MainActivity.EXTRA_MESSAGE); ``` -## 🔙 Getting data back from an Activity +## 🔙 Intent Verilerini Eski Activity'e Aktarma -### Use startActivityForResult\(\) to launch the Activity +### 🎈 Activity'i `startActivityForResult()` ile Başlatma ```java startActivityForResult(messageIntent, TEXT_REQUEST); @@ -104,7 +132,7 @@ public static final int PHOTO_PICK_REQUEST = 2; public static final int TEXT_REQUEST = 3; ``` -### Return a response from the launched Activity +### 🖐 Başlatılan Activity'den Sonucu Alma ```java Intent returnIntent = new Intent(); @@ -120,11 +148,12 @@ finish(); ``` {% hint style="warning" %} -To avoid confusing sent data with returned data, use a new `Intent` object rather than reusing the original sending `Intent` object. +Gönderilen ve alınan verilerin karışmaması için yeni Intent oluşturarak `new Intent()` işlemler yapın {% endhint %} -### Read response data in onActivityResult\(\) +### 👀 Sonuç Verisini Okuma +* `onActivityResult()` yapısından gelen veriyi işleyerek sonucu ele alırız * Aktivity'den yanıt geldiğinde çalışır ```java @@ -177,6 +206,6 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { ``` {% hint style="info" %} -To support older versions of Android, include `` information to define the parent `Activity` explicitly +Eski android sürümlerini desteklemek için `` yapısı kullanılır {% endhint %} diff --git a/programlama-notlari/component-isimleri.md b/temel-kavramlar/component-isimleri.md similarity index 91% rename from programlama-notlari/component-isimleri.md rename to temel-kavramlar/component-isimleri.md index c8bd983..a233193 100644 --- a/programlama-notlari/component-isimleri.md +++ b/temel-kavramlar/component-isimleri.md @@ -23,11 +23,11 @@ In the figure above: ## ⚫ Progress Bar -![](../.gitbook/assets/image%20%2813%29.png) +![](../.gitbook/assets/image%20%2815%29.png) ## 🔀 Navigation Bar -![](../.gitbook/assets/image%20%2820%29.png) +![](../.gitbook/assets/image%20%2822%29.png) ## 🕎 Navigation View @@ -35,5 +35,5 @@ In the figure above: ## 💬 Alert Dialog -![](../.gitbook/assets/image%20%2821%29.png) +![](../.gitbook/assets/image%20%2823%29.png) diff --git a/temel-kavramlar/implicit-intents.md b/temel-kavramlar/implicit-intents.md new file mode 100644 index 0000000..b6fe158 --- /dev/null +++ b/temel-kavramlar/implicit-intents.md @@ -0,0 +1,191 @@ +# 🏹 Implicit intents + +## 🎯 Hangi Amaçla Kullanılır + +İşletim sistemi tarafından yönetilen isteklerdir + +* Hangi uygulamanın çalıştırılacağına işletim sistemi karar verir +* Diğer uygulamalara istekte bulunmayı sağlar +* [✅ App Chooser](implicit-intents.md#app-chooser) adı verilen yapı ile kullanıcıya seçim hakkı tanınır + +![](../.gitbook/assets/image%20%285%29.png) + +## ✅ App Chooser + +![](../.gitbook/assets/image%20%2812%29.png) + +## + +## ✨ Implicit Intent Oluşturma + +* `Intent` oluşturmadan önce isteği karşılayabilecek `Activity` var mı kontrol edilmelidir. +* İsteklerini sağlayacak `Activity` olmazsa uygulama kapanır + +```java +// Implicit intent oluşturma +Intent sendIntent= new Intent(); +sendIntent.setAction(Intent.ACTION_SEND); +sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage); +sendIntent.setType("text/plain"); + +// Intent başlığını ayarlama +String title = getResources().getString(R.string.chooser_title); + +// App Chooser oluşturma +Intent chooser = Intent.createChooser(sendIntent, title); + +// İsteği sağlayacak Activity var mı kontrolü +if (sendIntent.resolveActivity(getPackageManager()) != null) { + startActivity(chooser); +} +``` + +## 🔛 Implicit Intent Alma + +* `AndroidManifest.xml`dosyasında `intent-filter` ile tanımlanan uygulamalardan biri seçilir +* `intent-filter` 0 veya daha fazla `action`,`category`veya `data` içerir +* `intent-filter` içermeyen `Activity`'ler sadece explicit intent ile çağrılabilir +* Birden fazla `intent-filter` veya bir `intent-filter` için birden fazla `action`, `category` veya `data` tanımlanabilir + +```markup + + + + + + +``` + +```markup + + + + + + + +``` + +{% tabs %} +{% tab title="Actions" %} +* Action yapısı Intent üzerinde `ACTION_` ön eki ile kullanılır + +```markup + + + + + +``` +{% endtab %} + +{% tab title="Categories" %} +* Category yapısı Intent üzerinde `CATEGORY_` ön eki ile kullanılır +* Tüm implicit intent objelerine varsayılan olarak `android.intent.category.DEFAULT` atanır + +```markup + + + + +``` +{% endtab %} + +{% tab title="Data" %} +Alttaki yapıları vardır + +* URI Scheme +* URI Host +* URI Path +* Mime type + +```markup + + + + +``` +{% endtab %} +{% endtabs %} + +## 🔀 `ShareCompat.IntentBuilder` ile Veri Paylaşma + +* Sosyal ağ uygulamalarında veri paylaşmak için kullanılan yöntemdir +* Implicit intent yerine, Android sunduğu bu yapı daha faydalıdır + +```java +ShareCompat.IntentBuilder + .from(this) // information about the calling activity + .setType(mimeType) // mime type for the data + .setChooserTitle("Share this text with: ") //title for the app chooser + .setText(txt) // intent data + .startChooser(); // send the intent +``` + +## 👨‍💼 Görevleri Yönetme + +* Android'in çalışma yapısı gereği, `Activity`'ler eski açık olanı kullanmak yerine kendileri yeni `Activity` oluştururlar \(Şekil 1\) +* Implicit intent ile açılan `Activity`'ler de, asıl çalışan `Activity`'den bağımsız olarak açılır \(Şekil 2\) + +{% hint style="info" %} +Bu yapı **Android Launch Modes** ile değiştirilebilmektedir. +{% endhint %} + +![](../.gitbook/assets/image%20%283%29.png) + +![](../.gitbook/assets/image.png) + +## 🏁 Activity launch modes + +`AndroidManifest.xml` dosyası içerisindeki `` alanının değiştirilmesi ile yönetilir + +### 💠 Activity Özellikleri + +* Belirtilen `launchMode`değerlerinden biri kullanılır +* Varsayılan olarak `standart` değeri seçilir + +| Launch Mode | Anlamı | +| :--- | :--- | +| `standart` | Android'in varsayılan modu | +| `singleTop` | Activity, stack'te en tepede ise yeni işlerde yeni activity oluşturulmaz | +| `singleTask` | Activity için yeni bir işlem tanımlandığında, işlem yapan activity kullanılır, yeni oluşturulmaz | +| `singleInstance` | Activity yalnızca bir kez oluşturulur | + +```markup + + + +``` + +### 🏴 Intent flags + +* Activity attributes gibidir, ama çakışma durumunda bayraklar ele alınır +* `setFlag()` ve `getFlag()` ile kullanılır + +| Flag | Launch Mode karşılığı | Anlamı | +| :--- | :--- | :--- | +| [`FLAG_ACTIVITY_NEW_TASK`](https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK) | `singleTask` | İşlem için var olan Activity'i kullanır | +| [`FLAG_ACTIVITY_SINGLE_TOP`](https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_SINGLE_TOP) | `singleTop` | Activity, stack'te en tepede ise yeni işlerde yeni activity oluşturulmaz | +| [`FLAG_ACTIVITY_CLEAR_TOP`](https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP) | | Eğer activity stack'te varsa, onu tepeye alıp, üstündeki her activity'i `destroy` eder. FLAG\_ACTIVITY\_NEW\_TASK ile kullanılırsa activity işlemlerini ön plana taşır | + +### ‍👨‍💼 Yeni Intent Oluşumunu Yönetme + +* Genellikle `onResume()`'den sonra çalışır +* `getIntent()` metodu her zaman, `Activity`'nin kendi `intent`'ini döndürdüğünden bu yapı kullanılır +* `setIntent()` ile Activity intent'i değiştirilir + +```java +@Override +public void onNewIntent(Intent intent) { + super.onNewIntent(intent); + // Use the new intent, not the original one + setIntent(intent); +} +``` + + + diff --git a/programlama-notlari/veri-saklama-yoentemleri.md b/veri-saklama-yoentemleri.md similarity index 100% rename from programlama-notlari/veri-saklama-yoentemleri.md rename to veri-saklama-yoentemleri.md