Pertanyaan Perbedaan antara gravitasi dan layout_gravity di Android


Saya tahu kita dapat mengatur nilai-nilai berikut ke android:gravity dan android:layout_gravity properti:

  1. center
  2. center_vertical
  3. center_horizontal, dll.

Tetapi saya bingung tentang kedua hal ini.

Apa perbedaan antara penggunaan android:gravity dan android:layout_gravity?


1149
2017-08-14 09:28


asal


Jawaban:


Nama mereka akan membantu Anda:

  • android:gravity set gravitasi dari isi (yaitu subview) dari View itu digunakan.
  • android:layout_gravity mengatur gravitasi dari View atau Layout relatif terhadap induknya.

Dan contohnya adalah sini.


1196
2017-08-14 09:31



Perbedaan

android:layout_gravity adalah Di luar gravitasi dari View. Menentukan arah di mana View harus menyentuh batas induknya.

android:gravity adalah Dalam gravitasi dari View itu. Menentukan arah mana kontennya harus sejajar.

HTML / CSS Setara

Android                 | CSS
————————————————————————+————————————
android:layout_gravity  | float
android:gravity         | text-align

Trik mudah untuk membantu Anda mengingat

Mengambil layout-gravity sebagai "Lay-luar-gravitasi".


446
2017-07-25 17:07



Di dalam di luar

  • gravity mengatur konten dalam pandangan.
  • laydi luar_gravity mengatur posisi pandangan di luar dari dirinya sendiri.

Terkadang membantu untuk melihat gambar juga. Hijau dan biru TextViews dan dua warna latar belakang lainnya LinearLayouts.

enter image description here

Catatan

  • Itu layout_gravity tidak berfungsi untuk tampilan dalam RelativeLayout. Gunakan untuk tampilan dalam LinearLayout atau FrameLayout. Lihat saya jawaban tambahan untuk lebih jelasnya.
  • Lebar tampilan (atau tinggi) harus lebih besar dari isinya. Jika tidak gravity tidak akan memiliki efek apa pun. Demikian, wrap_content dan gravity tidak ada artinya bersama.
  • Lebar tampilan (atau tinggi) harus kurang dari induknya. Jika tidak layout_gravity tidak akan memiliki efek apa pun. Demikian, match_parent dan layout_gravity tidak ada artinya bersama.
  • Itu layout_gravity=center terlihat sama dengan layout_gravity=center_horizontal di sini karena mereka dalam tata letak linier vertikal. Anda tidak dapat memusatkan secara vertikal dalam hal ini, jadi layout_gravity=center hanya berpusat horizontal.
  • Jawaban ini hanya berhubungan dengan pengaturan gravity dan layout_gravity pada tampilan dalam tata letak. Untuk melihat apa yang terjadi saat Anda mengatur gravity dari tata letak induk itu sendiri, periksa jawaban tambahan yang saya sebut di atas. (Ringkasan: gravity tidak berfungsi dengan baik pada RelativeLayout tetapi bisa berguna dengan LinearLayout.)

Jadi ingatlah, tata letak_gravity mengatur pandangan di dalamnya tata letak. Gravitasi mengatur konten di dalam tampilan. 

xml

Ini adalah xml untuk gambar di atas sebagai referensi Anda:

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#e3e2ad"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="24sp"
            android:text="gravity=" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#bcf5b1"
            android:gravity="left"
            android:text="left" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#aacaff"
            android:gravity="center_horizontal"
            android:text="center_horizontal" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#bcf5b1"
            android:gravity="right"
            android:text="right" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#aacaff"
            android:gravity="center"
            android:text="center" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#d6c6cd"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="24sp"
            android:text="layout_gravity=" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="left"
            android:background="#bcf5b1"
            android:text="left" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="center_horizontal"
            android:background="#aacaff"
            android:text="center_horizontal" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="right"
            android:background="#bcf5b1"
            android:text="right" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="center"
            android:background="#aacaff"
            android:text="center" />

    </LinearLayout>

</LinearLayout>

Terkait


433
2017-10-04 05:43



Jawaban Singkat: gunakan android:gravity atau setGravity() untuk mengendalikan gravitasi dari semua pandangan anak dari sebuah wadah; menggunakan android:layout_gravity atau setLayoutParams() untuk mengendalikan gravitasi dari pandangan individu dalam sebuah wadah.

Cerita panjang: untuk mengendalikan gravitasi dalam wadah tata letak linier seperti LinearLayout atau RadioGroup, ada dua pendekatan:

1) Untuk mengontrol gravitasi dari SEMUA pandangan anak dari suatu LinearLayout kontainer (seperti yang Anda lakukan di buku Anda), gunakan android:gravity (tidak android:layout_gravity) dalam file XML tata letak atau setGravity() metode dalam kode.

2) Untuk mengontrol gravitasi tampilan anak dalam wadahnya, gunakan android:layout_gravity Atribut XML. Dalam kode, seseorang perlu mendapatkan LinearLayout.LayoutParams dari pandangan dan mengatur gravitasinya. Berikut ini contoh kode yang mengatur tombol ke bawah dalam wadah yang berorientasi horizontal:

import android.widget.LinearLayout.LayoutParams;
import android.view.Gravity;
...

Button button = (Button) findViewById(R.id.MyButtonId);
// need to cast to LinearLayout.LayoutParams to access the gravity field
LayoutParams params = (LayoutParams)button.getLayoutParams(); 
params.gravity = Gravity.BOTTOM;
button.setLayoutParams(params);

Untuk horizontal LinearLayout kontainer, gravitasi horizontal dari tampilan anaknya adalah rata kiri satu demi satu dan tidak dapat diubah. Pengaturan android:layout_gravity untuk center_horizontal tidak berpengaruh. Gravitasi vertikal default adalah pusat (atau center_vertical) dan dapat diubah ke atas atau bawah. Sebenarnya defaultnya layout_gravity nilainya adalah -1 tetapi Android meletakkannya secara vertikal.

Untuk mengubah posisi horizontal tampilan anak dalam wadah linier horizontal, yang dapat digunakan layout_weight, margin dan padding dari tampilan anak.

Demikian pula, untuk wadah Grup Tampilan vertikal, gravitasi vertikal tampilan turunannya berada di bawah satu di bawah yang lain dan tidak dapat diubah. Gravitasi horizontal default adalah pusat (atau center_horizontal) dan dapat diubah ke kiri atau kanan.

Sebenarnya, tampilan anak seperti tombol juga ada android:gravity Atribut XML dan setGravity() metode untuk mengontrol pandangan anaknya - teks di dalamnya. Itu Button.setGravity(int) terkait dengan ini entri developer.android.com.


35
2017-07-30 20:01



Dari apa yang bisa saya kumpulkan layout_gravity adalah gravitasi dari pandangan itu di dalam induknya, dan gravitasi adalah gravitasi anak-anak di dalam pandangan itu.

Saya pikir ini benar tetapi cara terbaik untuk mencari tahu adalah dengan bermain-main.


32
2017-08-14 09:37



Lihatlah gambar untuk menjadi jelas tentang gravitasi


23
2018-02-04 07:17



Meskipun pertanyaan sudah dijawab, saya memiliki beberapa contoh yang menunjukkan penggunaan gravitasi, tata letak, dan tata letak_berat.

Anda dapat menemukan contoh di http://juanpickselov.com/LayoutExamples.zip 

Saya membuat file di Eclipse, menghapus subfolder .svn dan telah menyertakan gaya, string, warna, dll. File tata letak adalah titik utama dari demo. Karena saya seorang pengembang Java dan Android Newbie, orang mungkin menganggap Java tidak efisien. File-file tersebut dapat disalin ke dalam Eclipse Project atau saya juga menggunakannya di Netbeans dengan plugin pengembangan Android yang tersedia untuk IDE tersebut.


10
2017-11-23 05:43



Jika kita ingin mengatur gravitasi konten di dalam tampilan maka kita akan menggunakan "android: gravitasi", dan jika kita ingin mengatur gravitasi dari pandangan ini (secara keseluruhan) dalam tampilan induknya maka kita akan menggunakan "android: layout_gravity ".


9
2018-04-09 21:21



Hanya berpikir saya akan menambahkan penjelasan saya sendiri di sini - yang berasal dari latar belakang di iOS, ini adalah bagaimana saya menginternalisasi keduanya dalam istilah iOS: "Layout Gravity" mempengaruhi posisi Anda di superview. "Gravity" mempengaruhi posisi subview Anda dalam diri Anda. Dengan kata lain, Layout Gravity memposisikan Anda sendiri sementara gravitasi memposisikan anak-anak Anda.


6
2018-04-15 20:56



Sesuatu yang saya lihat di blog Sandip yang hampir saya lewatkan, memperbaiki masalah saya. Dia berkata layout_gravity TIDAK BEKERJA LinearLayout.

Jika Anda menggunakan LinearLayout dan pengaturan gravitasi membuat Anda gila (seperti saya), lalu beralih ke yang lain.

Saya benar-benar beralih ke a RelativeLayout lalu digunakan layout_alignParentLeft dan layout_alignParentRight pada 2 yang terkandung TextViews untuk membuat mereka pada satu baris untuk pergi jauh ke kiri dan ke kanan.


3
2017-07-24 19:34