30 Ocak 2017 Pazartesi

Android Uygulaması Geliştirme

Uzun zaman sonrasında yeniden android ile çalışmalara başladım. Size oldukça yararlı android kodlama örnekleri paylaşacağım. Bu başlangıcım şirkette yapacağımız radyo kontrolörün işlemcisinin işletim sisteminin android olması sayesinde oldu. Şirketim bana çok fazla sorumluluk veriyor. Bu yeni bir mühendis için çok iyi bir itici  güç. Kodum her ne kadar çok komplike olmasa da sonrasında daha güzel işler çıkaracağıma inanıyorum.

Buyrun buradan yakın;

activity_main.xml kısmı; Belirleme ve çağırma metodları;


<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="vertical"     android:paddingBottom="@dimen/activity_vertical_margin"     android:paddingLeft="@dimen/activity_horizontal_margin"     android:paddingRight="@dimen/activity_horizontal_margin"     android:paddingTop="@dimen/activity_vertical_margin"     tools:context=".MainActivity">     <TextView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginBottom="16dp"         android:text="Quantity"         android:textAllCaps="true" />     <LinearLayout         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:orientation="horizontal">         <Button             android:layout_width="48dp"             android:layout_height="48dp"             android:onClick="decrement"             android:text="-" />         <TextView             android:id="@+id/quantity_text_view"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_marginLeft="8dp"             android:layout_marginRight="8dp"             android:text="0"             android:textColor="@android:color/black"             android:textSize="16sp" />         <Button             android:layout_width="48dp"             android:layout_height="48dp"             android:onClick="increment"             android:text="+" />     </LinearLayout>     <TextView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginTop="16dp"         android:text="Price"         android:textAllCaps="true" />     <TextView         android:id="@+id/price_text_view"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginTop="16dp"         android:text="$0"         android:textColor="@android:color/black"         android:textSize="16sp" />     <Button         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginTop="16dp"         android:onClick="submitOrder"         android:text="Order" /> </LinearLayout>


MainActivity.java kısmı;


package com.example.android.justjava;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.TextView;

import java.text.NumberFormat;


public class MainActivity extends ActionBarActivity {

    int quantity = 0;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public void increment(View view) {
        quantity = quantity + 1;
        display(quantity);

    }

    public void decrement(View view) {
        quantity = quantity - 1;
        display(quantity);
    }

    public void submitOrder(View view) {
        int price= calculatePrice();
        displayMessage(createOrderSummary(price));
    }
    /**     * Price komutunun hesaplanması     *     * @ return total price     * */    private int calculatePrice(){
        return quantity*5;
    }

    private String createOrderSummary(int price){
        String priceMessage="Name: Caner Ezeroglu\n";
        priceMessage = priceMessage + quantity+ " cups of coffee.";
        priceMessage +=" \nPrice $"+ price;
        priceMessage += "\nWHOOOO!";
        return priceMessage;
    }
/** * * Quantity nin görüntüsünü ekrana veren metod * * */    private void display(int number) {
        TextView quantityTextView = (TextView) findViewById(
                R.id.quantity_text_view);
        quantityTextView.setText("" + number);
    }


    private void displayPrice(int number) {
        TextView priceTextView = (TextView) findViewById(R.id.price_text_view);
        priceTextView.setText(NumberFormat.getCurrencyInstance().format(number));
    }

    private void displayMessage(String message) {
        TextView priceTextView = (TextView) findViewById(R.id.price_text_view);
        priceTextView.setText(message);
    }
}







activity_main.xml kısmı;  basketbol sayısı örneği (court counter)


<RelativeLayout 
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">


    <LinearLayout        

android:layout_width="match_parent"        
android:layout_height="match_parent"        
android:background="@drawable/basketball"        
android:orientation="horizontal"        
android:scaleType="centerCrop">


        <LinearLayout            
android:id="@+id/activity_main"            
android:layout_width="0dp"            
android:layout_height="wrap_content"            
android:layout_weight="1"            
android:orientation="vertical"            
tools:context="com.example.android.courtcounter.MainActivity">
            <TextView                
android:id="@+id/team_text_view"                
android:layout_width="wrap_content"                
android:layout_height="wrap_content"                
android:layout_alignParentTop="true"                
android:layout_centerHorizontal="true"                
android:layout_gravity="center_horizontal"                
android:layout_marginTop="16dp"                
android:background="#009688"                
android:text="Team A!"                
android:textColor="@android:color/white"                
android:textSize="24sp" />
            <TextView                
android:id="@+id/score_text_view"                
android:layout_width="wrap_content"                
android:layout_height="wrap_content"                
android:layout_below="@id/team_text_view"                
android:layout_centerHorizontal="true"                
android:layout_gravity="center_horizontal"                
android:layout_marginTop="16dp"                
android:background="#009688"                
android:padding="16dp"                
android:text="0"                
android:textColor="@android:color/white"                
android:textSize="24sp" />

            <Button                
android:id="@+id/threeincrement_text_view"                
android:layout_width="match_parent"                
android:layout_height="wrap_content"                
android:layout_below="@id/score_text_view"                
android:layout_centerHorizontal="true"                
android:layout_marginTop="16dp"                
android:onClick="increment3"                
android:text="+3 poınts" />

            <Button                
android:id="@+id/twoincrement_text_view"                
android:layout_width="match_parent"                
android:layout_height="wrap_content"                
android:layout_below="@id/threeincrement_text_view"                
android:layout_centerHorizontal="true"                
android:layout_marginTop="16dp"                
android:onClick="increment2"                
android:text="+2 poınts" />
            <Button                
android:id="@+id/freethrow_text_view"                
android:layout_width="match_parent"                
android:layout_height="wrap_content"                
android:layout_below="@id/twoincrement_text_view"                
android:layout_centerHorizontal="true"                
android:layout_marginTop="16dp"                
android:onClick="free"                
android:text="FREE THROW" />
        </LinearLayout>


        <LinearLayout

android:id="@+id/activity2_main"            
android:layout_width="0dp"            
android:layout_height="wrap_content"            
android:layout_weight="1"            
android:orientation="vertical"            
tools:context="com.example.android.courtcounter.MainActivity">

            <TextView                
android:id="@+id/team2_text_view"                
android:layout_width="wrap_content"                
android:layout_height="wrap_content"                
android:layout_alignParentTop="true"                
android:layout_centerHorizontal="true"                
android:layout_gravity="center_horizontal"                
android:layout_marginTop="16dp"                
android:background="#009688"                
android:text="Team B!"                
android:textColor="@android:color/white"                
android:textSize="24sp" />

            <TextView                
android:id="@+id/score2_text_view"                
android:layout_width="wrap_content"                
android:layout_height="wrap_content"                
android:layout_below="@id/team2_text_view"                
android:layout_centerHorizontal="true"                
android:layout_gravity="center_horizontal"                
android:layout_marginTop="16dp"                
android:background="#009688"                
android:padding="16dp"                
android:text="0"                
android:textColor="@android:color/white"                
android:textSize="24sp" />

            <Button                

android:id="@+id/threeincrement2_text_view"                
android:layout_width="match_parent"                
android:layout_height="wrap_content"                
android:layout_below="@id/score2_text_view"                
android:layout_centerHorizontal="true"                
android:layout_marginTop="16dp"                
android:onClick="increment32"                
android:text="+3 poınts" />

            <Button                

android:id="@+id/twoincrement2_text_view"                
android:layout_width="match_parent"                
android:layout_height="wrap_content"                
android:layout_below="@id/threeincrement2_text_view"                
android:layout_centerHorizontal="true"                
android:layout_marginTop="16dp"                
android:onClick="increment22"                
android:text="+2 poınts" />

            <Button                

android:id="@+id/freethrow2_text_view"                
android:layout_width="match_parent"                
android:layout_height="wrap_content"                
android:layout_below="@id/twoincrement2_text_view"                
android:layout_centerHorizontal="true"                
android:layout_marginTop="16dp"                
android:onClick="free2"                
android:text="FREE THROW" />
        </LinearLayout>


    </LinearLayout>


    <Button        
android:id="@+id/reset"
android:layout_width="wrap_content"        
android:layout_height="wrap_content"        
android:layout_alignParentBottom="true"        
android:layout_centerHorizontal="true"        
android:layout_marginTop="16dp"        
android:background="#009688"        
android:onClick="Reset"        
android:text="Reset"        
android:textColor="@android:color/white"        
android:textSize="16sp" />
</RelativeLayout>






MainActivity.java kısmı;


package com.example.android.courtcounter;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import java.text.NumberFormat;
public class MainActivity extends AppCompatActivity {

    int score = 0;
    int score2 = 0;

    @Override    

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void increment3(View view) {
        score = score + 3;
        display(score);
    }

    public void increment2(View view) {
        score = score + 2;
        display(score);
    }

    public void free(View view) {
        score = score + 1;
        display(score);
    }


    public void increment32(View view) {
        score2 = score2 + 3;
        display2(score2);
    }

    public void increment22(View view) {
        score2 = score2 + 2;
        display2(score2);
    }

    public void free2(View view) {
        score2 = score2 + 1;
        display2(score2);
    }

    public void Reset(View view) {
        score = 0;
        score2 = 0;
        display(score);
        display2(score2);
    }

    private void display(int number) {
        TextView scoreTextView = (TextView) findViewById(
                R.id.score_text_view);
        scoreTextView.setText("" + number);
    }

    private void displayScore(int number) {
        TextView scoreTextView = (TextView) findViewById(R.id.score_text_view);
        scoreTextView.setText(NumberFormat.getCurrencyInstance().format(number));
    }

    private void display2(int number) {
        TextView score2TextView = (TextView) findViewById(
                R.id.score2_text_view);
        score2TextView.setText("" + number);
    }

    private void displayScore2(int number) {
        TextView score2TextView = (TextView) findViewById(R.id.score2_text_view);
        score2TextView.setText(NumberFormat.getCurrencyInstance().format(number));
    }


}




Yukarıdaki programlamada kullandığım resimde bu. Resimi öncelikle Android Studio yu açtığımızda sağında yer alan app sekmesine tıklayın res dosyasından drawable a sağ tıklayın ve show explorer diyin. açılan klasöre istediğiniz resmi koyabilirsiniz ama ekrana göre resmi ayarlamanız gerekmektedir. Benim kullandığım resim ise bu.




activity_main.xml kısmı; 20.02.2017 örneği



<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" 
android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.android.courtcounter.MainActivity" android:orientation ="vertical" >

<TextView 
android:id="@+id/team_text_view" 
android:layout_width="wrap_content" android:layout_height="wrap_content" 
android:text="Team A!" 
android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="16dp" />

<TextView 
android:id="@+id/score_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" 
android:text="0" 
android:layout_below="@id/team_text_view" android:layout_centerHorizontal="true" android:layout_marginTop="16dp" />

<Button 
android:id="@+id/threeincrement_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" 
android:onClick="increment3" 
android:text="+3 poınts" 
android:layout_below="@id/score_text_view" android:layout_centerHorizontal="true" android:layout_marginTop="16dp" />

<Button 
android:id="@+id/twoincrement_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" 
android:onClick="increment2" 
android:text="+2 poınts" android:layout_below="@id/threeincrement_text_view" android:layout_centerHorizontal="true" android:layout_marginTop="16dp" />

<Button 
android:id="@+id/freethrow_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" 
android:onClick="free" 
android:text="FREE THROW" android:layout_below="@id/twoincrement_text_view" android:layout_centerHorizontal="true" android:layout_marginTop="16dp" />

</RelativeLayout>







MainActivity.java kısmı;

package com.example.android.courtcounter;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import java.text.NumberFormat;


public class MainActivity extends AppCompatActivity {

    int score = 0;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void increment3 (View view)  {
        score = score + 3;
        display(score);
    }

    public void increment2 (View view) {
        score = score + 2;
        display(score);
    }

    public void free (View view) {
        score = score + 1;
        display(score);
    }

    private void display(int number) {
        TextView scoreTextView = (TextView) findViewById(
                R.id.score_text_view);
        scoreTextView.setText("" + number);
    }

    private void displayScore(int number) {
        TextView scoreTextView = (TextView) findViewById(R.id.score_text_view);
        scoreTextView.setText(NumberFormat.getCurrencyInstance().format(number));
    }

}






activity_main.xml kısmı;


<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="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="16dp"
    android:text="Quantity"
    android:textAllCaps="true" />

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <Button
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:onClick="decrement"
        android:text="-" />

    <TextView
        android:id="@+id/quantity_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:text="0"
        android:textColor="@android:color/black"
        android:textSize="16sp" />

    <Button
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:onClick="increment"
        android:text="+" />

</LinearLayout>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:text="Price"
    android:textAllCaps="true" />

<TextView
    android:id="@+id/price_text_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:text="$0"
    android:textColor="@android:color/black"
    android:textSize="16sp" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:onClick="submitOrder"
    android:text="Order" />

</LinearLayout>





MainActivity.java kısmı;


package com.example.android.justjava;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.TextView;

import java.text.NumberFormat;


public class MainActivity extends ActionBarActivity {

    int quantity = 0;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    
    public void increment(View view) {
        quantity = quantity + 1;
        display(quantity);
    }

    
    public void decrement(View view) {
        quantity = quantity - 1;
        display(quantity);
    }

    
    public void submitOrder(View view) {
        int price= quantity*5;
     String priceMessage="Price $"+ (price)+" for "+quantity+" cups of coffee.";
        priceMessage=priceMessage+"\nWHOOOO!";
        displayMessage(priceMessage);
    }

    
    private void display(int number) {
        TextView quantityTextView = (TextView) findViewById(
                R.id.quantity_text_view);
        quantityTextView.setText("" + number);
    }

    
    private void displayPrice(int number) {
        TextView priceTextView = (TextView) findViewById(R.id.price_text_view);
        priceTextView.setText(NumberFormat.getCurrencyInstance().format(number));
    }
    
    private void displayMessage(String message) {
        TextView priceTextView = (TextView) findViewById(R.id.price_text_view);
        priceTextView.setText(message);
    }
}



Öncelikle android yazılımında iki kısım vardır. Default isimleri activity_main.xml ve MainActivity.java. activity_main.xml ile görüntüde değişimleri gerçekleştiriyoruz. Bu değişimler Parent ve Child olarak tanımlanan aslında kümeler gibi çalışan bir sisteme dayanmaktadır. Alt küme kendine has özelliklerini belirleyebilir. Ama Parent ta bunu etkiler. Kodları yorumlama kabiliyetiniz eğer artmışsa zaten daha kolay anlarsınız.

activity_main.xml kısmındaki özellikleri ve yazılım mantığını biraz anlatmaya çalışalım. 


Örnek Kod 1:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#E65100"
    android:padding="16dp"
    >

    <TextView
        android:id="@+id/lyla_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:textSize="24sp"
        android:text="Lyla"
        android:textColor="@android:color/white"
        android:background="#304FFE"
        />

    <TextView
        android:id="@+id/me_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_toRightOf="@id/lyla_text_view"
        android:textSize="24sp"
        android:text="Me"
        android:textColor="@android:color/white"
        android:background="#304FFE"/>

    <TextView
        android:id="@+id/natalie_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_above="@id/lyla_text_view"
        android:textSize="24sp"
        android:text="Natalie" 
        android:textColor="@android:color/white"
        android:background="#304FFE"/>

    <TextView
        android:id="@+id/jennie_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:textSize="24sp"
        android:text="Jennie" 
        android:textColor="@android:color/white"
        android:background="#304FFE"/>

    <TextView
        android:id="@+id/omoju_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_above="@id/jennie_text_view"
        android:textSize="24sp"
        android:text="Omoju" 
        android:textColor="@android:color/white"
        android:background="#304FFE"/>

    <TextView
        android:id="@+id/amy_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_above="@id/omoju_text_view"
        android:textSize="24sp"
        android:text="Amy" 
        android:textColor="@android:color/white"
        android:background="#304FFE"/>

    <TextView
        android:id="@+id/ben_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:textSize="24sp"
        android:text="Ben" 
        android:textColor="@android:color/white"
        android:background="#304FFE"/>

    <TextView
        android:id="@+id/kunal_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@id/ben_text_view"
        android:textSize="24sp"
        android:text="Kunal" 
        android:textColor="@android:color/white"
        android:background="#304FFE"/>

    <TextView
        android:id="@+id/kagure_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
       android:layout_alignParentTop="true"
        android:layout_toRightOf="@id/ben_text_view"
        android:textSize="24sp"
        android:text="Kagure" 
        android:textColor="@android:color/white"
        android:background="#304FFE"/>


</RelativeLayout>





Örnek Kod 2:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:src="@drawable/ocean"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:scaleType="centerCrop"
        />

    <TextView
        android:text="You're invited!"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"
        android:textSize="45sp"
        android:background="#009688"
         android:paddingTop="16dp"
        android:paddingLeft="16dp"
        android:paddingBottom="8dp"/>

    <TextView
        android:text="Bonfire at the beach"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"
        android:textSize="24sp"
        android:background="#009688"
        android:paddingBottom="16dp"
        android:paddingLeft="16dp"/>


</LinearLayout>






Örnek Kod 3:


<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >

    <ImageView
        android:id="@+id/ocean_image_view"
        android:layout_width="56dp"
        android:layout_height="56dp"
        android:scaleType="centerCrop"
        android:src="@drawable/ocean" />

    <TextView
        android:id="@+id/pebble_beach_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Pebble Beach"
         android:layout_toRightOf="@id/ocean_image_view"
        android:textAppearance="?android:textAppearanceMedium" />

    <TextView
        android:id="@+id/california_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="California"
        android:layout_toRightOf="@id/ocean_image_view"
        android:layout_below="@id/pebble_beach_text_view"
        android:textAppearance="?android:textAppearanceSmall" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="10 miles away"
         android:layout_toRightOf="@id/ocean_image_view"
        android:layout_below="@id/california_text_view"
        android:textAppearance="?android:textAppearanceSmall" />


</RelativeLayout>







Uyarıyla başlayayım. Androidde yazılım stili camelCase diye adlandırılan bir tarzda oluyor. İlk yazılan harf küçük sonrasında boşluk bırakıp devam edilecek sözcüklerin yazımı ayrı değil ve ilk cümleleri büyük şeklinde olur.


Kodda kullanılan birkaç özelliği açıklamaya başlayayım. Şimdi öncelikle elimizde bulunan iki farklı layout var. Bunlardan biri LinearLayout diğeri ise RelativeLayout.


LinearLayout ekrana uygulanacak sembollerin hizalamasını horizantal ya da vertical e göre yaparak RelativeLayout a göre daha az kod kalabalığı yapar. RelativeLayout ta yerleştirme yapılabilmesi için iki adet seçenek vardır. 


RelativeLayout sayesinde uygulanacak sembol istenilen yere yerleştirilebilir. Bu yerleştirmeler çerçeveye yine yaslama yöntemi ile ve bir child ı referens alarak sağına soluna veya üstüne gibi komutlarla yerleştirme gerçekleştirlebilir. Bu komutları sağlayan komut ise layout_alignParentxxxx dir. Bu xxxx yazan yere Left, Right, Bottom ve Top seçenekleri yazılabilir. Bu belirlenen childların çevresine eğer başka bir child yerleştirilecekse bizim referanslarımız olur ve referansa göre eğer bir child ı yerleştirmek istiyorsak bu childı şu şekilde tanımlamamız gerekmektedir. Referans alınacak child kendi içinde android:id="@+id/childname" girilir. Referans alacak childın içine tanımlanan child konumu belirtilerek girilir. Bunu sağlayan komut ise layout_alignRightOf/alignLeftOf/above/below seçenekleriyle gerçekleştirilir. İki farklı yerleştirme seçeneğimiz daha vardır ve onlardanda yerleştirme tekniklerinden ilki padding. Padding sembolün normalde kapladığı alanı istenilen yönde genişletmesi ile kendini hizalar. Bunu kullanırken eğer çalışma alanı renksiz ise görüntüde bir abeslik olmayacaktır.  İkincisi ise layout_margin. Bu komut frame e göre hizalama yapar yani öteleme olur. Öteleme olduğundan dolayı sembolün belirlenen alanında bir değişme olmaz bu sayede eğer bu child renklendirilmiş ise görüntüde bir abeslik olmayacaktır. Seçenekler bunlar duruma göre düşünerek kararlar değiştirilebilir farklı bakış açılarından bakılarak bu bilgiler yorumlanabilir.



Bir mesafeyi konumu belirleyebilmek için bize bir ölçü birimi gerekmektedir. Android ekranındaki ölçü birimimiz ise "dp" dir. Yazının büyüklüğünü ayarlamak amacıylada textSize komutunu kullanıyoruz. Yazı boyutunun da ölçü birimi yine "sp" dir. Yazının rengi belirlemek amacıyla textColor komutu, Parent ve childların rengini belirlemek amacıyla ise de background komudu kullanılır. Renklerin belirlenmesinde android studio nun bize sunduğu seçenekleri kullanabileceğimiz gibi renk kodlarını girerekte bu seçimimizi gerçekleştirebiliriz.

Child isimlerine göre kendini sınıflandırır bu sınıflar TextView, ImageView, Button olabilir. bu tanımlamalar bizim görünüm olarak işimize yaradığı gibi MainActivity de yer alacak kodlarımızı da buradaki tanımlamalar kullanarak ilişkilendiriyoruz.  



ImageView da resim koyabilmemiz için bize gerekli olan kod @drawable'dır. Bu android de resimlerin atıldığı klasörün ismidir. Bu klasöre istediğimiz resmi ismini belirleyerek atacağız.
@drawable/imagename. Resimlerin ekranda hizalanması ve LinearLayout ile sembollerin ekrana yüzdelik olarak paylaştırılması konuları vardır. Resimlerin boyutu ekranın ona ayırdığı ölçütlere bazen uygun olmayabilir. Bu scaleType komutu ile ayarlanır. Bize sunulan seçenekler üzerinden yine bize uygun olanı seçilir (mesela centerCrop resmi sığacak şekilde ayarlamaya yarar) ya da android:layout_width, android:layout_height seçeneklerinden "dp" değerleri belirlenerek resmin ölçütü belirlenir. Sayfanın yüzdelik olarak bölüştürülmesi işleminde ise mrneğin LinearLayout vertical e ayarlanmış ise ve parent ta yer alan sadece textler ve image yer alıyorsa textlerede herhangi bir yüzdelik değer oluşturacak android:layout_width, android:layout_height değeri girilmemişse  image view geri kalan tüm alanın sahibi olur. Bunu yapabilmesi için android:layout_width="match_parent", android:layout_height="0dp", android:layout_weight="1" olmalıdır. Örneğin diğer textler 3 adet olup aynı değerler girilseydi alanlar %25 er olarak dağılırdı weight değerliği / toplam weight değerliği sembolün parent ta kaplayacağı alanı verir. Ayrıca parent'ıda doğrudan resim eklenebilir. android:background="@drawable/imagename". 


Alanların belirlenmesinde kullanılan android:layout_width, android:layout_height değerlerinden width horizontal yönünde bir belirteçtir. Height ise vertical yönde bir belirteç sağlamamıza yardımcı olur. Bu komutlar iki farklı şekilde yer alır. Bunlardan biri match_parent diğeri ise wrap_content tir. match parent alanın tamamını horizontal yada vertical yönde belirler. Wrap content ise sadece sembolün kaplayacağı kadar bir alan oluşturulması için kullanılır.


Eğer bir sorun yaşıyorsanız Google elbette ilk danışmanınız olmalı. Genelden en spesifik sorunuzun çözümünü iyi bir araştırmayla ulaşabilirsiniz. 

activity_main'i ayrıntısına kadar size anlatmaya çalıştım. Şimdide biraz MainActivity'e bakalım.

Altta yer alan kod örnekleri genel olarak javayı öğrenmeye yönelik yapılan alıştırmalardır. Fakat iyi bir androidçi olabilmek için öncelikle iyi bir javacı olmak gerekiyor. Çünkü şimdiye kadar anlattığımız görüntüde yer alan semboller aksiyona java yazılımı ile geçiyor.

Bundan sonrasına yine bu satırdan devam edeceğim beklemede kalın...

Örnek Kod 4:

activity_main


<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="vertical"    
android:paddingBottom="@dimen/activity_vertical_margin"    
android:paddingLeft="@dimen/activity_horizontal_margin"    
android:paddingRight="@dimen/activity_horizontal_margin"    
android:paddingTop="@dimen/activity_vertical_margin"    
tools:context=".MainActivity">

    <TextView        
android:id="@+id/display_text_view"        
android:layout_width="wrap_content"        
android:layout_height="wrap_content"        
android:text=""        
android:textSize="45sp" />

    <TextView        
android:id="@+id/display_text_view_2"        
android:layout_width="wrap_content"        
android:layout_height="wrap_content"        
android:text=""        
android:textSize="45sp" />

    <TextView        
android:id="@+id/display_text_view_3"        
android:layout_width="wrap_content"        
android:layout_height="wrap_content"        
android:text=""        
android:textSize="45sp" />

</LinearLayout>





MainActivity



package com.example.android.practiceset2;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // PASTE CODE YOU WANT TO TEST HERE        int raspberryPrice = 5;
        display1("1 box: $" + raspberryPrice);
        raspberryPrice = 10;
        display2("2 boxes: $" + (raspberryPrice));
        display3("3 boxes: $" + (raspberryPrice * 3));
    }

  
    public void display(String text) {
        TextView t = (TextView) findViewById(R.id.display_text_view);
        t.setText(text);
    }

    public void display(int text) {
        TextView t = (TextView) findViewById(R.id.display_text_view);
        t.setText(text + "");
    }

    public void display1(String text) {
        display(text);
    }

    public void display2(String text) {
        TextView t = (TextView) findViewById(R.id.display_text_view_2);
        t.setText(text);
    }

    public void display3(String text) {
        TextView t = (TextView) findViewById(R.id.display_text_view_3);
        t.setText(text);
    }
}




Dosyanın İçine Yazı Yazdırma
package blog;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class txtveriyazdirma {

public static void main(String[] args){
try
{
FileWriter fw = new FileWriter("blog.txt");
PrintWriter pw = new PrintWriter (fw);
pw.println("Android başlangıcı");
pw.close();
}

catch (IOException e)
{
System.out.println("HATA !!!!");
}
}
}



BufferedReader bize yüksek bir tampon bellek sağlar. BufferedReader kullanılmazsa read metodu her çağırıldığında dosyadan byte'lar çekilir, karakterlere dönüştürülür ve döndürülür. Bu da programın performansının düşmesine yol açar. FileOutputStream binary bir dosyaya byte tipinde bir değişken yazmak için kullanılır.



Dosyadaki Yazıyı Konsola Bastırma
package blog;

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

public class Vericekme {


public static void main (String[] args){
try
{
FileReader fr = new FileReader("blog.txt");
BufferedReader br = new BufferedReader(fr);
String str;
while ((str = br.readLine()) != null)
{
System.out.println(str + "\n");
}
br.close();
}
catch (IOException e)
{
System.out.println("Dosya okumadı.");
}
}
}




İstenilen Dosya Konumundan Text Dosyası Metnini Konsola Basma
package blog;
import java.io.*;

public class Dosyaokuma {

            public static void main(String[] args) {
                         
                        BufferedReader br = null;
                        try {

                                   String sCurrentLine;

 br = new BufferedReader(new FileReader("C:\\Users/ustajyer1/Desktop/caca.txt"));

                                   while ((sCurrentLine = br.readLine()) != null) {
                                               System.out.println(sCurrentLine);
                                   }
                                  
                        } catch (IOException e) {
                                   e.printStackTrace();
                        } finally {
                                   try {
                                               if (br != null)br.close();
                                   } catch (IOException ex) {
                                               ex.printStackTrace();
                                   }
                        }

            }
}




İstenilen Konumdaki Dosyadan İstenilen Metni Silme ve Yeni Metni Konsola Basma
package art;
import java.io.*;
public class dedede {
public static void main(String[] args) {
BufferedReader br = null;
int z = 0;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader("C:\\Users/Caner/Desktop/caca.txt"));
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
int occurrences = 0;
for(char c : sCurrentLine.toCharArray()){
   if(c == 'a'){
      occurrences++;
   }
}
sCurrentLine= sCurrentLine.replaceAll("a"," ");

System.out.println(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}



Günlük hayatda sözel olarak bir soru sorulduğunda ki karar aşaması örneği
package blog;

import java.util.Scanner;

public class bisikleteBinmeKarari {
           
             public static void main(String[] args)
                {
               
                        System.out.println("Yarın bisiklete binmek istermisiniz?");
                       
                    Scanner kararAl = new Scanner(System.in);
                    System.out.printf("Kararı gir E/H  : ");
                    String karar1 = kararAl.next();
                   
                    if(karar1.equals("E"))  {
                        System.out.printf( "Sevindim :D");
                    }
                   else
                   {
                       System.out.printf("Size İyi eğlenceler");
                   }
                } // main bitti
            }// class bitti



0’dan 100’e kadar olan çift sayıları sayma

package blog;

public class ciftSayilariBulma {
           
            public static void main (String[] args){
           
             int e = 2;
            while (e <= 100) {
              System.out.print(" " + e);
              e += 2;
            }}}

Girilen sayının asal sayı olup olmadığını görme
package blog;
import java.util.Scanner;
public class asalSayi {

            public static String asal(int x){
                        int sayac=0;
                        for(int i=2;i<x;i++){
                                   if(x%i==0){
                                               sayac++;                                                                     
                                   }
                        }
                        if(sayac==0){
                                   return "Girdiğiniz sayı asal sayıdır.";
                        }
                        else {
                                   return "Girdiğiniz sayı asal değildir.";
                        }
            }
            public static void main(String[] args) {
                        Scanner oku=new Scanner(System.in);
                        System.out.println("Bir sayı giriniz");
                        int x=oku.nextInt();
                        System.out.println(asal(x));
            }
       }




Farklı Hesap Makinesi Yapımı;
package blog;
import java.util.*;
public class hesapmakinesi {
public static void main (String [] args){
Scanner oku= new Scanner(System.in);
Scanner input = new Scanner(System.in);
int  sonuc, islem;
sonuc=0;

int i;

System.out.println("Toplama islemi icin 1, cikarma islemi icin 2, carpma islemi icin 3, bolme islemi icin 4 yazınız:");
islem=oku.nextInt();
System.out.println("Aynı işlemlerin yapılacağı sayıları boşluk bırakarak giriniz ve enter'a basınız:");
String string=input.nextLine();
String[] parts = string.split(" ");
int[] dizi=new int[parts.length];
for(i=0;i<parts.length;++i)
dizi[i]=Integer.parseInt(parts[i]);
if(islem==1){
for(i=0;i<dizi.length;++i)
sonuc+=dizi[i];
System.out.println("Toplama islemi sonucu :" +sonuc);
}                                                                                                                                    
if(islem==2){
for(i=0;i<dizi.length;++i)
sonuc-=dizi[i];
System.out.println("cikarma islemi sonucu :" +sonuc);
}
if(islem==3){
for(i=0;i<dizi.length;++i)
sonuc*=dizi[i];
System.out.println("carpma islemi sonucu :" +sonuc);
}
if(islem==4){
for(i=0;i<dizi.length;++i)
sonuc/=dizi[i];
System.out.println("bölme islemi sonucu :" +sonuc);
}}}


Farklı hesap makinasi yapımının çalışmasında istediğin işlemi yapabilmen için gerekli olan bilgi yer almaktadır. Girilen işlem okunur. İşlem yapılacak sayılar boşluk konularak belli edilir. Her boşluk işlemin yapılacağı bölgeyi gösterir. Bunu split parseInt metoduyla gerçekleştirdik. İşlem bitiminde enter’a basılır ve yapılan işlem belirtilerek karşılığı konsola bastırılır. Split’i boşluk görmesine göre ayarladığımız için String şeklinde yazılmış text deki sayıları ayrı sayılar olarak tanımlayabilmemize yarar. parseInt yönteminde String den integer türünden bir değer alabilmek için kullanırız.


İstediğimiz klasörün sahip olduğu dosyaları gösterir;
package blog;

import java.io.File;
import java.util.ArrayList;

public class deneme {
public static void main(String[] args) {
File file =  new  File ( "C:\\Users/ustajyer1/Desktop/bisuru kitap" ); 
String [] names = file . list (); 

for ( String name : names ) 
    if  ( new  File ( "C:\\Users/ustajyer1/Desktop/bisuru kitap\\"  + name ). isDirectory ()) 
 {         
System . out . println ( name );    
 } 
}
}
}

File.list; Bu kodlamada dosyaları listelemek için file.list yöntemi kullanılmalıdır.

isDirectory; Bu soyut yol adı ile belirtilen dosyanın bir string olup olmadığını test eder. Dosya bir string değildir, ya da aynı dosyanın çeşitli özellikleri aynı anda kullanılması gerektiğinde durumlarda bir I / O durum belirteci olarak kullanılır.


İstediğimiz klasörün altındaki bütün alt dosyaları bağlantılarıyla gösterir;

package blog;
 
import java.io.File;

public class deneme2 {

    public void walk( String path ) {

        File root = new File( path );
        File[] list = root.listFiles();

        if (list == null) return;

        for ( File f : list ) {
            if ( f.isDirectory() ) {
                walk( f.getAbsolutePath() );
                System.out.println( "Dir:" + f.getAbsoluteFile() );
            }
            else {
                System.out.println( "File:" + f.getAbsoluteFile() );
            }}}

    public static void main(String[] args) {
    
        deneme2 fw = new deneme2();
        fw.walk( "C:\\Users/ustajyer1/Desktop/bisuru kitap" );
    }}


getAbsoluteFile(); Geçerli file nesnesinin mutlak yolunda bulunan dosyayı temsil eden bir File nesnesinin yeni bir örneğidir.
File root = new File( path );
File[] list = root.listFiles();  seçtiğimiz dosyanın bütün klasörlerini gösterilmesine yarar.




Okunacak kalsörün adresini girip, ardından hangi harfin veya cümlenin o text de ne kadar tekrar edildiğini bulma;

package blog;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;

import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class karaktersayisinibulmak {
 public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
String cumle,harf;
int harfSayisi = 0;
System.out.println("Bir konum giriniz: ");
cumle = input.nextLine();
File file = new File(cumle);
FileReader fr;
String str = "";
String okunan = "";
try {
   fr = new FileReader(file);    
   BufferedReader br = new BufferedReader(fr);
while ((str = br.readLine()) != null)
{
okunan+=str;  }
br.close();        }
catch (IOException e){
System.out.println("hata");    }
System.out.println("Bir harf giriniz: ");
harf = input.next();
for(int i = 0; i < okunan.length() - 1;i++)
{
if(okunan.substring(i,i+1).equals(harf))
harfSayisi++;  }
System.out.println(harf + " harfi " + harfSayisi + " defa tekrar etmiştir.");
}
}


Android de eclipse üzerinden sanal telefon kullanarak Hello World yazdırmak;
Main Activity Sınıfında;
package com.caner.deneme12;

import android.app.Activity;
import android.os.Bundle;

import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;

}}


Activity: Uygulama içindeki ekranları temsil ediyor. işlemler olarak tabir edilir SDK ile gelen onCreate, onPass, onDestroy... gibi hazır fonksiyonlar bulundurur. Bu fonksiyonları source kısmının override/implement Methods kısmından görebilirsin. 
onCreate: Bu metotta genel olaraksetContentView metodu çalıştırılarak bir layout dosyasından ekran tasarımı yüklenir. Eğer ekran ilk oluştuğunda tanımlanması gereken başka değişkenler ve aksiyonlar varsa, onlar da onCreate metodu içinde gerçekleştirilebilirler. Activity ilk oluşturulduğunda çağırılır. Activity herhangi bir nedenden ötürü yok edilmezse (bellek ihtiyacı ya da finish metodu) bir daha çalıştırılmaz. 


Uygulamadan bir şekilde çıkılması sonunda(yani yok edilmesinde). Sistemin daha fazla belleğe sahip olduğunda ve ya Activity çok uzun çalıştığı için durdurulabilir. Ugulama sonlandırıldığında Activity tamamiyle kaybolur bunun nedeni sistem artık Activitye gerek olmadığını farz etmesinden dolayıdır. Activity sistem tarafından yok edildiyse bilgiler saklanır ve kullanıcı yeniden işleme başladığında kayıttaki bilgiler Activity oluşturularak geri gelir. Sistem tarafından kaybolan bilgiler bundle aracılığıyla korunur. Normalde Bundle kullanılarak Activity layoutundaki tüm view nesneleri saklanır. 
Android sistemin son durum değerlerini koruyabilmek için  tüm Viewları android:id niteliğinden sağlanan unique ID'ye sahip olmak zorundadır.
Activity durumlaruı için daha fazla veri kaydı yapabilmek için onSaveInstanceState() callback methodu @Override yapmak gerekiyor. Uygulamanın Activity'si durmaya başlandığında, sistem tarafından onSaveInstanceState() metodu çağrılır. 
Her zaman onSaveInstanceState()'in superclass'ını çağırılmalıdır ki, metodun geçerli View hiyerarşisinin durumunu da kaydedebilsin. <LinearLayout xmlns:android = "http : // schemas.android.com /apk/res/android"


otomatik olarak ekrana gelen bu kodlamada ki res Android uygulamalarında ekran tasarımları res klasörü altında bulunan layout dosyaları ile belirlenir. Bu dosyalar xml formatında hazırlanan dosyalardır ve Android uygulamalarına özel etiketler kullanarak görsel öğelerin yerleşimlerini ve özelliklerini bildirirler.
Bir ekranın görünümü genellikle iki farklı yerleşim tipi kullanılarak belirlenir. Bunlar RelativeLayout ve LinearLayout olarak ikiye ayrılır. 

 ListView öğesinin altına başka bir öğe eklendiğinde ilk olarak liste ve listenin altında bu yeni öğe görüntülenir. Öğelerin uzunluk ve genişlikleri android:layout_width ve android :layout_height özellikleriyle belirlenir.
Burada fill_parent (ana öğe ne kadar genişse hepsini doldurur) ve wrap_content (öğe içerisinde yer alan metin veya resim kadar yer kaplar) değerleri kullanılabileceği gibi, piksel cinsinden uzunluk da verilebilir. Eğer piksel vererek ebat belirleyeceksek, px birimi yerine dp birimini kullanmamız faydalı olacaktır. Android cihazlarda farklı ebatlarda ekranlar olduğundan, pxcinsinden verilen piksellerin tasarımı her cihazda farklı oluşturacaktır. dp birimi ise ekran boyutuna göre ölçeklendirme yapmaktadır ve farklı cihazlarda benzer görünümler elde etmenizi sağlar.

LinearLayout yerleşimi kullanıldığında öğeler sırayla ekrana dizilirler ve ekrandaki yerleşimleri ekranın en tepesinden en altına doğru sırayla gerçekleşir. 
RelativeLayout görsel öğeleri diğer öğelere göre referans alarak dizer. RelativeLayout tasarımında ilk eklenen öğe ekranın en tepesinde yer alır. Daha sonra eklenen öğeler android:layout_below (verilen ID’nin altında),android:layout_above (verilen ID’nin üzerinde), android:layout_toLeftOf (verilen ID’nin solunda) ve android:layout_toRightOf (verilen ID’nin sağında) şeklinde sıralanır. Bu şekilde ekranda oluşturulan bütün öğeleri bir öğeyi referans alarak dizmemiz mümkündür.
Android: id özelliği her öğeye bir tanımlayıcı verilmesini sağlar ve öğelere kaynak kod içinden erişmemize ve müdahale etmemize yardımcı olur. Burada yaratılan id değerleri R dosyasında otomatik olarak oluşturulur ve bunlara kaynak kod içinden aşağıdaki gibi erişilir.
EditText titleView = (EditText) findViewById (R.id.note_title); findViewById metodu, R dosyası içinden note_title id’sine sahip EditText öğesine erişmemizi sağlar. Bu şekilde ekran üzerindeki öğelerin özelliklerini değiştirebilir ya da aksiyonlar ekleyebiliriz.
((Button)findViewById(R.id.close_button)). setOnClickListener (new OnClickListener() { @Override public void onClick(View v) { finish(); } });
Yukarıdaki örnekte close_button adlı düğmeye setOnClickListener metodu kullanılarak düğmeye basıldığında harekete geçen bir eylem eklenmiştir. Kullanıcı düğmeye bastığında finish metodu harekete geçerek ekranı kapatacaktır. Yani Activity o an bitmiştir.
Layout dosyalarında bir öğeye id atanırken @+id yazımı kullanılır. Bu şekilde öğelere kendi belirlediğimiz isimleri verebiliriz. @id ise layout dosyasında önceden tanımlanmış bir öğeye referans vermek için kullanılır.@drawable, drawable klasörüne atılan resim dosyalarına referans verir. Bu şekilde bir resim yerleştirmek ya da arka plan belirlemek istiyorsak kaynak belirtmek için @drawable yazımını kullanmamız gerekir. Bir düğmeye ya da metin öğesine string.xml dosyasında belirttiğimiz bir yazıyı koymak istiyorsak @string yazımıyla bu dosyada bulunan değerlere erişebiliriz. @android ile işletim sisteminde tanımlanmış değerlere erişebiliriz.


İstediğimiz kalsörün görünüm verilerine ulaşabilmemiz amacıyla kullanılan layout un istenilenleri bilgisayar tarafından anlaşılabilmesi için unic değerler atanıyordu. Bu unic değerlerin saklandığı kısma *.R klasörü diyoruz. Bunun üzerinde değişiklik yapmamıza gerek yok fakat bazen yanlış tanımlamalar yapabiliyoruz bu nedenle ctrl+z ile yaptığımız tanımlamayı bu klasöre gelerek geri alabiliyoruz.
Res klasörünün altında ki androidmanifestte bütün activitylerin tanımlanması gerekir.
fill_parrent = layout_width de ekranın alt kısmını tamamen kaplamak layouth_height da yükseklik kısmını tamamen kapla anlamında . Heigh da yazı yazdıkça alt satıra gidiyor                            telefonun ekranı bittikce
İSİM ATAMA
id/ = daha önceden kullanılan bir id yi dahil etmek için 
@layout/ = da resource klasörünün altındaki layout klasörünün altındaki bir veriye ulaşmak amacıyl kullanılır.
@+id = yebir id oluşturmak amacıyla kullanılır.




Yeni Package Açarak Telefonda 0’daki Sayıyı Uygulama Yazarak Arttırıp Azaltmak:
MainActivity Bölümüne;
package com.caner.besdakika;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}}

MainActivityle görünüm olarak istenilen özellikler burada aktifleştiriliyor.


activity_main bölümü
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="35dp"
        android:gravity="center"
        android:text="Sonuç = 0" />
    
    <Button
                                                                                                                         
        android:layout_width="250dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:text="Ekle"
android:id="@+id/bEkle"
/>
    
   
    <Button
        
        android:layout_width="250dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:text="Cikar"
android:id="@+id/bCikar"
/>
    
    
</LinearLayout>

Burada yazılan başlığın boyu konumu, boyutu ayarlandı. Tuşlar aktifleştirildi.




Mainde Button importunu atarak yine ekle ve cikar da işlem yapabilmek için aktifleştiriyoruz. TextViewde de sonucEkranında onCreate metodlarıyla layout dosyasıyla eşleştiriyoruz. Ekle butonunu aktifleştiriyoruz öncelikle. Bütün değerler int olarak R dosyasına gidiyor. Orada unic değerini alıyor.
Buttonu aktif yapmak için textview de ki dosyaları belirterek aktifleştiriyoruz.(Button) Layoutdaki öğelerimizi java dosyamızdaki değişkenlerle bu şekilde entegre etmiş oluyoruz. 
Bundan sonra ekle butonuna basıldığında sonuc bir artacak bunu yapabilmek için öncelikle setOnClickListener’ı kullanmammız gerekiyor. onClickListener tipinde bir değerimiz olmadığından dolayı biz kendimiz bir tane fonksiyonla oluşturuyoruz. İki tane onClickListener kullandığımızdan dolayı yeni oluşturulanı belirtmek amacıyla View. onClickListener’ı kullanıyoruz.
Gösterilen sayı diye bir değişken atadık ve bunu bir artırma işlemini uyguladık.
Toplama ve Çıkarma işleminin yapılımı ve yansıtılması işlemini yapdık.
İstediğimiz kalsörün görünüm verilerine ulaşabilmemiz amacıyla kullanılan layout’un istenilenleri bilgisayar tarafından anlaşılabilmesi için unic değerler atanıyordu. Bu unic değerlerin saklandığı kısma *.R klasörü diyoruz. Bunun üzerinde değişiklik yapmamıza gerek yok fakat bazen yanlış tanımlamalar yapabiliyoruz bu nedenle ctrl+z ile yaptığımız tanımlamayı bu klasöre gelerek geri alabiliyoruz.





MAIN KISMI
package com.caner.besdakika;              
import android.app.Activity;
import android.os.Bundle;
 import android.view*;
import android.widget.*;
public class MainActivity extends Activity {          
Button ekle, cikar;
TextView sonucEkrani;
int gösterilenSayi;    int gosterilenSayi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gosterilenSayi=0;
ekle=(Button) findViewById(R.id.bEkle);
cikar=(Button) findViewById(R.id.bCikar);
sonucEkrani = (TextView) findViewById(R.id.tvSonuc);
ekle.setOnClickListener(new View.OnClickListener(){
@Override                                                                                                                                        
public void onClick(View v) {                gosterilenSayi++;
sonucEkrani.setText("Sonuc = " +gosterilenSayi); }});
cikar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
gosterilenSayi--;
sonucEkrani.setText("Sonuc = " +gosterilenSayi);}});}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;}}



ACTIVITY KISMI
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/tvSonuc"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"

        android:textSize="35dp"
        android:gravity="center"
        android:text="Sonuç = 0" />
    <Button                                                                                                                                                         
        android:layout_width="250dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:text="Ekle"
android:id="@+id/bEkle"       />
    <Button
        android:layout_width="250dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:text="Cikar"
android:id="@+id/bCikar"      />
</LinearLayout>



Androidde Sanal Telefona Resim Atma;
Öncelikle androide atılacak resim .png uzantılı olmalı. Buna da baktım neden png diye en başta en kaliteli görüntü bu resim türünde oluyormuş. İnternete atarken ve sıkıştırma yapılırken ve renk destekleme çeşitliliği açısından diğerlerinden üstünmüş.
 Alpha Transparency diye bir şey var yani aktarım ve sıkıştırmada kayıpları azzaltıp görüntüsü kaliteli olduğundan dolayı netliği genelde daha iyi olduğundan tercih edilmiş.
Src(kaynak dosyaları) klasörünün altındaki Main activity classından hiçbir şey değiştirmeden. Yeni bir android xml field açıyoruz. Diğer .xml leride kapatıyoruz. yazılan kod;
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:background="@drawable/androidress"    >
</LinearLayout>
Klasörü refresh yaptıkdan sonra değişim, xml'in graphic layout sekmesinden gözlenebiliyor.





public class MainActivity extends Activity. Activity, MainActivity nin bir üst sınıfıdır.Normalde MainActivity sınıfını NEW->OTHER->Android Application Projecten açıldı.Bu sefer ki yeni sınıfımızı NEW->CLASS dan normal bir sınıf açarak yapıyoruz.OnCreate, metodunu kolay bir şekilde getirebilmek için işlem yapılan sınıfta boş bir yere sağ klik yapılıyor.Source->Override/Implement Methods->OnCreate(Bundle) seçilir. setContentView ile layout dosyası Java dosyasının içine atılıyor.
Oluşturacağımız her ekran için bir activity tanımlıyor olmamız gerekiyor. Çalıştığımız klasörde iki class açıkken ilk yaptığımız klas işlemini çalıştırıp diğer yaptığımız class işlemine geçerken  telefon similatörün de ikinci çalışmanın görüntüsü olmaz birincinin görüntüsü olur. Yenisini çalıştırabilmemiz için uygulamanın kontrollerini gerçekleştirdiğimiz AndroidManifest.xml den faydalanırız.<acttivity> kısmında ki MainActivity class ismini şuan ki çalıştığımız class ismiyle değiştirmeliyiz.
HosgeldinEkrani Classı bu ilk class programda hata verdi ve anlatımım bitmedi zamanım kalmadığı için şimdi gönderiyorum. Yarın hatayı da bulup sana temiz ve anlatılmış şekilde atarım.
import android.app.Activity;      import android.content.Intent;   import android.os.Bundle;
public class HosgeldinEkrani extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);
setContentView(R.layout.hosgel);
Thread zamanlayici = new Thread(){      
public void run(){                     
try {      sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
Intent mainActivityCagir= new Intent("com.caner.Besdakika.MAINACTIVITY");
startActivity(mainActivityCagir); }}
hosgel.xml bu bizim yeni oluşturduğumuz xml dosyası.
MAIN ACTIVITY=> Bir değişiklik yapılmadı.




Besdakika Manifest
Manifest dosyasında yaptığım bir hatayı buldum ve ekledikerim var onlarıda düzenleyeceğim.
<?xml version="1.0" encoding="utf-8"?>
    package="com.caner.besdakika"
    android:versionCode="1"
    android:versionName="1.0" >           <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />   <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >      <activity
            android:name="com.caner.Besdakika.HosgeldinEkrani"
            android:label="@string/app_name" >   <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>  </activity>         <activity
            android:name="com.caner.Besdakika.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>    <action android:name="com.caner.Besdakika.MAINACTIVITY" />
 <category android:name="android.intent.category.DEFAULT" />  
 </intent-filter>      
</activity>  
 </application> 
</manifest>
 Bu zamana kadar yaptığım android programlamalarda birbirine bağlı olarak; önce ilk yeni eklediğimiz classı çalıştıracak, bu resim açma classı sonrasında da 3sn ye geçtikten sonra artırma azaltma programına gelecek. Programın çalışması bu şekilde.



Ros2 çalışmaları

 1) Her saniye yazı yazdırma. Eklediğim kod öncelikle Hello Cpp Node yazdıracak ardınca Hello ekleyecek. benim .cpp dosyamın adı my_first_no...