25

私は次のものを持っていますLinearLayout。背景を別の画像に設定すると、パディング情報がリセットされるのがわかりません。これを防ぐ方法はありますか?

<LinearLayout android:id="@+id/aPanel"
    android:orientation="horizontal" android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:background="@drawable/bkground"
    android:paddingLeft="15dp" android:paddingRight="15dp"> 

     <!-- some children here -->
     </LinearLayout>

LinearLayout aPanelの背景ドローアブルを変更すると、子の位置がずれるのがわかります。

4

3 に答える 3

43

これは、 の背景Drawableを変更するときのデフォルトの動作ですView。Android 開発者の 1 人である Romain Guy 氏によると、「イメージを設定するとパディングがリセットされるのは、9 パッチ イメージがパディングをエンコードできるためです」。同様の質問で彼の完全な回答を参照してください。

修正は、バックグラウンド ドローアブルを変更するたびにコードでパディングをリセットすることです。

于 2012-05-06T08:09:39.297 に答える
20

これは同様の質問です。

つまり、答えは次のようになります。

public static void setViewBackgroundWithoutResettingPadding(final View v, final int backgroundResId) {
    final int paddingBottom = v.getPaddingBottom(), paddingLeft = v.getPaddingLeft();
    final int paddingRight = v.getPaddingRight(), paddingTop = v.getPaddingTop();
    v.setBackgroundResource(backgroundResId);
    v.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
}

パディングがリセットされる理由は、drawable が 9-patch drawable である可能性があるためです。

于 2013-02-17T08:34:59.947 に答える