2012-11-13 9 views
8

これはどうして私に説明できますか?特定のバックグラウンドリソースで埋め込みが機能しない

私は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"/> 

そして、これが背景に変化の結果である: enter image description here

答えて

11

電話:

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

は、以前に設定されたパディングを削除します(これは9パッチアセットで正しく動作するようにするためです)。

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

だけ含浸しないでsetPaddingに送信された値はピクセル単位であることを覚えておいてください:

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

+1

詳細はこちらhttp://stackoverflow.com/questions/2886140/does-changing-the-background-also-change-the-padding-of-a-linearlayout – TofferJ

2

可能であれば、背景ドローラーブルをXMLで設定する必要があります。コードで設定すると、XMLで設定したものではなく、描画可能なリソースからのパディングが使用されるので、プログラムで行う必要がある場合は、現在のパディングを取り出し、一時的に格納し、背景を設定します@TofferJが示唆するようにパディングを元に戻します。

この理由は、9パッチ画像の場合、ドロアブル自体がパディングを持つ可能性があるからです(下側と右側のピクセルの境界がパディングの量を定義します)。

あなたのソリューションは、ちょうどXMLであなたの背景リソースを設定する必要があります:

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

私はそれはあなたが最初のプロジェクトにコピーする必要がありますプライベート描画可能資源でも信じているが。

+1

ありがとう、これは素晴らしい私のUIクラスのいくつかのインスタンスだけを使用しているので、ソリューションです。私はそれを私のプロジェクトにコピーする必要はなかったことが分かります。この行は、アプリケーションがインストールされているどのデバイスからでも、組み込みのドロアブルを取得します。 – raydowe

関連する問題