24 Kasım 2016 Perşembe

SQL SERVER’DA BİR DATABASE’İN BOYUTUNU ÖĞRENMEK

Microsoft Sql Server’da bir veritabanının kapladığı alanı öğrenmek için sp_helpdb prosedürünü kullanabilirsiniz.
use [veritabani_adi]
exec sp_helpdb 'veritabani_adi'

4 Kasım 2016 Cuma

Android Dersleri -6-

Activity Lifecycle Yönetmek

       Bir kullanıcı uygulamanızda gezinirken, dışına çıktığında ya tekrar uygulamanıza geri döndiğinde, Activity  farklı durumlar arasında geçişler yapar.Örneğin; aktivity ilk defa çalıştığında, sistemin ön plana geliyor ve kullanıcıya odaklanıyor. Bu işlem sırasında, Android system kullanıcı arayüzü ve diğer bileşenler ayarlanmış activiy üzerinde bir seri lifecycle metodları çağırır.Eğer kullanıcı başka bir activity ve ya başka bir uygulama başlatırsa, sistem arka taraftan activty üzerinde başka bir lifecycle metodlarını çağırır.
     Activity’lerinde kullanıcı ayrıldığında ve tekrar giriş yaptığında  lifecycle callback metodları içerisinde activity’lerin nasıl davranması gerektiğini tanımlayabiliriz.Örneğin, Eğer bir video oynactıcı  yapıyorsanız, kullanıcı başka bir uygulumaya geçtiğinde bekletmeniz ve son vermeniz gerekebilir. Kullanıcı tekrardan programınıza döndüğünde, tekrardan ağa bağlanabilir ve kaldığı yerden video izlemesine izin verebilirsiniz.Bu sınıf bize önemli bir lifcycle motdunu açıklıyor ki her activtiy alır ve kullanıcının isteklerine göre çalıştırır ve ihtiyaç duyulmadığında sistem kaynaklarını ziyan etmez.

Bir Activity’i Başlatmak


     Bir main() metodu ile çalışan diğer programların aksine Andorid sistemi, lifecycle’da özel callback metodlarını çağırarak Activity instance başlatır. Callback dizisi metodlarını çağırır ki bu dizede, bir akitiviteyi başlatır ve başka bir aktiviteyi alaşağı edilir.
     Bu ders en önemli yaşam döngüsü yöntemleri genel bir bakış sağlar ve size aktivite yeni bir örneğini oluşturur ve lifecycle Callback’ın nasıl işleneceğini gösterir.


Lifecycle Callback ‘i Anlama



Android sistemi yeni bir activity instance başlattığında, her callback metodu aşağıdaki resimdeki gibi hareket eder.En üsteki piramid ön planda çalışan activity’dir ve kullanıcılar bununla etkileşime girer.

     
     Muhtemelen lifecycle metotlarını eklememiz gerekmeyecek. Lifecycle metotlarını uygulamak, uygulamamızın karşılaştığı durumlar çok fazla bir hareket noktası sağlar.

Örneğin:
·         -Uygulamayı kullanırken başka bir uygulamaya geçildiğinde ve ya telefon çaldığında programı olağan dışı sonlandırmasını engelleme
·         -Kullanıcı uygulamayı aktif olarak kullanmıyorsa, sistem kaynaklarını kullanmayı bırakma
·         -Kullanıcı uygulamadan ayrıldığında ve bir zaman sonra tekrar geri döndüğünde, kullanıcının yapmış olduğu işlemi kaybetme
·          
      Ekran Yatay ve dikey doğrultu arasında döndüğünde , programı kapatma ve kullanıcının yapmış olduğu işlemleri kaybetme

Resumed
   Bu durumda, etkinlik ön planda olduğu ve kullanıcı onunla etkileşime girebilir.

Paused
   Bu durumda, etkinliği kısmen yarı saydamdır veya tüm ekranı kaplamaz. Başka bir aktivite diğer aktivite ile örtülüdür. Duraklatılmış etkinlik kullanıcı girişi almaz ve herhangi bir kod yürütmesine olamaz.

Stopped
   Bu durumda, etkinlik tamamen gizli ve kullanıcıya görünür değildir; arka planda olduğu düşünülmektedir. durdurulmuş olsa da, bu tür üye değişkenleri olarak faaliyet örneği ve tüm durum bilgisi korunur, ancak herhangi bir kod yürütmesine olamaz.

Uygulamanız için Başlama Activity Belirleme

Kullanıcı ana ekrandan uygulamamızı  seçtiğinde,  sistem uygulamanızdaki  Activity  için onCreate()  metodu çalıştırır. Bu uygulamanızın kullanıcı arayüzüne ana giriş noktası olarak hizmet veren bir aktivitedir.
    
      Android manifest dosyasında  başlangıç aktiviteyi tanımlayabilirsiniz.Örneğin AndroidManifest.xml aşağıdaki gibidir.

<activity android:name=".MainActivity" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
Yeni bir Instance Oluşturma
    Çok fazla uygulamada kullanıcılar farklı eylemleri gerçekleştirmek için izin vermektedir.Kullanıcıların durumlarına göre ana aktivity’de  değişiklikler yapılmaktadır.Bunun için  Activity de,   onCreate()  metodu kullanılmaktadır.Örneğin ana activiy aşağıdaki şekilde değiştiriyoruz.

package com.example.mypc.myfirstapp;

import android.app.ActionBar;

import android.content.Intent;

import android.os.Build;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;


public class MainActivity extends AppCompatActivity {

    public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";

    TextView mTextView; // Member variable for text view in the layout

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // Set the user interface layout for this Activity
        // The layout file is defined in the project res/layout/main_activity.xml file
        setContentView(R.layout.activity_main);

        // Initialize member TextView so we can manipulate it later

        mTextView = (TextView) findViewById(R.id.edit_message);

        // Make sure we're running on Honeycomb or higher to use ActionBar APIs
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

            // For the main activity, make sure the app icon in the action bar

            // does not behave as a button

            ActionBar actionBar = getActionBar();

            actionBar.setHomeButtonEnabled(false);

        }

    }

    /** Called when the user clicks the Send button */
    public void sendMessage(View view) {

        Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText editText = (EditText) findViewById(R.id.edit_message);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);

    }

}


Activitiy kaldırma

onCreate() metodu ile lifcycle başlar, son çağrı ise onDestroy() metodudur.


@Override
public void onDestroy() {
    super.onDestroy();  // Always call the superclass

    // Stop method tracing that the activity started during onCreate()
    android.os.Debug.stopMethodTracing();
}
 onDestroy()  metodu çağrıldığında onPause()  ve onStop()  metodları zaten çağrılmış oluyor.

29 Eylül 2016 Perşembe

Android Dersleri -5-

Farklı Cihazlarda Destek

Android cihazlar bütün dünyada çok fazla şekil ve boyutları içermektedir.Başarılı Android uygulamaları geliştirmek için farklı cihaz ayarlarına adapte edilmesi gerekmektedir.Farklı diller, ekran boyutları ve versiyonları dikkate almanız gerekmektedir.

 

Farklı Diller Desteği

En iyi yöntem farklı diller için farklı dosyalarda tutumak
MyProject/
    res/
       values/
           strings.xml
       values-es/
           strings.xml
       values-fr/
           strings.xml
English (default locale), /values/strings.xml:
<?xml version="1.0" encoding="utf-8"?>

<resources>

    <string name="title">My Application</string>

    <string name="hello_world">Hello World!</string>

</resources>
Spanish, /values-es/strings.xml:
<?xml version="1.0" encoding="utf-8"?>

<resources>

    <string name="title">Mi Aplicación</string>

    <string name="hello_world">Hola Mundo!</string>

</resources>
French, /values-fr/strings.xml:
<?xml version="1.0" encoding="utf-8"?>

<resources>

    <string name="title">Mon Application</string>

    <string name="hello_world">Bonjour le monde !</string>

</resources>

Farklı Ekranlarda Destek

Android, aygıt ekranları  iki genel özelliklerini kullanarak sınıflandırır: büyüklüğü ve yoğunluğu
·         Dört genelleştirilmiş boyutları vardır : small, normal, large, xlarge
·         Ve dört genelleştirilmiş yoğunlukları: low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)
Farklı layout ve farklı bitmap tanımlamak için ayrı dizinlerde bu alternatif kaynakların yerleştirmeniz gerekir.

Farklı Layouts Ekleme
Farklı ekran boyutları üzerinde kullanıcı deneyimini optimize etmek için, desteklemek istediğiniz her ekran boyutu için benzersiz bir düzen XML dosyası oluşturmanız gerekir.
MyProject/
    res/
        layout/
            main.xml
        layout-large/
            main.xml
Dosya adları aynı olmalıdır, ancak içerikleri ilgili ekran boyutu için optimize edilmiş bir kullanıcı arayüzü sağlamak için farklıdır.
@Override

 protected void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);

     setContentView(R.layout.main);

}
Eğer büyük ekranlarda özel bir düzen sağlamak istiyorsanız, o zaman hem large ve hem de land qualifier kullanmanız gerekir.
MyProject/
    res/
        layout/              # default (portrait)
            main.xml
        layout-land/         # landscape
            main.xml
        layout-large/        # large (portrait)
            main.xml
        layout-large-land/   # large landscape
            main.xml
Farklı Bitmaps

her zaman düzgün genelleştirilmiş yoğunluk kovalar her ölçeklendirilir bitmap kaynakları sağlamalıdır: low, medium, high and extra-high density. 
Bu tüm ekran yoğunlukları iyi grafik kalitesi ve performansı elde etmesine yardımcı olur.
MyProject/
    res/
        drawable-xhdpi/
            awesomeimage.png
        drawable-hdpi/
            awesomeimage.png
        drawable-mdpi/
            awesomeimage.png
        drawable-ldpi/
            awesomeimage.png

Farklı Platform Versiyon Desteği      

Her zaman düzgün genelleştirilmiş yoğunluk kovalar her ölçeklendirilir bitmap kaynakları sağlamalıdır: low, medium, high and extra-high density. 
Android'in son sürümleri genellikle app için büyük API'leri sağlarken, daha fazla cihaz güncellenecektir kadar Android'in eski sürümlerini desteklemeye devam etmelidir. Bu ders aynı zamanda eski sürümlerini desteklemeye devam ederken son API'leri için nasıl yararlanacağını gösterir.

 

En düşük ve hedef API Seviyeleri belirtin

 AndroidManifest.xml dosyası uygulama ilgili ayrıntıları açıklar ve desteklediği Android hangi sürümleri tanımlar

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >

    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />

    ...

</manifest>

Runtime Sistem Versiyonu Kontrol Etmek

Android Derlemesi sabitleri sınıfta her platform sürümü için benzersiz bir kod sağlar. Bu API'ler sistemde mevcuttur sadece çalıştırılan yüksek API seviyelerine bağlıdır kod sağlamak koşulları oluşturmak için uygulaması içinde bu kodları kullanın.

private void setUpActionBar() {

    // Make sure we're running on Honeycomb or higher to use ActionBar APIs

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

        ActionBar actionBar = getActionBar();

        actionBar.setDisplayHomeAsUpEnabled(true);

    }

}
Styles ve Temalar

dialog box:
<activity android:theme="@android:style/Theme.Dialog">
transparent background:
<activity android:theme="@android:style/Theme.Translucent">
Kendi tanımladığınız temalar için /res/values/styles.xml:
<activity android:theme="@style/CustomTheme">
Bütün programa uygulamak için
<application android:theme="@style/CustomTheme">


 

Android Dersleri -4-


Basit Kullanıcı Arayüzü Yapmak

Bu dersimizde XML dosyamıza bir tane text field ve buton ekleyeceğiz.

Android'te arayüzü View ve ViewGroup'ların hiyerarşileri ile inşa ederiz.View objeleri sıklıkla kullandığımız text fields ve butonlardır.ViewGroup'ları ise görünmeyen bileşenlerdir ki ona bağlı olan nesnleşeri nasıl bağlacağını ortaya koyar, grid ya da vertical list gibi.

Biz bu dersimizde Linear Layout üzerinde çalışacağız.

Bir Linear Layout oluşturmak

1.Project penceresinden app > res > layout > activity_main.xml.
Bu XML aktivitelerin düzenlerini tanımlar ve içinde "Hello World" yazan text view içerir.
2.Yazılı herşeyi silelim ve aşağıdaki kodu ekleyelim.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
</LinearLayout>
LinearLayout bir view gruptur (Aynı zamanda View Group'un alt sınıfıdır) yatay ve dikey olarak ayarlanabilir.
Bileşenleri tanıyalım:
android:layout_width : Genişliği ayarlar android:layout_height : Yüksekliği ayarlar
match_parent kullanıldığında bağlı bulunduğu view'e göre kendisini otomatik olarak ayarlar
"match_parent" kullanıldığında bağlı bulunduğu view'e göre kendisini otomatik olarak ayarlar

Text Field Eklemek


<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <EditText android:id="@+id/edit_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="@string/edit_message" />
</LinearLayout>


Bileşenleri Tanıyalım:

android:id : View için tekil bir Id sağlar.Kod tarafında bu Id kullanarak bileşende okuma ya da düzenleme yapabiliriz.@ işareti ise herhangi bir objeyi XML dosyasından okumak istediğimizde kullanırız.edit_message olduğu gibi. (+) işareti ise ID ilk defa tanımladığımızda gerekmektedir.Proje compile olduğunda ID R.java dosyasına oluşturulur ve EditText elementini temsil eder.

android:layout_width :
 android:layout_height:
"wrap_content" değer görünümün içeriğini uydurmaya ihtiyaç duyduğu gibi görünüm yalnızca kadar büyük olması gerektiğini belirtir."match_parent" bunu yukarıda açıklamıştık.

android:hint: Bu metin alanı boş olduğunda görüntülemek için varsayılan bir dizedir."@string/edit_message"  değer ayrı bir dosyada tanımlanan bir dize kaynağı anlamına gelir

String Resources Ekleme

  1. Project penceresinden, res > values > strings.xml. açalım.
  2. Aşağıdaki gibi Ekleyelim

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">My First App</string>
    <string name="edit_message">Enter a message</string>
    <string name="button_send">Send</string>
</resources>

 Button Ekleme

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
        <EditText android:id="@+id/edit_message"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:hint="@string/edit_message" />
        <Button
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@string/button_send" />
</LinearLayout>

Çalıştıralım.
EditText'i Ekran'a sığdırmak için  activity_main.xml dosyasındaki alanı


<EditText android:id="@+id/edit_message"
    android:layout_weight="1"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:hint="@string/edit_message" />
şeklinde değiştiriyoruz.Çalıştıralım sonrasında;

Send Button'a Bir Event Ekleyelim

<Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/button_send"
      android:onClick="sendMessage" />
nde Buton'a tıklandığında sendMessage() metodu çalışacak.
 java > com.example.myfirstapp > MainActivity.java
açalım ve aşağıdaki gibi ekleyelim.

package com.example.mypc.myfirstapp;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /** Called when the user clicks the Send button */    public void sendMessage(View view) {
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText editText = (EditText) findViewById(R.id.edit_message);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }
}

Intent objesi çalışan iki ayrı bileşeni ayrı bileşenler arasındaki bağlanmayı sağlayan bir nesnedir

İkinci Activity Oluşturma

  1.  Project penceresinden ,  app seçip  New > Activity > Empty Activity.
  2.  Configure Activity penceresinden "DisplayMessageActivity" Activity Name girip Finish tıklayın

 DisplayMessageActivity.java aşağıdaki şekilde olması gerekmektedir.

package com.example.mypc.myfirstapp;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /** Called when the user clicks the Send button */    public void sendMessage(View view) {
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText editText = (EditText) findViewById(R.id.edit_message);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }
}

Nesneleri açıklayalım:
 putExtra() metodu EditText' değerini diğer intent'e taşır.EXTRA_MESSAGE public bir değişen olduğundan farklı intentlerde anahtar olarak kullanılır.
startActivity() metodu DisplayMessageActivity  sınıfını bir örneğini başlatır.
getIntent() metodu faaliyete başlamış Intent yakalar. Her Activity bir Intent taradından çağırır. 
getStringExtra() ilk faaliyetten gelen verileri alır.
Şimdi Çalıştıralım.
Evet istediğimiz şekilde çalıştı.Bir diğer derste görüşmek dileğiyle...