Pertanyaan Android: margin / padding untuk ListView tanpa margin diterapkan pada header?


Apakah mungkin untuk memiliki margin / padding untuk ListView tanpa margin diterapkan pada header? Saya ingin ListView saya menjadi seperti tata letak Google Now. Saya punya segalanya bekerja kecuali untuk masalah kecil ini.

Pertanyaan: Apakah mungkin untuk tidak memiliki parameter tata letak ListView berlaku untuk header-nya?

EDIT1: Info selengkapnya

Tampilan ungu adalah header ke listView. Saya telah mencoba menambahkan margin pada tata letak daftar item. Ini juga tidak berhasil. Yang saya butuhkan adalah cara untuk menerapkan margin ke listview sehingga tidak menerapkan margin ke header di listView.

EDIT2: Tata letak saya header.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:orientation="vertical" >

    <View
        android:layout_width="match_parent"
        android:layout_height="@dimen/top_height"
        android:background="@color/top_item" />

    <View
        android:id="@+id/placeholder"
        android:layout_width="match_parent"
        android:layout_height="@dimen/sticky_height"
        android:layout_gravity="bottom" />

</FrameLayout>

root_list.xml

<LinearLayout>
<com.abhijith.CustomListView
    android:id="@android:id/list"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:layout_height="wrap_content" /></LinearLayout>

list_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/card_background"
android:orientation="vertical" >

<TextView
    android:id="@+id/textview_note"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<TextView
    android:id="@+id/textview_note_date"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/></LinearLayout>

Saya telah menghapus properti tata-letak di sini karena panjangnya posting ini. This is how it looks


4
2017-12-27 07:32


asal


Jawaban:


Setelah banyak menggali di sekitar saya menemukan bahwa itu tidak mungkin untuk memisahkan listView tata letak params dari header-nya dan header adalah bagian dari listView. Jadi untuk mendapatkan efek margin desirred, Setelah banyak melihat-lihat saya menemukan bahwa menambahkan margin ke root dari tata letak dalam tampilan daftar item tidak berhasil. Jadi saya menambahkan LinearLayout boneka lain di dalam akar LinearLayout yang sudah ada (LinearLayout yang disarangkan) dan menambahkan anak-anak di dalam tata letak bersarang. Sekarang pengaturan margin ke tata letak bagian dalam memberikan efek yang diinginkan.

Kode:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginRight="16dp"
        android:layout_marginLeft="16dp"
        android:background="@drawable/list_selector"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textview_note"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/textview_note_date"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

</LinearLayout>

7
2017-12-27 12:32



Di bagian tajuk Anda, tambahkan tag berikut:

android:layout_alignParentLeft="true"

ini akan menyelesaikan masalah Anda.


0
2017-12-27 07:53



// Temp is the root view that was found in the xml
final View temp = createViewFromTag(root, name, attrs, false);

ViewGroup.LayoutParams params = null;

if (root != null) {
    if (DEBUG) {
        System.out.println("Creating params from root: " +
                root);
    }
    // Create layout params that match root, if supplied
    params = root.generateLayoutParams(attrs);
    if (!attachToRoot) {
        // Set the layout params for temp if we are not
        // attaching. (If we are, we use addView, below)
        temp.setLayoutParams(params);
    }

// We are supposed to attach all the views we found (int temp)
// to root. Do that now.
if (root != null && attachToRoot) {
    root.addView(temp, params);
}

// Decide whether to return the root that was passed in or the
// top view found in xml.
if (root == null || !attachToRoot) {
    result = temp;
}

...
return result;

ini adalah kode LayoutInflater, seperti yang Anda lihat, jika Anda menambahkan root, itu tidak null, menghasilkan layoutParams dari root.

dan kemudian jika param yang ketiga adalah Salah, hanya ada make temp.setLayoutParams(params) yang params dihasilkan oleh root !! dan temp itu kembali ....

jika attachToRoot aku s benar, root akan menjalankan root.addView (temp, params), dan kemudian root adalah sebagai return ..

jika Anda baru saja melakukannya LayoutInflater.from(this).inflate(R.layout.popup_choose_type, null);, dan jika Anda telah menetapkan beberapa atribut sebagai paddingBottom, itu akan mengejutkan Anda yang tidak akan berfungsi !! karena kehilangan LayoutParams!

Adapun cara mengatasinya, Anda bisa lihat sini


0
2018-01-23 05:48



Anda dapat melakukannya dengan memberikan margin dalam file tata letak listview maka Anda akan mendapatkannya output.


-1
2017-12-27 07:40