Mengenal Lebih Dalam Layout Android dan Cara Membuatnya

Mengenal Lebih Dalam Layout Android dan Cara Membuatnya

Diposting pada

Pada kesempatan kali ini mari kita sama-sama mengenal lebih dalam layout Android dan cara membuatnya. Layout atau Tata letak mendefinisikan struktur visual untuk antarmuka pengguna, seperti aktivitas atau widget. Layout dinyatakan dalam XML, termasuk elemen layar yang akan muncul di dalamnya. Kode dapat ditambahkan ke aplikasi untuk mengubah keadaan objek layar saat runtime.

LayoutParams

Setiap ViewGroup tunggal (misalnya LinearLayout, RelativeLayout, CoordinatorLayout, dll.) Perlu menyimpan informasi tentang child properti, juga informasi mengenai bagaimana child properti tersebut ditata dalam ViewGroup. Informasi ini disimpan dalam sebuah objek dari kelas ViewGroup wrapper.LayoutParams.

Untuk memasukkan parameter khusus ke jenis tata letak tertentu, ViewGroups menggunakan subclass dari kelas ViewGroup.LayoutParams.

Misalnya, untuk:

  • LinearLayout itu LinearLayout.LayoutParams
  • RelativeLayout itu RelativeLayout.LayoutParams
  • CoordinatorLayout it's CoordinatorLayout.LayoutParams

Sebagian besar ViewGroup menggunakan kemampuan untuk mengatur margin untuk child mereka, sehingga mereka tidak melakukan subkelas ViewGroup.LayoutParams secara langsung, tetapi mereka melakukan subclass ViewGroup.MarginLayoutParams sebagai gantinya (yang merupakan subkelas dari ViewGroup.LayoutParams).

LayoutParams in xml

Baca juga:  Cara Kunci Aplikasi di Android dengan Mudah

Objek LayoutParams dibuat berdasarkan file xml layout yang ditulis.

[html]
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”match_parent” android:layout_height=”match_parent” android:orientation=”vertical”>
<TextView android:layout_width=”wrap_content” android:layout_height=”50dp” android:layout_gravity=”right” android:gravity=”bottom” android:text=”Example text” android:textColor=”@android:color/holo_green_dark”/>
<ImageView android:layout_width=”match_parent” android:layout_height=”0dp” android:layout_weight=”1″ android:background=”@android:color/holo_green_dark” android:scaleType=”centerInside” android:src=”@drawable/example”/>
</LinearLayout>[/html]

Semua parameter yang dimulai dengan layout_ kemudian diikuti parameter setelahnya mengacu pada layout tertentu. Ketika layout semakin meluas, parameter-parameter tersebut dibungkus dalam objek LayoutParams yang tepat, yang nantinya akan digunakan oleh Layout untuk secara tepat memposisikan View tertentu dalam ViewGroup. Atribut lain dari suatu View secara langsung diproses oleh Tampilan itu sendiri.

Untuk TextView:

  • layout_width, layout_height dan layout_gravity akan disimpan dalam objek LinearLayout.LayoutParams dan digunakan oleh LinearLayout
  • Gravity, text dan textColor akan digunakan oleh TextView itu sendiri

Untuk ImageView:

  • layout_width, layout_height dan layout_weight akan disimpan dalam objek LinearLayout.LayoutParams dan digunakan oleh LinearLayout
  • background, scaleType dan src akan digunakan oleh ImageView itu sendiri

Mendapatkan objek LayoutParams

getLayoutParams adalah metode View yang memungkinkan untuk mengambil objek LayoutParams saat ini.

Karena objek LayoutParams secara langsung terkait dengan enclosing ViewGroup, metode ini akan mengembalikan nilai non-null hanya ketika View dilampirkan ke ViewGroup. Anda perlu menyadari bahwa objek ini mungkin tidak selalu ada setiap saat. Terutama Anda tidak harus bergantung padanya di dalam konstruktor View.

[java] public class ExampleView extends View {
public ExampleView(Context context) {
super(context);
setupView(context);
}
public ExampleView(Context context, AttributeSet attrs) {
super(context, attrs);
setupView(context);
}
public ExampleView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setupView(context);
}
private void setupView(Context context) {
if (getLayoutParams().height == 50){ // DO NOT DO THIS!
// This might produce NullPointerException
doSomething();
}
}
//…
} [/java]

Baca juga:  Bagaimana Menggunakan Percent Layouts dan View Weight di Android?

Jika Anda ingin bergantung pada obyek LayoutParams, sebagai gantinya Anda harus menggunakan metode onAttachedToWindow.

[java]public class ExampleView extends View {
public ExampleView(Context context) {
super(context);
}
public ExampleView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ExampleView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (getLayoutParams().height == 50) { // getLayoutParams() will NOT return null here
doSomething();
}
}
//…
} [/java]

Baca juga:  Mengenal Lebih Dalam Gravity dan Layout Gravity di Android

Casting LayoutParams object

Anda mungkin perlu menggunakan fitur khusus untuk ViewGroup tertentu (misalnya Anda mungkin ingin mengubah aturan RelativeLayout secara terprogram). Karenanya, Anda perlu mengetahui bagaimana cara membuang objek ViewGroup.LayoutParams dengan benar.

Ini mungkin sedikit membingungkan saat mendapatkan objek LayoutParams untuk child View, yang sebenarnya objek tersebut adalah ViewGroup lain.

[html]<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:id=”@+id/outer_layout” android:layout_width=”match_parent” android:layout_height=”match_parent” android:orientation=”vertical”>
<FrameLayout android:id=”@+id/inner_layout” android:layout_width=”match_parent” android:layout_height=”50dp” android:layout_gravity=”right”/>
</LinearLayout>[/html]

PENTING: Type objek LayoutParams secara langsung terkait dengan tipe enclosing ViewGroup.

Casting yang salah:
FrameLayout innerLayout = (FrameLayout)findViewById(R.id.inner_layout);
FrameLayout.LayoutParams par = (FrameLayout.LayoutParams) innerLayout.getLayoutParams();
// INCORRECT! This will produce ClassCastException

Casting yang benar:
FrameLayout innerLayout = (FrameLayout)findViewById(R.id.inner_layout);
LinearLayout.LayoutParams par = (LinearLayout.LayoutParams) innerLayout.getLayoutParams();
// CORRECT! the enclosing layout is a LinearLayout

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *