ANDROID DERSLERI
ANDROID DERSLERI
1)ANDROID SDK , Android studio ( ve ya eclipse de ola biler)  ve JAVA kompunuza qurulmalidi
2)SImulator gec islediyi ucun ya GENYMOTION qurmaliyiq ya da oz devicemizi istfde etneliyik
3)GENYMOTION islemesi ucun ozu ve elave olaraq ORACLE VIRTUALBOX qurulmalidi
4)Device ile islemek ucun oz devicinizi usb vasitesile taxirsiz kompa ve Android studioda asagida ANdroid Manitor hissesinden oz devicinizi secirsiz
*** Ve ya RUN > Edit configurable > General > Target  hissedinde oz devicinizi ve ya emulatoru sece bilersiz 
*** ve yavas isleyen komplarda android studio suretli islemesi ucun  ctl+shift+esc  basiriq 
Android stuido servisimizin ustidne sag vurub  prioritetini high secirik ki daha cox resurs xerclesin istfdesine
Actiity - neceki bir sayta girdikde sehfe ile qarsilasirsiniz androidde her bir sehfe activity-dir deye bilerik
Intent - activitelere kecid aralarinda bir korpu deye bilerik
Androidmanifest - burda appimizin butun esas melumatlari yer alir demek olarki
(aktivityler, sdk,icon,label,theme ve.s)
Resources - butun appimzn sekilelri  stringler , elave dil propertyleri ve.s hamisi bu folderde yer alir
Layoitlar
 LinearLayout - en sade layout novumuzdu ,icerisindeki controllerlerin bir birinin ardinca horinoztal ve ya vertoical siralanmasini yerine yetirir orientation propertiesi vasitesile
TableLayout - Table seklinde tr (tablerow) ve td(tableView) prinipi ile isleyir
RelativeLayout- burada layoutlarimiz bir birile elaqeidirse istfde edirik
FrameLayout - ust uste duzur compoenentleri
Ilk proyektimizin ekran gorunusu temasini ve.s deyismek ucun
  main activityden apptheme basib sece bilerik ve  values ->  styles.xml-den deyise bilriik tema rengler ve.s-ni 
EKRANDAKI TEXT DEYISMEK UCUN
Evvelce gelin strings.xml-de yeni string yaradaq 
Daha sonra main activitimizde text uzerine click edib sagda TextView-dan text browse hissesine vurruuq ve siyahidan yeni yaratdigimiz title stringini secirik
SEKIL ELAVE ETMEK BACKGROUNDA
Bunun ucun seklimizi drawable folderimize atriiq , daha sonra imageView atiriq ekranimiza ve onun src-sine  drawable-mizdeki hemin sekli veririk.
Gorunduyu kimi  seklimiz yazimizin ustune cixib. Seklimizi en arxa atmaq ucun Component Tree-mizden en 1-ci yere seklimizi drag edirik.
APP-imizin iconunu deyismek
Programimizin esas boss file olan manifest xml faylimizi tapiriq ve orada butun app ile bagli esas bilgiler var orda  :icon hisesinde gostrilen png oz png-mizle deyissek iconumuz deyismis olacaq
SADE APP 
Zerr at-a basdiqca loga random olaraq dusen zerrlerin hansi oldugunu yazir
Burda ise biz random atilan zerr normesine uygun image set edirik arraydan .
TRUE-FALSE QUIZ APP 
1) true ve ya false basdiqda  yeni suala kecilmelidir
2)asagida progressbar olmalidir son suala yaxinlasdigimizi bildirmek ucun
3)asagida score: olmalidir xalimizi gostermek ucun 
4)Sual dogrudusa score artirilmalidir
5)son suala catanda  dialogda son score gorsenmelidir ve close application butonu olmlaiidr
6)Sual sehv ve ya duz olanda toast mesaj ile gostermek
String.xml-de suallarimizi  ve buton, textview texlerimizi yaradiriq
Acitivity view-muzu yaradiriq
Bir eded model classimizi yaradiriq .int tipinden QuestionId ve  bollen tipinden cavabini tutan
Indi gelin esas kodumuza kecen MainAcitivty javamiza
public class MainActivity extends Activity {
   // Komponentlerimizi  ve  istifade edeceyimiz deyiskenleri tanimlayiriq
   Button mTrueButton;
   Button mFalseButton;
   TextView mScoreTextView;
   TextView mQuestionTextView;
   ProgressBar mProgressBar;
   int mIndex;    // Sualin indexi ucun
   int mScore; // yigilan xal ucun
   int mQuestion; 
   Toast mToastMessage; // toast mesaj
  //TrueFalse obyekti tipinden arrayimizi yaradiriq, burada suallarimiz ve cavablari qeyd olunub
   @NonNull
   private TrueFalse[] mQuestionBank = new TrueFalse[] {
           new TrueFalse(R.string.question_1, true),
           new TrueFalse(R.string.question_2, true),
           new TrueFalse(R.string.question_3, true),
           new TrueFalse(R.string.question_4, true),
           new TrueFalse(R.string.question_5, true),
           new TrueFalse(R.string.question_6, false),
           new TrueFalse(R.string.question_7, true),
           new TrueFalse(R.string.question_8, false),
           new TrueFalse(R.string.question_9, true),
           new TrueFalse(R.string.question_10, true),
           new TrueFalse(R.string.question_11, false),
           new TrueFalse(R.string.question_12, false),
           new TrueFalse(R.string.question_13,true)
   };
   // Progressbar ucun incirmet deyeri secilir
   // bu 100/ umumi sul sayi olmalidi riyazi mentiqle
   final int PROGRESS_BAR_INCREMENT = (int) Math.ceil(100.0 / mQuestionBank.length);
   @Override
   protected void onCreate(@Nullable Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       // In API 26 'casting' is no longer needed.
       // For API 25 and lower: mTrueButton = (Button) findViewById(R.id.true_button);
       // For API 26 and higher can use: mTrueButton = findViewById(R.id.true_button);
       mTrueButton = (Button)findViewById(R.id.btn_true);
       mFalseButton = (Button) findViewById(R.id.btn_false);
       mQuestionTextView = (TextView) findViewById(R.id.question_text);
       mScoreTextView =(TextView) findViewById(R.id.score);
       mProgressBar =(ProgressBar)findViewById(R.id.progress_bar);
       // Eger screen roatte etsek  scroumuzun 0-andigini gore bilerik
        //Bu olmamamsi ucun savedInstance istfde edilir
     //mutleq komponentler yaradildiqdan sonra yazilmalidi bu kodlar evvelde saved elesek sehv         verer .Save edilen score-u yeniden textview set etmeliyik
       if (savedInstanceState != null) {
           mScore = savedInstanceState.getInt("ScoreKey");
           mIndex = savedInstanceState.getInt("IndexKey");
           mScoreTextView.setText("Score " + mScore + "/" + mQuestionBank.length);
       } else {
           mScore = 0;
           mIndex = 0;
       }
       //ilk sual goturulur arrayden ve question textmize set edilir
       mQuestion = mQuestionBank[mIndex].getmQuestionID();
       mQuestionTextView.setText(mQuestion);
       mTrueButton.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               checkAnswer(true);  //cavabi yoxla
               updateQuestion();  // kec novbeti suala
           }
       });
       mFalseButton.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               checkAnswer(false);
               updateQuestion();
           }
       });
   }
   private void updateQuestion() {
       //eger son suala catsa arrayindexout exception vermemeis ucun asagidaki kimi riyazi mentiqle yaza bilerik bele olan halda son suala catandan sonra yeniden 0 olur mIndex       mIndex = (mIndex + 1) % mQuestionBank.length;
       // En son suala catanda Dialog acilir ve orada son al ve close app butonu gosterilir
       if(mIndex == 0) {
           AlertDialog.Builder alert = new AlertDialog.Builder(this);
           alert.setTitle("Game Over");
           alert.setCancelable(false);
           alert.setMessage("You scored " + mScore + " points!");
           alert.setPositiveButton("Close Application", new DialogInterface.OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int which) {
                   finish(); //Activity classinin finish yeni bagla metodudur
               }
           });
           alert.show();
       }
       //yeni suali gotur , progresbari 1 artir , score-u yenile
       mQuestion = mQuestionBank[mIndex].getmQuestionID();
       mQuestionTextView.setText(mQuestion);
       mProgressBar.incrementProgressBy(PROGRESS_BAR_INCREMENT);
       mScoreTextView.setText("Score " + mScore + "/" + mQuestionBank.length);
   }
   private void checkAnswer(boolean userSelection) {
      //duzgun cavab goturulur sual idnexine esasen
       boolean correctAnswer = mQuestionBank[mIndex].ismAnswer();
.
       if (mToastMessage != null) {
           mToastMessage.cancel();
       }
      //user cavani ile dzgun cavab eynidise
       if(userSelection == correctAnswer) {
           mToastMessage = makeText(getApplicationContext(), R.string.correct_toast, Toast.LENGTH_SHORT);
           mScore = mScore + 1;
       } else {
           mToastMessage = Toast.makeText(getApplicationContext(), R.string.incorrect_toast, Toast.LENGTH_LONG);
       }
       mToastMessage.show();
   }
   // screen roattion zamani score , index kimi  global deyiskenlerimiz 0-landigi ucun onlari savedInstnce ile save edirik  outState-mize
   @Override
   public void onSaveInstanceState(Bundle outState){
       super.onSaveInstanceState(outState);
       outState.putInt("ScoreKey", mScore);
       outState.putInt("IndexKey", mIndex);
   }
}
Screen roatteion teyin etmek ucun
Manifest faylda activity tag-imiza android:screenOrientation  ne versek o qalir, Yeni  scree rotation olsa bele deyismesini istemirikse protrait veririk
TOAST MESAJ STILINI DEYISMEK
1)gradle app-de  compile 'com.android.support:appcompat-v7:25.0.0'
  Elave edib sync now basiriq
2)Kodumuzda 
 StyleableToast.makeText(getApplicationContext(), "Got it!", R.style.exampleToast).show();
3)style.xml-de  exampleToast yaradiriq 
<style name="exampleToast">
   <item name="colorBackground">#94ffab</item>
   <item name="textColor">#000</item>
  <!-- <item name="iconLeft">@drawable/ic_airplanemode_inactive_black_24dp</item> -->
</style>
Ve gorunduyu kimi toast mesajimizi istediyimiz kimi stil verdik
Ferqi diller ucun string.xml -ler , avtomatik androidin diline gore secilmesi
String.xml=imizi acdiqda  sagda ustde open editor  var ona basiriq 
Daha sonra orda  dunya  seklinde icon var ora basib olkeler secirik
Ve uygun olaraq her dil ucun tercumesin qeyd edirik 
Biz programi run etdikde  android deviceda dil ne secsek avtomatik ozu deyisecek
 
Yorumlar
Yorum Gönder