4

これは私が見落としている単純なものだと確信していますが、理解できません。シンプルなレイアウトのカスタム アダプターを使用する ListView があり、パディング値が無視されているようです。レイアウトをどのようにしたいかは次のとおりです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/Widget.Layout.ComponentEntry" android:padding="@dimen/preferred_padding">
    <include layout="@layout/component_entry_summary" />
</LinearLayout>

ただし、パディングは無視されます。ネストされた LinearLayout を使用すると機能しますが、内部の LinearLayout は無意味に見えます。これは機能します:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/Widget.Layout.ComponentEntry">
    <LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:padding="@dimen/preferred_padding">
        <include layout="@layout/component_entry_summary"  />
    </LinearLayout>
</LinearLayout>

最初のレイアウトは ListView の外で機能するので、困惑しています。参考までに、使用されているスタイルを次に示します (パディングも指定します)。

<style name="Widget">
    <item name="android:textAppearance">@style/TextAppearance</item>
</style>

<style name="Widget.Layout">
    <!-- Empty Style -->
</style>

<style name="Widget.Layout.ListViewItem">
    <item name="android:background">@drawable/listview_item_background</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_width">match_parent</item>
    <item name="android:padding">@dimen/preferred_padding</item>
</style>

<style name="Widget.Layout.ComponentEntry" parent="Widget.Layout.ListViewItem">
    <item name="android:layout_height">@dimen/listview_item_height</item>
</style>

そして含まれているレイアウト:

<merge xmlns:android="http://schemas.android.com/apk/res/android" >
    <ImageView android:id="@+id/iconImage"
               android:layout_gravity="center_vertical"
               android:layout_height="@dimen/icon_size"
               android:layout_width="@dimen/icon_size"
               android:scaleType="fitCenter"
               android:src="@drawable/ic_launcher" />

    <LinearLayout android:layout_gravity="center_vertical"
                  android:layout_height="wrap_content"
                  android:layout_width="0dp"
                  android:layout_weight="1"
                  android:paddingLeft="@dimen/preferred_padding"
                  android:orientation="vertical">

        <TextView android:id="@+id/topText"
                  android:layout_height="wrap_content"
                  android:layout_width="wrap_content"
                  android:paddingLeft="@dimen/preferred_padding"
                  android:singleLine="true"
                  android:text="@string/app_name"
                  android:textColor="@color/header_text_enabled"
                  android:textStyle="bold" />

        <TextView android:id="@+id/bottomText"
                  android:layout_height="wrap_content"
                  android:layout_width="wrap_content"
                  android:ellipsize="marquee"
                  android:marqueeRepeatLimit="marquee_forever"
                  android:paddingLeft="@dimen/preferred_padding"
                  android:singleLine="true"
                  android:text="@string/app_name"
                  android:textColor="@color/header_text_enabled" />
    </LinearLayout>
</merge>

レイアウトが膨張する方法は次のとおりです(私はもともとnullの親を提供していて、それが問題だと思っていましたが、そうではないようです:

public View getView(int position, View view, ViewGroup parent) {
    ViewHolder viewHolder;

    if (view == null) {
        view = _layoutInflater.inflate(_layoutResourceId, parent, false);
        ...
4

2 に答える 2

5

パディングが機能する背景を設定するコードを削除すると、同じ問題が発生しました。

編集: 原因がわかりました。9 つのパッチ イメージのパディング ラインです。図面から除外すると、レイアウト xml のパディングが使用されると思いました。しかし、実際には、伸縮可能領域を描画可能領域としても使用します。

パディング行が含まれていない場合、Android は左と上の行を使用してこの描画可能領域を定義し、パディングを効果的に定義します。

http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch

于 2012-12-24T01:48:49.777 に答える
3

背景を削除すると、外側の LinearLayout のパディングが機能し始めました。理由はまだ掘り下げていませんが、問題は少なくとも (部分的に) 解決されています。

于 2012-05-14T23:10:02.893 に答える