5
Preference myPreference;
...
Drawable originalIcon = myPreference.getIcon();
myPreference.setIcon(android.R.drawable.btn_star);
...
myPreference.setIcon(originalIcon);

上記のコードは、アイコンを設定に変更し、後で復元します。

設定にアイコンがない場合、設定のテキストが右にシフトされ、アイコンが追加されます (getIcon は null を返します)。Drawable に対して null を指定して setIcon を呼び出しても、アイコンは削除されません。アイコンを削除して、設定テキストを元の位置に戻すにはどうすればよいですか。

4

5 に答える 5

2

受け入れられた解決策の問題は、空のアイコンと残りの設定の間にまだスペースが残っていることです。

適切な解決策は、決して setIcon(int); を呼び出さないことです。setIcon(Drawable) のみを呼び出します。

したがって、コードを少し変更するだけで機能します。

Preference myPreference;
...
Drawable originalIcon = myPreference.getIcon();
myPreference.setIcon(mPreference.getContext().getResources().getDrawable(
    android.R.drawable.btn_star));
...
myPreference.setIcon(originalIcon);

これは、null ドローアブルが渡された場合に、以前に設定されたリソース ID にフォールバックする Preference.onBindView() の一部の不適切なコードによるものです。

于 2015-10-08T15:17:43.717 に答える
2

OK、それを行う 1 つの方法は、次のように null アイコン ドローアブルを定義することです。

<?xml version="1.0" encoding="utf-8"?>
<layer-list />

そして、次を使用します。

if (originalIcon == null) {
    myPreference.setIcon(R.drawable.my_null_icon);
}
else {
    myPreference.setIcon(originalIcon);
}
于 2013-06-18T15:16:28.373 に答える
0

スティーブンの答えは完全に機能します。コードをもう少し短くすることを提案したかっただけです。それ以外の

myPreference.setIcon(mPreference.getContext().getResources().getDrawable(
android.R.drawable.btn_star));

以下は私のために働く

myPreference.setIcon(getActivity().getDrawable(android.R.drawable.btn.star));
于 2016-02-04T00:09:25.827 に答える