最近の設計図に従ってlistViewを作成する場合、listViewアイテム間に左右、上下にギャップがあります。最初のアイデアは、アイテムのルートレイアウトにmarginプロパティを設定することでしたが、listViewにマージンを設定することでした。発効できないので、この研究では失敗します。解決策は、レイアウトのレイヤーを追加するか、ルートレイアウトとしてパディングを設定するか、ルートレイアウトの次のレイアウト設定マージンを追加することです。
以下のレンダリングを直接見てください。
1.ここで使用する解決策は、レイアウトとパディングの別のレイヤーをネストすることです
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:background="@color/transparent">
<!-- 最上层控制item 的间隔的 -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:background="@drawable/home_listitem_style">
もちろん、下にレイアウトの1つのレイヤーをネストし、マージンと同じ効果を使用することもできます。左右の間隔がない場合は、上下の間隔のみです。別の解決策は、仕切りの高さを設定することです。色は透明です。
2.マージンの失敗の原因に焦点を当てる
これは私が見た説明です
。実際、LinearLayout(子)のマージンは、その親レイアウト(コンテナー)に子レイアウトにx値のマージンを与えるように要求します。したがって、親レイアウトのLayoutParamsがマージンをサポートしている場合、そのマージンが尊重されて適用されます。
ListViewはデフォルトでAbsListView.LayoutParamsを使用しますが、これにはマージンのサポートは含まれず、高さと幅のみが含まれます。そのため、マージンのparams値は無視されます。
- 2.1ListViewがAbsListViewを拡張するAbsListViewがレイアウトパラメータを追加する方法を確認する
ViewGroupのlayoutParamsは、viewGroupソースコードにあるマージン情報なしで直接使用されます。
MarginLayoutParamsというクラスがあり、AbsListViewが見つからなかった実装クラスを引き続きチェックします。
しかし、AbsListViewはViewGrouplayoutParamsの実装クラスで見つかりました
これは、marginLayoutParamsが実装されていないため、listViewのルートレイアウトのマージン設定が直接無視されることを示しています。サブクラスLinearLayoutのマージン設定は有効ですが、親クラスAbsListView layoutparamsはmarginLayoutParamsを実装せず、関連するマージンを提供しません。値なので、対応する値は設定されていますが、サブクラスでは使用できません。
参考資料:http:
//stackoverflow.com/questions/16278159/why-linearlayouts-margin-is-being-ignored-if-used-as-listview-row-view
3.マージンが無効なのに、パディングは有効なのはなぜですか?
私の個人的な理解は次のとおりです。パディングは内側のマージンであり、親クラスは必要ありません。あなたは親であり、サブクラスの特定の距離と値を指定できます。マージンは外側のマージンであり、親が必要です。親の場合、特定の距離を指定します。クラスがサポートしていない場合、対応する値を取得できません。
LinearLayoutはViewGroupを拡張しますViewを拡張します
ビュー自体はパディングプロパティを提供できますが、マージンには親クラスのサポートが必要です。