[Android開発]コードコードコードコード設定9.png/9-patchピクチャバックグラウンド後、このviewのTextViewなどのコントロールが正常に表示されません(listviewでよく見られます)


必要に応じてliview表示項目を白黒で処理する必要があります.
実は関数public View getView(int position,View convertView,View Group parent)で
に、次を加えます.
if (position % 2 == 0) {
				convertView.setBackgroundResource(R.drawable.list_gray_9);
			} else {
				convertView.setBackgroundResource(R.drawable.list_white_9);
			}
しかし、上記のコードのように、私が参加したのは9-patch画像で、私のconvertViewの内容が正常に表示されなくなりました.
どうしよう.私はxmlの中で直接9-patchを1つのlayoutに設定して、すべて正常に表示して、これはどうして問題が発生しましたか?
問題は、次の関数です.
public void setBackgroundResource (int resid) Set the background to a given resource. The resource should refer to a Drawable object or 0 to remove the background.
つまり、実は
setBackgroundResourceは、setBackgroundDrawable関数を呼び出します.setBackgroundDrawableの説明を見てみましょう.
public void setBackgroundDrawable (Drawable d) Since: API Level 1 Set the background to a given Drawable, or remove the background. If the background has padding, this View's padding is set to the background's padding. However, when a background is removed, this View's padding isn't touched. If setting the padding is desired, please use setPadding(int, int, int, int).Parametersd The Drawable to use as the background,or null to remove the backgroundつまり、9-patchは自分のpaddingがあるのでconvertViewは自分のpaddingがカバーされています!どうするの?
実はこれを知っているのは簡単で、コードsetBackgroundResourceの後につけるだけです(Remember:きっとこの文の後です!)一言:
convertView.setPadding(0, 0, 0, 0);
問題を解決することができます~
おかしいのではないでしょうか.実は解決できない問題があるのは、その内部メカニズムを理解していないからです(もちろん、内部メカニズムが少しおかしい場合もあります).理解すれば、自由に応用できます.
私の文章から役に立つものを見つけてほしい~~~