10

なぜこれが起こっているのか誰にも説明できますか?

TextView を拡張するかなり単純なクラスがあります。背景色を Color.BLUE に設定すると、パディングが正常に機能します。バックグラウンド リソースを android.R.drawable.list_selector_background に変更すると、パディングが適用されなくなりました。Fは?

これが私のUIクラスです:

public class GhostDropDownOption extends TextView {

    TextView text_view;


    public GhostDropDownOption(Context context, AttributeSet attrs) {
        super(context, attrs);
        setup(context);
    }


    public GhostDropDownOption(Context context) {
        super(context);
        setup(context);
    }


    private void setup(Context context) {
        this.setClickable(false);
        // THE 2 LINES BELOW ARE THE ONLY THING I'M CHANGING
        //this.setBackgroundResource(android.R.drawable.list_selector_background);
        this.setBackgroundColor(Color.BLUE);
    }
}

そして、私はこのようなレイアウトでそれを使用しています:

<trioro.voyeur.ui.GhostDropDownOption
    android:id="@+id/tv_dropdown_option_1"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1"
    android:gravity="center_vertical"
    android:text="@string/request_control_dropdown_option_1"
    android:textColor="#000000"
    android:padding="10dip"/>

そして、これは背景を変更した結果です: ここに画像の説明を入力

4

2 に答える 2

15

への呼び出し:

this.setBackgroundResource(android.R.drawable.list_selector_background);

以前に設定されたパディングを削除します (これは、9 パッチ アセットで適切に機能させるためです)。

次のように、上記の行の後にコードでパディングを設定してみてください。

this.setPadding(PADDING_CONSTANT, PADDING_CONSTANT, PADDING_CONSTANT, PADDING_CONSTANT);

setPadding に送信される値は、ディップではなくピクセル単位であることに注意してください。

于 2012-11-13T15:14:40.967 に答える
3

可能であれば、バックグラウンド ドローアブルを XML で設定する必要があります。コードで設定すると、XML で設定したものではなく、ドローアブル リソースのパディングが使用されるため、プログラムで行う必要がある場合は、現在のパディングを取得して一時的に保存し、背景を設定する必要があります。 、そして@TofferJが示唆するようにパディングを元に戻します。

これは、9 パッチ イメージの場合 (下と右のピクセル境界線がパディングの量を定義する)、ドローアブル自体にパディングがある可能性があるためです。

解決策は、バックグラウンド リソースを XML で設定するだけです。

android:background="@android:drawable/list_selector_background"

ただし、最初にプロジェクトにコピーする必要があるプライベートなドローアブル リソースである可能性があります。

于 2012-11-13T15:20:56.333 に答える