Sonuç bulunamadı
Bütün Sonuçları Göster
Teknoloji tutkunu Technopatların ortak adresi: Technopat.net
  • Haber
  • Yapay Zeka
  • Tavsiyeler
  • Oyun
  • Video
  • Teknoloji
    • Mobil
    • Yazılım
    • Elektronik Alışveriş Fırsatları
    • Pratik
    • Ev Teknolojileri
    • Makale
    • Güvenlik
    • Ekonomi
    • İnternet
    • Giyilebilir Teknoloji
    • Sağlık
    • Yazıcı
    • Sosyal Medya
    • Otomobil
      • Elektrikli Otomobil
  • Sosyal
Teknoloji tutkunu Technopatların ortak adresi: Technopat.net
  • Haber
  • Yapay Zeka
  • Tavsiyeler
  • Oyun
  • Video
  • Teknoloji
    • Mobil
    • Yazılım
    • Elektronik Alışveriş Fırsatları
    • Pratik
    • Ev Teknolojileri
    • Makale
    • Güvenlik
    • Ekonomi
    • İnternet
    • Giyilebilir Teknoloji
    • Sağlık
    • Yazıcı
    • Sosyal Medya
    • Otomobil
      • Elektrikli Otomobil
  • Sosyal
Sonuç bulunamadı
Bütün Sonuçları Göster
Teknoloji tutkunu Technopatların ortak adresi: Technopat.net

Anasayfa - Makale - Pratik - Android Programlama Ders 14: LayoutParams ve Programlama ile Ekran Oluşturma

Android Programlama Ders 14: LayoutParams ve Programlama ile Ekran Oluşturma

15 Temmuz 2013 - 18:30
- Mobil, Pratik

Android Programlama Ders 14’te Ekranı layout- dosyasını kullanmadan programlamayı ve LayoutParams’ı öğreneceğiz.

Daha önce ekranı oluştururken layout – dosyasını kullanmıştık.  Aynı şeyi programlayarak da yapabiliriz.

Yeni projeyi oluşturalım:

Project name: P0014_DynamicLayout
Build Target: Android 4.2
Application name: DynamicLayout
Package name: tr.androidApp.dynamicLayout
Create Activity: MainActivity

MainActivity.java dosyasını açalım ve aşağıdaki satırı inceleyelim:

 

setContentView(R.layout.main);

 

Bu satırda etkileşim (Activity) ekranı oluşturmak için layout – dosyasını main.xml’de kullanacağını söylüyor. Bu metodu başka bir yöntemle de gerçekleştirebiliriz. Bu metod giriş olarak View – nesnesini kullanıyor ve bu nesneden ana kaynak olarak da yararlanıyor. Layout – dosyasında genelde kök olarak LinearLayout kullanılıyor. Biz da LinearLayout’tu kullanacağız.

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // LinearLayout olusturuyoruz
        LinearLayout linLayout = new LinearLayout(this);
        // dikey pozisyonu olusturuyoruz
        linLayout.setOrientation(LinearLayout.VERTICAL);
        // LayoutParams olusturuyoruz  
        LayoutParams linLayoutParam = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
        // linLayout kok olarak olusturuyoruz 
        setContentView(linLayout, linLayoutParam);
    }

CTRL+SHIFT+O kullanarak import bölümünü yeniliyoruz. Eclipse bize hangi LayoutParams’ı kullanacağımızı soracaktır. Buruyı biraz ayrıntılı inceleyelim, ekranın oluşumunu hatırlayalım. Ekran ViewGroup’tan ve Vew’lerden oluşuyor.

 ViewGroups

Daha önce kullandığımız ViewGroup örnekleri – LinearLayout, TableLayout, RelativeLayout v.b. Herkes bu ViewGroup’tan bir LayoutParams  içerik klası içeriyor. ViewGroup.LayoutParams, LayoutParams’ın temelini oluşturuyor. ViewGroup.LayoutParams’ın height ve width olmak üzere iki parametresi vardır. Bu metodun alt klası olan ViewGroup.MarginLayoutParams,bu iki parametreyi miras alıyor. Kendisinin dört tane parametresi vardır : bottomMargin, leftMargin, rightMargin, topMargin. LinearLayout.LayoutParams klası ViewGroup’un klasın alt klasıdır. MarginLayoutParams LinearLayout.LayoutParams’dan altı tane parametre miras alıyor ve iki tane de kendi (Gravity, Weight) parametresini ekliyor. Yani LinearLayout nesnesi LinearLayout.LayoutParams alt klası ile layout-parametrelerini içeriyor. Bu parametre tüm alt View ve ViewGroup’lara uygulanıyor.

LayoutParams

 

LinearLayout’daki View nesnesi aynı layout-parametrelerini içeriyor:

LinLayoutParams

RelativeLayout’da ait View nesnesi başka parametre kullanıyor:

RelLayoutParams

 

Aynı nesneler de vardır. Çünkü  ViewGroup’ları aynı kaynakları kullanıyorlar.

 

Tekrar Eclipse dönelim ve ViewGroup.LayoutParams temel klası seçelim.

LayoutParamsChoice

 

Şimdi kodu inceleyelim. LinearLayout’u oluşturuyoruz ve dikey pozisyonu belirliyoruz. Sonra LayoutParams oluşturuyoruz. Tasarımcı giriş olarak iki parametre (Width ve Height) kullanıyor. İki parametre için de MATCH_PARENT’i kullanılıyor. Sonra setContentView metodunu çağırıyoruz. Bu metod, giriş değişkeni LinearLayout ve LayoutParams’ı kullanıyor. Bu demek oluyor ki Activity’nin ana nesnesi LinearLayout ve layout-özelleği LayoutParams’dan olacaktır.

Eğer şimdi uygulamayı çalıştırsaydık, bir şey göremeyecektik. Çünkü LinearLayout’un View – nesneleri mevcut değildir. Onları ekleyelim:

LayoutParams lpView = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        TextView tv = new TextView(this);
        tv.setText("TextView");
        tv.setLayoutParams(lpView);
        linLayout.addView(tv);

        Button btn = new Button(this);
        btn.setText("Button");
        linLayout.addView(btn, lpView);

 

Tekrar LayoutParams nesnesini oluşturuyoruz. Nesnenin iki parametresi (width = wrap_content ve height = wrap_content) vardır. Eğer bu nesneye herhangi bir View – nesnesi uygularsak, View parametrelerine  göre genişliğini ve yüksekliğini ayarlayacağız.

Sonra TextView’i oluşturuyoruz, onun metnini ayarlıyoruz ve daha önce oluşturduğumuz LayoutParams’ı bağlıyoruz. LinearLayout’da addView (View child) metodu kullanarak ekliyoruz.

Butonu (Button) oluşturduktan sonra metnini değiştiriyoruz ve sonra addView (View child, ViewGroup.LayoutParams params) metodunu kullanıyoruz. Bu metod aynı anda Button’u LinearLayout’a ekliyor ve buton için LayoutParams belirliyor. Sonuç TextView gibi olacak ama burada bir satır kodu kullandık.

Dikkat ettiyseniz  iki tane View – nesnesi için bir tane LayoutParams nesnesi kullandım. Eğer şimdi LayoutParams nesnesinin özelliğini değiştirirsem, bu iki View nesnesinin özelliğinde değişime sebep olur.

Uygulamayı kaydedelim ve çalıştıralım. Ekranda bileşenlerin oluştuğunu görebiliriz. Bileşenlerin yüksekliği ve genişliği wrap_content’e göre belirlenir.

dynamic_layout

 

lpView nesnesi temel android.view.ViewGroup.LayoutParams tipine aittir. Bu demek oluyor ki bize sadece yüksekliği ve genişliği ayarlama imkanı verecek. LinearLayout’ta View nesnesi için soldan mesafeyi (Boşluğu) ve sağ kenara göre düzeltmeyi kullanabiliriz. Bu özellikleri kullanmak için LinearLayout.LayoutParams kullanmamız gerekecek:

        LinearLayout.LayoutParams leftMarginParams = new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        leftMarginParams.leftMargin = 50;

        Button btn1 = new Button(this);
        btn1.setText("Button1");
        linLayout.addView(btn1, leftMarginParams);

 

Kodu inceleyelim: LinearLayout.LayoutParams nesnesini LayoutParams tasarımcıyı kullanarak oluşturduk. width ve height’i belirledikten sonra soldan mesafeyi 50 piksele eşitliyoruz. Sonraki adımlar: Nesneyi oluşturuyoruz, metnini belirliyoruz ve bu metni LinearLayout’a ekliyoruz.

Butonu sağa tarafa geçirmek için:

LinearLayout.LayoutParams rightGravityParams = new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        rightGravityParams.gravity = Gravity.RIGHT;

        Button btn2 = new Button(this);
        btn2.setText("Button2");
        linLayout.addView(btn2, rightGravityParams);

 

Kaydedelim ve çalıştıralım. Button1 50px soldan kaydı ve Button2 sağa tarafa kaydı:

dynamic_layout1

Belki ilk başta bu konu karmaşık gelebilir. Bunun için gelecek iki derste öğrendiğimiz bu konuyu tekrarlayacağız ve pratikte ekrana yeni nesne ekleyeceğiz.

Uygulamanın tam kodu:

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // LinearLayout’un olusumu
        LinearLayout linLayout = new LinearLayout(this);
        // dikey pozisyonu olusturuyoruz
        linLayout.setOrientation(LinearLayout.VERTICAL);
        // LayoutParams olusturuyoruz  
        LayoutParams linLayoutParam = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
        // linLayout ekranin kok nesne olarak belirliyoruz
        setContentView(linLayout, linLayoutParam);

        LayoutParams lpView = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        TextView tv = new TextView(this);
        tv.setText("TextView");
        tv.setLayoutParams(lpView);
        linLayout.addView(tv);

        Button btn = new Button(this);
        btn.setText("Button");
        linLayout.addView(btn, lpView);

        LinearLayout.LayoutParams leftMarginParams = new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        leftMarginParams.leftMargin = 50;

        Button btn1 = new Button(this);
        btn1.setText("Button1");
        linLayout.addView(btn1, leftMarginParams);

        LinearLayout.LayoutParams rightGravityParams = new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        rightGravityParams.gravity = Gravity.RIGHT;

        Button btn2 = new Button(this);
        btn2.setText("Button2");
        linLayout.addView(btn2, rightGravityParams);
    }
}

 

Android Programlama dersleri devam ediyor, gelecek derste uygulama çalıştığı zaman ekrana bileşenleri eklemeyi öğreneceğiz.

Etiketler: Androidandroid.view.ViewGroup.LayoutParamsDynamicLayoutEclipseLayoutParamsLinearLayout.LayoutParamsMATCH_PARENTRelativeLayoutwrap_content
Paylaş2PaylaşTweetYollaPaylaş
Victor Cuiumju

Victor Cuiumju

Yorumlar 2

  1. Furkan KELES says:
    10 yıl önce

    Layout params’ın işlevi tam oalrak ney? Biraz daha açıklayıcı olasanız?

    Yanıtla
  2. Hüseyin Baduk says:
    10 yıl önce

    teşekkürler hocam

    Yanıtla

Yorum Yap Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

RSS Technopat Sosyal

  • Alkollü içecekler nerelere satılabilir?
  • Windows 11 25H2 ISO dosyası Technopat Sosyal'e yüklendi!
  • Trendyol ürün beğenme ile başlayan dolandırıcılık yöntemi
  • Ay’da insan köyü kuruluyor! Üstelik yakın zamanda
  • ABD motorları vermedi! MMU KAAN üretimi duracak mı?
  • En iyi otomatik kahve makineleri
  • 2500TL manyetik klavye önerisi
  • Uydu alıcısı tavsiyesi
  • R7 9800x3D ve RTX 5080'li sistem önerisi
  • R7 3700X sisteme yükseltme önerisi

Technopat Video

Şu an oynayan

Apple’ı 20’ye katlayan saat! Huawei Watch GT 6 Pro incelemesi

Huawei Watch GT 6 Pro

Apple’ı 20’ye katlayan saat! Huawei Watch GT 6 Pro incelemesi

Akıllı Saat
Technopat ofisi Eylül ayında neler aldı? 

Technopat ofisi Eylül ayında neler aldı? 

Giyilebilir Teknoloji
Gigabyte AORUS FO27Q5P: 500 Hz QD-OLED ile rekabetçi oyunculara özel monitör

Gigabyte AORUS FO27Q5P: 500 Hz QD-OLED ile rekabetçi oyunculara özel monitör

Haber

Teknoloji tutkunu Technopatların ortak adresi: Technopat.net!

Güncel teknoloji, internet, donanım, yazılım, oyun ve daha fazlası haber, makale ve videolar ile Technopat’ta sizlerle.


01010100 01100101 01100011 01101000 01101110 01101111 01110000 01100001 01110100

Kategoriler

  • Yapay Zeka
  • Ev Teknolojileri
  • Makale
  • Video

Sosyal Medya

Bağlantılar

  • Hakkında
  • Haber
  • Video
  • Sosyal
  • Çerez Politikası
© 2011-2025 Technopat. Tüm Hakları Saklıdır.
Netse
Çerez Onayı
Web sitemizi ziyaret ettiğinizde, kullanıcı deneyiminizi daha iyi hale getirmek, hizmetlerimizi size daha etkin bir şekilde sunabilmek için çerezler (cookies) ve benzeri araçlar kullanıyoruz. Çerezler, internet sitesinin düzgün çalışmasını sağlamak, içeriği kişiselleştirmek, sosyal medya özellikleri sağlamak ve trafik analizi yapmak için kullanılan küçük metin dosyalarıdır. Çerezleri nasıl kullandığımız ve kişisel verilerinizi nasıl işlediğimiz hakkında daha fazla bilgi almak için çerez politikamızı ve kişisel veri politikamızı inceleyebilirsiniz.
Fonksiyonel Her zaman aktif
Teknik depolama veya erişim, sadece kullanıcının açıkça talep ettiği belirli bir hizmetin kullanılmasını sağlama amacıyla veya iletişimin elektronik iletişim ağı üzerinden iletilmesinin tek amacıyla yasal olarak kesinlikle gereklidir.
Tercihler
Teknik depolama veya erişim, abone veya kullanıcı tarafından istenmeyen tercihlerin depolanması yasal amacıyla gereklidir.
İstatistikler
Sadece istatistiksel amaçlarla kullanılan teknik depolama veya erişim. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Pazarlama
Teknik depolama veya erişim, reklam gönderimi için kullanıcı profilleri oluşturmak veya kullanıcıyı bir web sitesinde veya birden fazla web sitesinde benzer pazarlama amaçları için takip etmek amacıyla gereklidir.
Seçenekleri yönet Hizmetleri yönetin {vendor_count} satıcılarını yönetin Bu amaçlar hakkında daha fazla bilgi edinin
Tercihleri yönet
{title} {title} {title}
Onayı Yönet
En iyi deneyimleri sunmak için, cihaz bilgilerini saklamak ve/veya bunlara erişmek amacıyla çerezler gibi teknolojiler kullanıyoruz. Bu teknolojilere izin vermek, bu sitedeki tarama davranışı veya benzersiz kimlikler gibi verileri işlememize izin verecektir. Onay vermemek veya onayı geri çekmek, belirli özellikleri ve işlevleri olumsuz etkileyebilir.
Fonksiyonel Her zaman aktif
Teknik depolama veya erişim, abone veya kullanıcı tarafından açıkça talep edilen belirli bir hizmetin kullanılmasını sağlamak veya bir elektronik iletişim ağı üzerinden bir iletişimin iletimini gerçekleştirmek amacıyla meşru bir amaç için kesinlikle gereklidir.
Tercihler
Teknik depolama veya erişim, abone veya kullanıcı tarafından talep edilmeyen tercihlerin saklanmasının meşru amacı için gereklidir.
İstatistik
Sadece istatistiksel amaçlar için kullanılan teknik depolama veya erişim. Sadece anonim istatistiksel amaçlar için kullanılan teknik depolama veya erişim. Mahkeme celbi, İnternet Hizmet Sağlayıcınızın gönüllü uyumu veya üçüncü bir taraftan ek kayıtlar olmadan, yalnızca bu amaçla depolanan veya alınan bilgiler genellikle kimliğinizi belirlemek için kullanılamaz.
Pazarlama
Teknik depolama veya erişim, reklam göndermek için kullanıcı profilleri oluşturmak veya benzer pazarlama amaçları için kullanıcıyı bir web sitesinde veya birkaç web sitesinde izlemek için gereklidir.
Seçenekleri yönet Hizmetleri yönetin {vendor_count} satıcılarını yönetin Bu amaçlar hakkında daha fazla bilgi edinin
Tercihleri görüntüle
{title} {title} {title}
Sonuç bulunamadı
Bütün Sonuçları Göster
  • Giriş
  • Teknoloji Haberleri
  • Sosyal
  • Video
  • Tavsiyeler
  • İncelemeler
    • Video İncelemeler
  • Güvenlik
  • Oyun
  • Makale
    • Pratik
    • Yazar Köşeleri

© 2025 Technopat
Sorularınız için Technopat Sosyal