Layout Manager Sınıfları

  • android.view.ViewGroup'tan türemiştir.
  • Genel olarak Container olarak düşünülebilir.
  • View elemanlarının görsel olarak nasıl görüneceğini ayarlar.
    • LinearLayout
    • TableLayout
    • GridLayout
    • RelativeLayout (View elemanlarının birbirlerine göre yerleşimi)
    • AbsoluteLayout kordinat sistemi (Android 1.5 deprecated olmuştur)

LinearLayout

  • İçerisindeki görsel elemanları doğrusal olarak organize eder.
  • orientation ekleme sırasında yatay(HORIZONTAL) ya da dikey(VERTICAL) olmasını sağlar.
  • gravity : View elemanının Text'inin konumu gibi.
  • layout_gravity : layouta eklenen View elemanının layout içindeki konumu. default değeri Left
  • layout_weight : önem sırası. View'in verilen değere göre oransal boyut farkı yaratma.

Örnek : Gravity Kullanımı

Butona her tıklandıgında gravitiyi değiştir.

content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="org.csystem.linearlayoutsample.MainActivity"
    tools:showIn="@layout/activity_main">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="GRAVITY"
        android:id="@+id/MAINACTIVITY_BUTTON_GRAVITY"
        android:layout_gravity="center_horizontal"
        android:onClick="ButtonGravityClicked"
        />
</LinearLayout>

MainActivity.java

package org.csystem.linearlayoutsample;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity
{
    private Button m_button_gravity ;
    private int gravityCounter;

    private  void init()
    {
        gravityCounter = 0;
        m_button_gravity = (Button) this.findViewById(R.id.MAINACTIVITY_BUTTON_GRAVITY);
    }

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

    public void ButtonGravityClicked(View v)
    {
        gravityCounter = ++gravityCounter % 5;
        switch (gravityCounter)
        {
            case 0:
                m_button_gravity.setGravity(Gravity.LEFT | Gravity.CENTER);
                m_button_gravity.setText("LEFT");
                break;
            case 1:
                m_button_gravity.setGravity(Gravity.RIGHT | Gravity.CENTER);
                m_button_gravity.setText("RIGHT");
                break;
            case 2:
                m_button_gravity.setGravity(Gravity.TOP | Gravity.CENTER);
                m_button_gravity.setText("TOP");
                break;
            case 3:
                m_button_gravity.setGravity(Gravity.BOTTOM | Gravity.CENTER);
                m_button_gravity.setText("BOTTOM");
                break;
            case 4:
                m_button_gravity.setGravity(Gravity.CENTER);
                m_button_gravity.setText("CENTER");
                break;
        }
    }
}

Örnek : Layout_weight Kullanımı

Ekrandaki üç buton arasında boyut farkı yaratarak bir butonu ön plana çıkartma

content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="csd.samples.viewweight.MainActivity"
    tools:showIn="@layout/activity_main">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/button2"
            android:layout_weight="0.5"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/button3"
            android:layout_weight="1.0"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/button"
            android:layout_weight="0.5"/>
    </LinearLayout>
</LinearLayout>

TabelLayout

  • LinearLayout'dan türemiştir.
  • Satırlı sütunlu Layout
  • GridLayout gibi her sütündaki eleman sayısı eşit olmak zorunda değil.
  • stretchLayout View elemanlarını match parrent yapabilmek için

Örnek : 016-TableLayout

TableLayout içerisindeki editText'e ulaşarak içerisindeki text değilştirilir.

  • content_main.xml içerisinde
    • TableLayout
      • 1 . satır TableRow
        • TextView
        • EditText Kullanıcı adı isteyen
      • 2 . satır TableRow
        • TextView
        • EditText Şifre isteyen
  • TableLayout içerindeki ilk TableRow(satır) getChildAt(0) ile alınır.
  • Tablerow içerisindeki elemanlar getChildAt(i) ile gezilir ve edittext olan View bulunur.
  • bulunan editText içerisine random sayı atılır.

content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="csd.samples.tablelayout.MainActivity"
    tools:showIn="@layout/activity_main">

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:stretchColumns="2"
        android:id="@+id/TABLELAYOUT_TEST"
        >

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:text="KULLANIOI ADI"
                android:id="@+id/textView"
                android:layout_column="0"/>

            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/editText"
                android:layout_column="2"/>
        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:text="ŞİFRE"
                android:id="@+id/textView2"
                android:layout_column="0"/>

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="textPassword"
                android:ems="10"
                android:id="@+id/editText2"
                android:layout_column="2"/>
        </TableRow>

    </TableLayout>
</LinearLayout>

MainActıvıty.java

package csd.samples.tablelayout;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.Toast;

import java.util.Random;

public class MainActivity extends AppCompatActivity {
    private TableLayout m_tableLayoutTest;

    private void init()
    {
        m_tableLayoutTest = (TableLayout)this.findViewById(R.id.TABLELAYOUT_TEST);

        TableRow tr = (TableRow)m_tableLayoutTest.getChildAt(0);

        EditText et = null;

        for (int i = 0; i < tr.getChildCount(); ++i) {
            View v = tr.getChildAt(i);

            if (v instanceof  EditText)
                et = (EditText)v;
        }
        Random r = new Random();
        int val = r.nextInt(100);

        et.setText(String.valueOf(val));

        Toast.makeText(this, String.valueOf(val), Toast.LENGTH_SHORT).show();
    }

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

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState)
    {
        //super.onRestoreInstanceState(savedInstanceState);
    }
}