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ü
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
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"?>
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.