vehbiakdogan

Senior Sofware Developer

Arduino İle Sayı Tahmin Oyunu

Merhaba arkadaşlar bu yazımda arduino ile binary sayı tahmin oyunu yapmayı göstereceğim. Sayı tahmin oyununun temel mantığı 6 tane 6 bitlik binary sayıdan hangisinin en büyük olduğunu dip switch yardımıyla bulmak.

abi öncelikle 6 adet desimal sayı üretiyoruz ( 6 bitlik sayı olacağı için 0,63 aralığında). Daha sonra bu sayıları binary sisteme çevireceğiz ve ledlerde bu sayıları göstereceğiz. Ardından kullanıcının sayıları tahmin etmesi için dip switchin anahtarlarından birini on durumuna getirmesini bekleyeceğiz. Eğer kullanıcı doğru tahmin etmiş ise yeşil led yanlış tahmin etmiş ise kırmızı led yanacak.

Arduino İle Binary Sayı Tahmin Oyunu

Ödev aşağıdaki şekilde isteniyor.

Bu projenizde aşağıda kuralları verilen oyunu gerçekleyecek bir Arduino programı (sketch) yazmanız beklenmektedir.

  • Oyun A1 pinine bağlı geçici anahtara (pushbutton) basılması durumunda başlayacaktır. (Analog pinler de mikrodenetleyiciye dijital giriş sağlamak için kullanılabilir.)
  • Oyun başlayınca mikrodenetleyici tarafından 6 adet 6 bitlik rastgele tam sayı üretilecektir.

Arduino programlarında rastgele sayı üretimi için kullanılabilecek 2 fonksiyon vardır. Bunlardan birincisinin adı randomSeed, ikincisinin adı ise random dır. randomSeed fonksiyonu kendisine parametre olarak aldığı çekirdek değer sayesinde random fonksiyonunun her çağrılışında farklı bir rastgele sayı üretimini mümkün kılmaktadır.

Genellikle randomSeed setup, random ise loop içerisinde yer alır.

randomSeed(analogRead(A0)); deyimi randomSeed fonksiyonunun tipik bir kullanım şeklidir.

random(x,y) ise x (dâhil) ile y (hariç) aralığında rastgele bir tam sayı üretimi için kullanılır.

  • Mikrodenetleyici daha sonra üretilen bu 6 bitlik sayıların her birinin ikili karşılığını bulacak ve bu sayılar 2-7 aralığındaki dijital pinlere bağlı led’lerle temsil Örneğin rastgele sayılardan biri 58 iken (111010) 2, 3, 4 ve 6 numaralı dijital pinlere bağlı led’ler yanıyorken, 5 ve 7 numaralı dijital pinlere bağlı led’ler sönüyor olmalıdır. Her bir sayıyı temsil eden led kombinasyonu 5 saniye süresince aktif olmalıdır. Sonrasında tüm led’ler 1 saniye süresince söndürülmelidir ve aynı işlem 6 sayının her biri için tekrar edilmelidir.
  • Kullanıcı da bu esnada led’lerle temsil edilen sayılardan hangisinin en büyük olduğunu belirlemeye çalışmalıdır.
  • Kullanıcı daha sonra 8-13 aralığındaki dijital pinlere bağlı kalıcı bir anahtar grubunun 6 pozisyonunu kullanarak takip ettiği sayılardan en büyüğünün sıra numarasını ilgili kalıcı anahtar üzerinden mikrodenetleyiciye Örneğin 6 sayıdan en büyüğünün 3. sayı olduğunu düşünüyorsa 10 numaralı kalıcı anahtarı ON konumuna almalıdır. (Oyun başlatılmadan önce tüm kalıcı anahtarların OFF durumunda olduğuna dikkat edilmelidir.)
  • Kullanıcının tahmini doğru ise A2 pinine bağlı yeşil led, doğru değilse A3 pinine bağlı kırmızı led bir saniye süresince yanmalıdır ve sönmelidir.
  • Oyun kullanıcı A1 pinine bağlı geçici anahtara bastığında yeni rastgele sayılarla tekrar başlamalıdır. Oyun başlamadan önce tüm led’ler sönük olmalıdır.

Sayı Tahmin Oyunu Kodlar

int pushButtonPin = A1;
long pushButtonKontrol; 
int butonDurumu; // pushButton durumu 
int rastegeleSayilar[6]; // onluk tabanda üretilenler
int rastGeleSayilarIkilik[6][6]; // 2 lik tabana çevirilenler
bool oyunDurumu = false; // oyun başlama durumu 
int ledPinler[6] = {2,3,4,5,6,7};
int enBuyukIndis;
int anahtarPinler[6] = {8,9,10,11,12,13};
int dogruCevapPin = A2;
int yanlisCevapPin = A3;

void setup() {
  // put your setup code here, to run once:
  pinMode(pushButtonPin,INPUT);
  pinMode(dogruCevapPin,OUTPUT);
  pinMode(yanlisCevapPin,OUTPUT);
  Serial.begin(9600);
  pushButtonKontrol = millis();
  
  // ledleri çıkış, anahtarları giriş olarak ayarla 
  for(int i = 0; i<6;i++) {
    pinMode(ledPinler[i],OUTPUT);
    pinMode(anahtarPinler[i],INPUT_PULLUP);
    digitalWrite(anahtarPinler[i],HIGH);
    }
  
  
}

void loop() {
  // butondan değer okuyoruz. // 1 olduğunda oyun başlıyor.
   if(!oyunDurumu)  {
    // oyun başlamamış ise butona basılmasını bekle.
    if(digitalRead(pushButtonPin) == HIGH && (millis() - pushButtonKontrol)>1000) {
      pushButtonKontrol = millis();
      butonDurumu = digitalRead(pushButtonPin);
      oyunDurumu = true; // butona basıldıysa oyun başlasın.
      Serial.println("Oyun Başlıyor.");
    }else {
      butonDurumu = digitalRead(pushButtonPin);
      Serial.println("Oyun başlaması için butona basılması bekleniyor.");
    }
  }else {
   // oyun başlamış ise yapılacaklar.
   Serial.println("Oyun başladı.");
    rastGeleSayilarOlustur(rastegeleSayilar); // rastgele sayıları oluştur.
    sayilariIkilikTabanaCevir(rastegeleSayilar,rastGeleSayilarIkilik); // sayıları ikilik tabana çevir 

    sayilariVeIkilikDegerleriniYazdir(rastegeleSayilar,rastGeleSayilarIkilik); // test amaçlı sayıları ve ikilik değerleri yazdır. 
    sayilariLedlerleGoster(rastGeleSayilarIkilik,ledPinler); // sayıları sırayla ledlerde gösterdik. 

    int kullaniciSecimi = kullaniciSecimiAl(anahtarPinler); // kullanıcının seçtimini aldık.
    if(kullaniciSecimi == enBuyukIndis ) { // doğru tahmin yapmış ise yeşili yaktık.
      
      Serial.print("Tebrikler oyunu kazandınız.");
      digitalWrite(dogruCevapPin,1);
      digitalWrite(yanlisCevapPin,0);
      delay(1000);
      digitalWrite(dogruCevapPin,0);
      oyunDurumu = false;
      }else {
        // yanlış seçim yapmış ise kırmızıyı yaktık
        
        Serial.println("Malesef Kazanamadınız.");
        digitalWrite(dogruCevapPin,0);
        digitalWrite(yanlisCevapPin,1);
        delay(1000);
        digitalWrite(yanlisCevapPin,0);
        oyunDurumu = false;
        }   
   }
   
  
  
}

// rastgele sayı oluşturuyor ve oluşan sayılardan en büyüğünün indisini tutuyor.
void  rastGeleSayilarOlustur(int rastegeleSayilar[]) {
  int enBuyuk = -1;
  randomSeed(millis());
  Serial.println("Rastgele Sayılar Oluşturuluyor.");
  for(int i = 0;i<6;i++) {
    rastegeleSayilar[i] = random(0,64);
    if(enBuyuk<=rastegeleSayilar[i]) { enBuyukIndis = i; // en byüyük sayının indisini tutalım. 
      enBuyuk = rastegeleSayilar[i];
    }
  }
}

// oluşan sayıları ikilik tabana çeviriyor.
void sayilariIkilikTabanaCevir(int rastegeleSayilar[], int rastGeleSayilarIkilik[6][6]) {
  int cevirilenSayi;
  for(int i = 0; i<6;i++) {
    cevirilenSayi = rastegeleSayilar[i];
    int j = 0;
    while(cevirilenSayi >0) {
      rastGeleSayilarIkilik[i][j] = cevirilenSayi % 2;
      cevirilenSayi /=2;
      j++;
        
     }
    
  }
}

// görme amaçlı sayıları ve ikilik değerlerini seri monitöre yazıyor. 
void sayilariVeIkilikDegerleriniYazdir(int rastegeleSayilar[],int rastGeleSayilarIkilik[6][6]) {

    for(int i = 0;i<6;i++) {
      Serial.print("Onluk Değeri: ");
      Serial.print(rastegeleSayilar[i]);
      Serial.print(" ---- İkilik değeri: ");
      for(int j = 5; j>=0;j--) {
        Serial.print(rastGeleSayilarIkilik[i][j]);
        }
        Serial.println(" ");
      
      }
}

// sayıları ledlerde gösteriyor. 
void sayilariLedlerleGoster(int rastGeleSayilarIkilik[6][6], int ledPinler[]) { 
    for(int i = 0;i<6;i++) {
      
      for(int j = 0; j<6;j++) {
        digitalWrite(ledPinler[j],rastGeleSayilarIkilik[i][j]);
      }
        delay(5000);
        for(int a = 0; a<6;a++) digitalWrite(ledPinler[a],0);

        delay(1000);
        
      
      }
}

/* kullanıcı seçimini gösteriyor. 
* Bizim anahtarımız arızalı olduğu için ek işlemler yaptık. 
 *  kullanıcıdan sadece 1 tane 1 geleceğini garanti ettiğimiz için tek 1 gelinceye kadar sürekli dıp switchi kontrol ettik. 
 */
int  kullaniciSecimiAl(int anahtarPinler[]) {
  int secildiMi = 0;
    int secilenPin;
    while(secildiMi != 1) {
      secildiMi = 0;
      for(int i =0;i<6;i++) {
        if(digitalRead(anahtarPinler[i]) == 1) {
          secildiMi++;
          secilenPin = i;
          }
      }
      delay(1000);
    }
    return secilenPin;
}

Ödevimiz bu kadardı arkadaşlar.

Takıldığınız yerlerde Sitemde bulunan telefon numaramdan ulaşabilirsiniz.

Arduino

Android DexIndexOverflowException Hatası

Merhaba arkadaşlar bugün yazdığım uygulamada google maps apilerini kullanmam gerekti. Gerekli apileri uygulamama entegre ettim derlerken sıkıntı olmazken apk çıktı almak istediğimde

Error:Execution failed for task ‘:app:transformClassesWithDexForDebug’. > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 hatasını aldım. Bu hata uygulamamızın default ayarlarında multiDexEnabled parametresi false olmasından kaynaklanıyor.

DexIndexOverflowException Hatası Çözümü

 

Uygulamamızın build.gradle dosyasını açıyoruz ve defaultConfig Kısmına aşağıdaki parametreyi ekliyoruz.

 defaultConfig {
.
.
.

    multiDexEnabled true
}

Ekledikten sonra sağ üstte çıkan Sync Now  butonuna basmayı unutmayın aksi taktirde uygulamanız yine hata verecektir.

Daha sonra Yeni bir sınıf oluşturup Application sınıfından kalıtalım ve bu sınıfı manifest dosyasındaki <application /> a ekleyelim.

public class MyApplication extends Application {

    @Override
    protected void attachBaseContext(Context base) {
       super.attachBaseContext(base);
       MultiDex.install(this);
    }

}

Android manifest dosyamızda da application tagının name değerini aşağıdaki gibi değiştirelim.

 

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:name=".MyApplication"
    android:theme="@style/AppTheme">

     // ...
</application>

 

Bir hatamızı daha çok şükür çözüme kavuşturduk arkadaşlar. Görüşmek üzere 🙂

Android

jQuery Kullanıcı Adı Kontrolü

Merhaba arkadaşlar

Normalde kullanıcı adını Php kısmında kontrol ettirir düzenli değilse uyarı verdirirdik ama bunun yerine Kullanıcı Adı Kontrolü  front-end kısmında yaparsak sayfa yenilenmeden kullanıcıda kullanıcı adınının normal forma uyup uymadığını görebilir ve ek olarak sunucuya fazladan sorgu yapmayız. Tabiki bu güvenilir bi yöntem değildir. Back-end kısmında da yine kontrol ettirmeniz gerekir.

Kullanıcı Adı Kontrolü

Öncelikle regex yani düzenli ifade kullanarak işlem yaptım. Kısaca regex kısmına bakarsak:

var regex = new RegExp("[^a-zA-Z0-9-_]","i");

Burada diyoruzki a-zA-z yani ingiliz alfabesindeki tüm küçük ve büyük harfler, 0-9 rakamlar ve  -_ işaretleri gördüğünde anlamına gelir. Başına koyduğumuz şağka (^) işareti ise değilini alır yani bu işaretlerden başka birşey olursa işlem yap manasındadır. ikinci parametre olarak verdiğimiz i parametresi de büyük küçük harf duyarlılığını kaldırır. Bu parametre şart değildir.

Kodlarımız:

<script type="text/javascript">
	$(function(){
		var nesne;
		var regex = new RegExp("[^a-zA-Z0-9-_]","i");
		$("#kadi").on({
		
			keyup: function(){
				nesne = $(this);
				nesne.val(nesne.val().replace(regex,""));
			
			},
			keypress:function(){
				nesne = $(this);
				nesne.val(nesne.val().replace(regex,""));
			
			},
		});	
		
	});

 

Kodları çalıştırabilmeniz için sayfanızda jQuery kütüphanesinin dahil olması ve #kadi id sine sahip bir elementiniz olması gerekir.

Bunun gibi E-posta kontrolü şifre kontrolü gibi işlemleri regex ile kolayca yapabilirsiniz.

Bol yazılımlı günler 🙂

Javascript-jQuery

Mobil Tarayıcı Renk Değiştirme

Merhaba arakdaşlar.

Artık herkes web sitesini mobil uyumlu yani responsive yaptırıyor ve mobil sitelere oldukça önem veriyorlar. Gün geçtikçe önemi artan mobil siteler için herkes tasarımı elinden geldiğince güzel yapmaya çalışıyor. Bizde bugün mobil tarayıcılarda Mobil Tarayıcı Renk Değiştirme işlemini nasıl yapabileceğimizi göreceğiz.

 

Mobil Tarayıcı Rengini Değiştirme

Mobil tarayıcımızın rengini neden değiştireyim dediğinizi duyar gibiyim 🙂 Tarayıcı rengini temanız ile uyumlu yaparsanız siteniz tarayıcıda bir mobil app gibi çıkar buda herkesin istediği bir durumdur.

Örneğin kişisel web sitem olan vehbiakdogan.com un tarayıcı rengini değiştirdim. Cep telefonundan girildiğinde siteme aşağıdaki şekilde bir görüntüyle karşılaşacaksınız 🙂

 

Adres Çubuğunun rengine bakarsanız web sitem ile birleşik gibi görünüyor.

 

 

 

 

 

 

 

Şimdi tarayıcı rengimizi nasıl değiştireceğiz bakalım.

<!-- Chrome, Firefox OS ve Opera -->
<meta name="theme-color" content="#3498db">
<!-- Windows Phone -->
<meta name="msapplication-navbutton-color" content="#3498db">
<!-- iOS Safari -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="#3498db">

 

 

Yukarıdaki kodu web sitenizde <head></head> tagları arasına eklerseniz sizde mobil tarayıcınızın rengini değiştirmiş olursunuz.

Not: content kısımlarını kendi renkleriniz ile değiştirmeyi unutmayınız.

Her geçen gün mobil dünyaya biraz daha geçiş yapıyoruz. Bu yüzden mobil sitemizi ne kadar optimize edebilirsek ve tasarımsal alanda güzel yaparsak o kadar çok ekmek yeriz bu işten.

Bol yazlımlı günler 🙂

DiğerHtml-Html5

Javascript Global Değişkenler oluşturmak

Merhaba arkadaşlar
Global değişkenler  kapsam(scope) alanı olmadan istediğimiz yerde kullanabildiğimiz  değişkenlerdir.  javascriptte global değişkenler  oluşturabilmemiz için ise bizim window nesnemizden bir değişken oluşturmamız gerekiyor. Örnek verecek olursak:


window.sayi = 5;

function sayiNe() {

alert(sayi);

}

&nbsp;

şeklinde kullanabiliriz. Burada normal değişken olarakta çalışabilir ama değişkeni html in içinde tanımlamak zorunda olduğumuz durumlar olabilir. Bu gibi durumlarda değişkenimizi global olarak tanımlamazsak, fonksiyonumuz değişkeni bulamayacak ve undefined diyecektir.  Bu gibi durumların önüne geçmek için global değişkenler oluşturmamız gerekir.

 

Bol yazılımlı günler 🙂

Javascript-jQuery

PHP ile ip adresinden konum bulmak

Merhaba arakdaşlar php ile ip adresinden konum bulmak nasıl olur bakacağız. Öncelikle adres bulmak için ip-api.com apisini kullanağım.

<?php
function yerBul($ip) {
return json_decode(file_get_contents("http://ip-api.com/json/$ip"));
}

?>

Yukarıdaki fonksiyonumuz bize parametre olarak gönderdiğimiz ip adresinin konum bilgisini veriyor. Hangi bilgilieri verdiğini aşağıdaki şekilde kendi ip adresimizi parametre vererek bakalım.


$veriler  = yerBul($_SERVER["REMOTE_ADDR"]);

foreach ( $veriler as $sutun => $deger)
echo " $sutun => $deger <br/>";

bu kodu çalıştırdığımızda bize aşağıdaki şekilde bir çıktı verecektir.

as => AS9121 TTNET
city => Erzurum
country => Turkey
countryCode => TR
isp => Turk Telekom
lat => 39.9086
lon => 41.2769
org => Turk Telekom
query =>***.***.***.***
region => 25
regionName => Erzurum
status => success
timezone => Europe/Istanbul
zip =>

gelen veride ip adreside görünür ama ben güvenlik amaçlı kendi ip adresimi gizledim arkadaşlar.

Evet ip adresi ile konum bulmak bu kadar kolay detaylı adreste isterseniz lat,lon değeri ile google maps api kulanarak detaylı adreste alabilirsiniz.

PHP

SQL Foreign Key Kullanımı

Sql foreign key ilişkisel veri tabanında bir tabloda belirlediğimiz bir event olması durumunda diğer tabloda işlem yapılmasını sağlayan bir yapıdır. bir nevi triggere benziyor.

Örneğin bizim urunler ve urun_resim diye iki adet tablomuz olsun birinci tabloda ürünlerimizi ikinci tabloda ürüne ait görselleri tutalım.

Biz eğer foreign key kullanmazsak üründe silme işlemi yapıldığı zaman ürün resimleri ya veri tabanında çöp olarak kalacak ki bu saçma olur yada ek kod yazıp urun_resim tablosundan da bu görselleri silmemiz gerekecek işte foreign key tam bu noktada devreye giriyor.

Eğer biz foreign key kullanırsak diyoruzki urunler tablomdan bir ürün silindiğinde sende o ürünün id sine ait ürün resimlerini otomatik sil diyoruz.

örneğin:

ALTER TABLE `urun_resim`
ADD CONSTRAINT `foreign_key_adi` FOREIGN KEY (`urun_id`) REFERENCES `urunler` (`urun_id`) ON DELETE CASCADE;

Yukarıdaki kodda urun_resim tablosuna foreign_key_adi adında bir trigger oluştruduk ve dedikki urunler tablosunda bir (DELETE) silme işlemi gerçekleştiğinde urun_id sini al ve urun_resim tablosundaki urun_resim.urun_id sütununda urunler.urun_id eşleşenleri sil dedik.

 

Yani biz urun_resim tablosuna bir foreign key oluşturduysak bir ürünü resimleriyle beraber silmek için aşağıdaki sql kodunu çalıştırmamız yeterli olacaktır.

DELETE FROM urunler WHERE urun_id='1'
-- urun_id si 1 olan ürünleri sil, urun_resim tablosunda urun_id si 1 olan resimleri sil

PDOPHPSQL - MySQL

Dev C++ Kod Derlerken Ek Parametreler Girmek

Merhaba Arkadaşlar Openmp ile paralel program yazarken dev c++ ta derleme esnasında openmp ile derlenmesi için -fopenmp parametresi ile derlememiz gerekir.

Bu Parametre ile derlemek için öncelikle dev c++ ı açıyoruz.
Ardından Araçlar>Derleyici Ayarları kısmın giriyoruz.

Derleyiciyi çağırırken komut satırına şunları ekle yazan textboxa -fopenmp parametresini ekliyoruz.
Evet artık derleyiciniz openmp ile derlemeye hazır durumda 🙂

Test için aşaıdaki kodu derleyebilirsiniz.

 

#include <iostream>
#include <omp.h>

int main(int argc, char *argv[])
{
#pragma omp parallel
{
cout <<"Vehbi Akdoğan\n ";
}
return 0;
}

C++

Android Uygulamanın Ana Fontunu Değiştirme

Merhaba Arkadaşlar;

Androidde uygulamamıza temel bir font atamak isteyebiliriz ve bunu androidin kendi yetenekleriyle yapmak istersek işimiz bayağı bir zor olacaktır ama android uygulamanın ana fontunu değiştirmek  için geliştirilmiş bir kütüphane olan Calligraphy kütüphanesini kullanacağız.

Öncelikle kütüphaneyi projemize eklememiz gerekiyor. Projemize kütüphaneyi dahil etmemiz için build.gradle dosyasını açıyoruz ve dependencies bölümüne aşağıdaki compile kodunu ekleyip sağ üstten Sync Now diyoruz.

Kodumuz:

dependencies {
    compile 'uk.co.chrisjenx:calligraphy:2.1.0'
}

Sync Now dedikten sonra androidin özel klasörlerinden olan assets klasörü oluşturuyoruz. assets klasörü oluşturmak için:

app a sağ tıkla > New > Folder > Assets Folder şeklinde asset klasörü oluşturduk.

Assets Klasörü Oluşturma
Assets Klasörü Oluşturma

Assets klasörü içine şimdi de fonts klasörü oluşturalım. Bunun için
assets klasörüne sağ tıklayıp new > directory adımlarını takip edebilirsiniz.

 

Font klasörü de oluşturduktan sonra bu klasör içine kullanmak istediğimiz fontu atıyoruz. ben open sans attım.

Daha sonra fontumuzun çalışması için bir class oluşturuyoruz.

Ben Sınıf adına UygulamaFontu dedim siz istediğinizi diyebilirsiniz ama bir hata olmaması açısından UygulamaFontu olarak oluşturmanızı tavsiye ederim.

Daha sonra oluşturduğumuz sınıfı Application sınıfından kalıtıp onCreate methodunu kullanmamız gerekiyor. Bu kısmı biraz hızlı geçiyorum kod üzerinden bakarsak daha iyi olacak.


package vehbiakdogan.com.nobetcieczanebul;

import android.app.Application;

import uk.co.chrisjenx.calligraphy.CalligraphyConfig;
import vehbiakdogan.com.nobetcieczanebul.R;

/**
 * Created by vehbiakdogan on 19.2.2016.
 */
public class UygulamaFontu extends Application { // application sınıfından kalıttık
    public void onCreate() { // on create methodunu override ettik
        super.onCreate(); // ana onCreate Methodunu çalıştırdık
        // şimdi default font ayarlarımızı yapmaya başlıyoruz.

        CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() // kütüphaneyi başlattık
                        .setDefaultFontPath("fonts/opensans/OpenSans-Regular.ttf") // font yolunu gösterdik
                        .setFontAttrId(R.attr.fontPath) // uygulamadaki tüm elemanlara font ataması burda yapılıyor.
                        .build() // ve build ettik 
        );


    }

}


Evet Arkadaşlar şimdi daha iyi anlamışsınızdır diye umuyorum 🙂

Evet geldik son adımımıza 🙂

Şimdi Androidmanifest.xml dosyamızı açıyoruz ve application tagının olduğu yere bir android:name değeri veriyoruz ve buraya bizim classımızın adını veriyoruz.

Kısaca eklemeniz gereken kod:

<application <!-- Bu Tagdan Sonra -->
        android:name=".UygulamaFontu" <!-- .classAdi şeklinde class adını ekliyorsunuz. -->
<!-- application tagının diğer kodlarına dokunmayınız. ! -->


şeklinde yapabilirsiniz. Örneğin benim AndroidManifest.xml dosyam:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="vehbiakdogan.com.denemeUygulama">

    <application
        android:name=".UygulamaFontu"
        android:allowBackup="true"
        android:icon="@mipmap/logokirmizi"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:theme="@style/AppTheme.noActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>



Son olarakta attachBaseContext Methodumuzu fontun değişmesini istediğimiz Activity de çağırarak fontumuzun çalışmasını sağlayalım.
Örn. main Activity de çalışmasını istiyorsak MainActivity i açıp aşağıdaki şekilde düzenleyelim.


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
    }
// bu method Fontumuzun bu activity de çalışmasını sağlar. 
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
    }

}

Eğer adımları başarılı bir şekilde yaptıysanız artık uygulamanızın ana fontunu değiştirmiş olacaksınız.
Bol yazılımlı günler 🙂

Android

jQuery Telefon Ekranındaki Dönmeyi Algılamak

Merhaba arkadaşlar jQuery ile bir projemde ekranını pozisyonu değiştiğini algılamam gerekiyordu ve bunun için basit bir kod buldum sizlerlede paylaşmak istedim
jQuery ile Telefon Ekranındaki Dönmeyi Algılamak için aşağıdaki kodu kullanabilirsiniz.

$(window).on('orientationchange', function (e) {
alert("Ekran Pozisyonu Değişti.");
});

 

DEMO

telefonunuzla burdan kontrol edebilirsiniz.

Javascript-jQuery