Material Design Nedir?
İlk olarak Google I/O 2014’te tanıtılan yenilikçi bir tasarım yaklaşımı ile tüm ürünlerinde tek bir tasarım dilini oturtmak isteyen Google tüm uygulamalarını nu yeni material design tarzına geçirmiş durumda. Material Design, Android’in alıştığımız görüntüsünden büyük bir ayrılışı gösteriyor. Origamiden ilham alan düzen, Microsoft’un Metro temasının daha pastel ve kağıtlaşmış halini andırıyor. Yeni tasarımın çözmek istediği sorunlardan biri, uygulamalar arasında tutarlı bir düzen sunmak amacında. Material Design, Google’ın sözleriyle “bir durumdan diğerine sorunsuz olarak geçmek üzere bir iskelet sunuyor”. Böylece hem arayüz içerisinde daha hızlı dolaşabiliyor, hem de bir öğeye dokunduğunuzda ne olacağını kestirebiliyorsunuz. Material Design, Google’ın tüm mobil uygulamalar, web siteleri ve ürünlerde kullanılması gerekliliğini, bilinen tasarım değerleri ile bilimsel çalışmaları bir araya getiren bir tasarım anlayışı.
Material Design temel olarak iki temel unsur üzerine inşa edilmiştir dersek sanırım çok fazla yanılmamış oluruz. Bunlar Material ve Motion olarak adlandırılabilir.
Material
Material tasarım içerisinde içeriği bizlere sunmaktadır. Tasarımı yapılmış olan arayüz ve yüzey bize içerikle ile ilgili ipucu sağlamaktadır. Gerçek hayatta bir oda içerisinde girdiğimizde, duvarları gördüğümüz için odanın boyutu ile ilgili bilgi sahibi oluruz. Aynı zamanda odanın iç özellikleri ise bize odanın kendisi ile ilgili bilgiler sunar. Örneğin, evimizin mutfağı, banyosundan farklı gözükmektedir. Benzer bir durum Material Design anlayışı içinde geçerlidir. Tasarım ve içeriğin bir araya gelmesiyle birlikte kullanıcıya dijital bir dünya içerisinde anlamlı bir sonuç sunmaktadır. Burada kullanıcı ona arayüz hakkında daha içerik sunulduğu için , arayüz hakkında daha fazla bir bilgiye sahip olacaktır.
Tasarımda kullanılan bir card, bizlere anlamlı bir içerik sunmaktadır. Aynı zamanda bu kullanım Material Design içerisinde genel bir kullanım olarak değerlendirilebilir. Bir card kendi içerisinde doğrudan context sahibi olmasının yanında diğer card’ lar ile de ilişki içerisindedir.
Motion
Material Design anlayışı çerçevesinde düşünüldüğünde Motion kavramı da benzer bir senaryoya sahiptir. Motion, uygulama akışı boyunca kullanıya bir içerik üretmektedir. Özellike bu durum ürün sürekliliği söz konusu olursa ciddi mana da önem arz etmektedir. Şimdi bu senaryo nasıl çalışmaktadır onu anlamaya çalışalım.
Şimdi önünüzde bir dizi karttan oluşan bir içerik olduğunu düşünün. Mesela, home feed olarak isimlendirilebilecek bir yapı olabilir. Siz bu kartlardan herhangi birisinde tıkladığınız durumda, Material Card sadece tek bir kart olarak devamında yer oluşan içeriği kullanıcıya sunmak yerine tam ekran olarak sunmaktadır. Bu durumun kullanıcıya sunduğu en önemli durum ise, kullanıcı davranışına karşı verilen yanıtın tutarlı olmasıdır.
Daha fazlası…
Material kavramını biraz daha inceleyelim. Aslında material design statik tasarım elementlerinizin bir birleşiminden oluşuyor. Şekiller, renk, yazı fontları ve diğer tasarım olarak kullandığınız diğer araçlar.
Renk
Renk seçimi hem tasarımcılar hemde kullanıcılar açısından çok önemli. Piskolojik olarak kullanıcıları etkilediği biliniyor. Renk, tasarımı daha güven verici, ilgi çekici hale getirebikiyor. Material Design içinde birçok renk paletine sahibiz.
Devam edeceğiz…
Kaynaklar
http://code.tutsplus.com/articles/what-you-can-learn-from-googles-material-design–cms-22516
https://www.google.com/design/spec/material-design/introduction.html
http://developer.android.com/design/material/index.html
Android Volley Kullanımı
Volley, Android uygulamalarında network işlemlerinin yapımında kullanılmak üzere geliştirilen, bu işlemlerin yapılmasını kolaylaştıran ve daha da önemlisi hızlandıran bir kütüphanedir. Temel olarak bir network kütüphanesi olan Volley, kendisine gösterilen URL adresine bağlanıyor ve oradan sağlanan verileri size sunuyor. Default olarak Volley, bu işlemleri asenkron olarak gerçekleştirmektedir. Bundan dolayı bu tür işlemler için Asynctask yapılarını kullanma gibi dertlerimiz olmayacak.
Volley kütüphanesinin bizlere sunduğu avantajlar genel olarak aşağıda sıralanmıştır.
Network işlemlerinde otomatik zamanlama
Çoklu eşzamanlı olarak gerçekleşebilen network işlemleri
HTTP üzerinden resim indirmenize imkan tanır. İndirdiğiniz resimleri bellekte ya da disk üzerinde cache’ yebilirsiniz. Resimleriniz inerken, ImageView içerisinde otomatik olarak bir “loading” simgesi gösterebilirsiniz ve aynı zamanda hata durumları için görsel ayarlayabilirsiniz.
İstekleri kuyruk yapısında tutar ve eğer isteğin cevabına artık ihtiyaç kalmadıysa otomatik olarak isteği iptal eder.
Istekler arasında önceliklendirme yapmanıza olanak tanır.
En önemli özelliklerinden birisi de request’leri kolaylıkla iptal edebilirsiniz.
Volley kütüphanesini edinmek
Öncelikle Volley.jar’ı nasıl elde edebileceğinize bakalım. Ne yazık ki Volleykütüphanesini kendinizin indirip JAR’laması gerekmektedir. Ben bu yazıda bu işlemlerin nasıl gerçekleştirildiğinden bahsetmek istemiyorum. Gerekli bilgileri Google hazırlamış olduğu sayfadan edinebilirsiniz
İnternet iznini almayı unutmayın!
Volley kütüphanesini kullanabilmeniz amacıyla, uygulamanızın manifest dosyasına android.permission.INTERNET iznini eklemeniz gerekmektedir. Bu izin olmadan geliştirdiğiniz uygulama ağ bağlantısı kuramayacaktır.
Volley Singleton sınıfı oluşturalım.
Eğer uygulamanız sürekli olarak network işlemleri geliştirecekse, uygulamanın hayat döngüsü boyunca kullanılacak olan RequestQueue nesnesinin tek bir örneğini kullanmak en etkili yol gibi görünmekte. Bu işlemi bir kaç alternatif yöntem ile gerçekleştirebilirsiniz. Önerilen yaklaşım ise, RequestQueue ve diğerVolley fonksiyonel özelliklerini barındıran singleton sınıf yapısının kullanılmasıdır.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
private static MySingleton mInstance;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static Context mCtx;
private MySingleton(Context context) {
mCtx = context;
mRequestQueue = getRequestQueue();
mImageLoader = new ImageLoader(mRequestQueue,
new ImageLoader.ImageCache() {
private final LruCache<String, Bitmap>
cache = new LruCache<String, Bitmap>(20);
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
});
}
public static synchronized MySingleton getInstance(Context context) {
if (mInstance == null) {
mInstance = new MySingleton(context);
}
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
// getApplicationContext() is key, it keeps you from leaking the
// Activity or BroadcastReceiver if someone passes one in.
mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}
public ImageLoader getImageLoader() {
return mImageLoader;
}
}
|
Bu yapının kullanımı ise şu şekilde örneklenebilir.
1
2
3
4
5
6
7
|
// Get a RequestQueue
RequestQueue queue = MySingleton.getInstance(this.getApplicationContext()).
getRequestQueue();
...
// Add a request (in this example, called stringRequest) to your RequestQueue.
MySingleton.getInstance(this).addToRequestQueue(stringRequest);
|
Bu yazının içerisinde kullanılan örnek kodlar Google ‘ ın hazırlamış olduğu örnek sayfadan sadece bir tanıtım ve fikir vermesi amacıyla alınmıştır. Geliştirmek istediğiniz uygulamalara göre bu sınıfın içerisini düzenleyebilirsiniz.