2012-05-01 6 views
4

これは私が見落としている単純なものだと確信していますが、わかりません。私は単純なレイアウトでカスタムアダプタを使用してListViewを持っていると私のパディング値は無視されるようです。レイアウトをどのようにしたいのですか。Android 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> 

最初のレイアウトはので、私は困惑してリストビューの外で動作します。参考のためにここに(もパディングを指定する)を使用スタイルです:

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

はここに(私はもともとヌル親を供給していると考えられたレイアウトが膨張した方法です問題だったが、それはしていないようです:背景を削除する

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

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

答えて

3

は、作業を開始するために、外側のLinearLayoutにパディングを発生させた理由はまだ掘っていないが、問題があります(部分的に)少なくとも解決される。

+1

これは、Android 4.1での問題でしたが、それはキットカットとロリポップにperfecly働いていました – serine

5

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

編集:それが原因であることが判明しました.9パッチ画像のパディングラインです。レイアウトから除外すると、レイアウトXMLでパディングが使用されると思いました。しかし実際には伸縮可能領域を描画可能領域としても使用します。

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

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

関連する問題