29 Eylül 2016 Perşembe

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...

Android Dersleri -3-

Önceki dersimizde hatırlacağımız üzere;
burada kalmıştık.

Burada iki farklı şekilde programımızı çalıştırabiliriz.
1- Bağlı bir Android cihazla (4.2 üzeri olacak sürümü)
2-Emulatör yardımıyla

İlk önce Emulatör üzerinden çalıştıralım sonra farklı android cihazlarda çalıştırmayı dersin sonuna eklerim.

Tools > Android > AVD Manager seçelim
Create Virtual Device tıklayalım
Nexus 6 seçelim ve Next'e tıklayalım
Next diyelim
Finish diyelim


Yeni eklediğimiz Nexus 6 seçerek devam edelim.

Açılımı Intel® Hardware Accelerated Execution Manager (Intel® HAXM). Biraz makale okuduğumda bunun performansı artırması bakımından yüklenilmesi tavsiye ediliyor.Daha ilk uygulamamız olduğundan karışık işlere girmeyelim.OK'e basıp devam edelim.
Next Diyelim.
Finish Quantum diyelim :)
Evet hata aldık.Türkçesi BIOS'da kayıtlı bazı özellikleri açmamız gerekiyor.Bilgisayar markalarından BIOS ayarları değişkenlik göstersede hepsini mantığı hemen hemen aynı.
BIOS ayarlarımız bu halde iken;

Sonrasında kaydedelim.
Evet aynen bu değişikliği istiyoruz.Sonra bilgisayarımızı açıp.Android Studio uygulamasını açıp, aşağıdaki resimde sarı ile işaretlediğim kısma basıyoruz.
Seçili olandan devam ediyoruz
İlk uygulamamız çalıştı.Ekran Görüntüsü ise;
Umarım keyif almışınızdır.Ben ilk çalıştırdığımda çok sevinmiştim :).

Sorularınız varsa yorum olarak bırakabilirsiniz.Diğer derslerde görüşmek dileğiyle...











28 Eylül 2016 Çarşamba

Android Dersleri -2-

Geçen dersimizde kaldığımız yerden devam ediyoruz.
     1. Welcome to Android Studio pençesinde isek, Start a new Android Studio Project tıklıyoruz.
Açılmış bir Android Stutio varsa, File > New Project seçeneklerine tıklayarak devam ediyoruz.
Projemin adını "My First App " vererek devam ediyorum. Next'e tıklayalım.
Bu ekranda bildiğiniz üzere Android yeni sürümler çıkartarak var olanlara yeni özellik ekleyemeye ve değiştirmye gidiyor.Aynı zamanda telefon üreticileri bu sürümlere uyumlu işletim sistemlerini güncelliyorlar.Buradaki minimum versiyonu yüksek tutarsak bu programı kullanan kullanıcı sayısı bir o kadar da azalacaktır.Bununla ilgili bilgileri Help me Chose linkini tıklayarak öğrenebiliriz.

Seçili API 15 üzerinden devam ediyoruz.

Proje için istenile kütüphaneler, bileşenler vs. hazırlanıyor.Next'e tıklayalım ve devam edelim.
Burada çeşitli activiteler var Ama Biz şimdilik Empty Activity Seçip devam ediyoruz.Yeri geldiğinde bununla ilgili örneklere yer vereceğiz.
Customize the Activity ekranımızdaki Finish butonuna tıklıyoruz.Uygulamamız Gradle ile derleniyor.Vaktim olursa Gradle ile ilgili de bir kaç derste bahsetmek istiyorum.İlk tanışmam 2014 de olmuştu ama fazla vakit ayıramadım kendisiyle.
Windows erişim izni isteyebilir. Bizde istediğini verelim. "Erişime izin ver" :)

Evet sonunda ilk projemizi açtık.
Project penceresinin açılmış olduğunda emin olun. View > Tool Windows > Project işlem adımlarını takip ederek soldaki Project sekmemizi açabiliriz.



app > java > com.example.myfirstapp > MainActivity.java

     Bu dosya yeni bir proje oluşturma aşamaları bittikten sonra açılır.Daha öncede aktiviteler için sınıf tanımlarını içerir.Projeyi derlediğinizde başlar ve dosyayı yükler ve "Hello World!" der. :)

app > res > layout > activity_main.xml

     Bu xml dosyası aktivitelerin yerleşimleri tanımlar. İçinde "Hello World!" içere bir tane Textview element içerir.

app > manifests > AndroidManifest.xml

     Bu dosya ise uygulamanın temel karakterislik özelliğini ve her bir bileşeni tanımlar.Derslerimizde uygulamamıza yeni özellikler eklediğimizde burayı sık sık kullanacağız.

Gradle Scripts > build.gradle

     İşin ağa babası bu :). Tüm işi bu yapar. Programını derler ve çalıştırır.

Bu dersi burada bitirelim diğer derste uygulamamızı çalıştıralım. 









 

Addroid Dersleri -1-

(Eylül 2016) en güncel sürüm olan Android Studio 2.2.0.12 Windows 10 üzerine kuruyoruz.
Öncelikle buradaki indirme sayfasına gidiyoruz:

İndirme işlemi devam ederken bizde Andorid'de yapacağımız işlem adımlarını özetleyelim.Aşağıdaki resim bize ulaşmak istediğimiz hedefi göstermektedir.

1.Kurulum
2.Kodlarımızı yazacağız
3.Build edip çalıştıracağız. Aygıt ya emulator yardımıyla programı göreceğiz
4.İzmamızı atıp yayınlacağız.

Andoid Öğreniyorum Dersleri teorik manada Android öğrendikten sonra, pratik uygulamalara sık sık yer vereceğim.

İndirme işlemi bitti mi? :)

Acele etmeyin 1,6 GB yakın dosyadan söz ediyoruz.

İndirme işlemi bittikten sonra.Klasik Next'lere tıklayarak, hiç bir şeye dokunmadan Install butonuna ulaşıyoruz.Buna tıkladıktan sonra kurulum işlemi başlamaktadır.

Kurulum işlemi bittikten sonra karşımız aşağıdaki gibi bir ekran çıkacak.
Daha önce yüklü bir Android Studio olmadığından Ok'e tıklayıp geçiyoruz.
Next'e tıklayıp devam ediyoruz.
Next'e tıklayıp devam ediyoruz.
Finish'e tıklıyoruz son olarak.
İlgili güncellemeler indiriliyor. Yükleme işlemi de biraz uzun sürebilir.

Ve sonunda Finish

Kurulumu bitirdik.Sonraki dersimizde kod yazmaya devam edeceğiz.












2 Eylül 2016 Cuma

Telerik ItemCommand Example And FindControls

protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
   {
       if (e.CommandName == "YourCommandName")
       {
           // For Normal mode
           GridDataItem item = e.Item as GridDataItem;
           TextBox TextBox1 = item.FindControl("TextBox1") as TextBox;
           // Access your TextBox Here
 
 
           // For Edit mode
           GridEditableItem eitem = e.Item as GridEditableItem;
           TextBox TextBox2 = eitem.FindControl("TextBox2") as TextBox; // From Item Template
           TextBox TextBox3 = eitem["ColumnUniqueName"].Controls[0] as TextBox; // From Bound Column
           // Access your TextBox Here
       }
   }

8 Temmuz 2016 Cuma

MVC project Add Web Api

Update the MVC project

Use Nuget to get the newest Web API.
Project - Right click - Manage Nuget Packages - Search for Web API (Microsoft ASP.NET Web API ...) and install it to your MVC project.
Then you still need to get Web API routing to work. From

Add WebApiConfig.cs to the App_Start/ folder
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace WebApplication1
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // TODO: Add any additional configuration code.

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

        // WebAPI when dealing with JSON & JavaScript!
        // Setup json serialization to serialize classes to camel (std. Json format)
        var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        formatter.SerializerSettings.ContractResolver =
            new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();

        }
    }
}
If you have an MVC Project it will have Global.asax.cs, add the new routes. Order of the Global.asax.cs routes is critical. Note there are outdated examples which use WebApiConfig.Register
Add this line to Global.asax.cs: GlobalConfiguration.Configure(WebApiConfig.Register);
        // Default stuff
        AreaRegistration.RegisterAllAreas();

        // Manually installed WebAPI 2.2 after making an MVC project.
        GlobalConfiguration.Configure(WebApiConfig.Register); // NEW way
        //WebApiConfig.Register(GlobalConfiguration.Configuration); // DEPRECATED

        // Default stuff
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

WebAPI Help


To verify WebAPI is working:

To the controllers folder -> Add new item -> Web API Controller Class.
public class TestController : ApiController
{
    //public TestController() { }

    // GET api/<controller>
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/<controller>/5
    public string Get(int id)
    {
        return "value";
    }
    //...
}
Now you can test in IE/FF/Chrome as usual, or in the JavaScript consoles for non-get testing.
(With just the controller in the URL it will call the GET() action in the new Web API Controller, it's automatically mapped to methods/actions depending on the REST e.g. PUT/POST/GET/DELETE. You don't need to call them by action like in MVC) The URL directly:
http://localhost:PORT/api/CONTROLLERNAME/
Alternatively use jQuery to query the controller. Run the project, Open the console (F12 in IE) and try run an Ajax query. (Check your PORT & CONTROLLERNAME)
$.get( "http://localhost:PORT/api/CONTROLLERNAME/", function( data ) {
    //$( ".result" ).html( data );
    alert( "Get data received:" + data);
});