アプリを実際の電話にインストールしましたが、エミュレーターでは設定の概要のすべてのテキストが同じ色に見えますが、実際の電話では色が異なります (ある種の青... しかし、私は推測します電話機のモデルによって異なります)。
この色をカスタム設定コンポーネントに設定するにはどうすればよいですか? (独自のシーク バーを実装しましたが、その概要テキストの色は、他のすべてのコンポーネントのテキストの色とは異なります...)。
ありがとう!
アプリを実際の電話にインストールしましたが、エミュレーターでは設定の概要のすべてのテキストが同じ色に見えますが、実際の電話では色が異なります (ある種の青... しかし、私は推測します電話機のモデルによって異なります)。
この色をカスタム設定コンポーネントに設定するにはどうすればよいですか? (独自のシーク バーを実装しましたが、その概要テキストの色は、他のすべてのコンポーネントのテキストの色とは異なります...)。
ありがとう!
Preference pUpdate = findPreference("sys_setting_update");
pUpdate.setSummary(Html.fromHtml("<font color=\"#B0C4DE\">This is content</font>"));
Html.fromHtml("<font color=\"#B0C4DE\">This is content</font>")
setSummary に使用
アプリケーションが実行されている Android デバイスで使用されるデフォルトの色を取得する方法を見つけました。アクティビティの別の Preference Summary View から表示されている色を取得し、それを実行時に保存するのは少し難しい作業です。
次に、他の設定の他のビューで同じカラー コードを使用できます。これにより、標準の設定に割り当てられた同じカラー コード Android を常に取得できるようになります。これが私がやった方法です:
私の環境設定アクティビティには、サービスをアクティブ化または非アクティブ化するために使用する通常の CheckBoxPreference があります。私は次のように CheckBoxPreference を拡張したので、私の拡張機能はリアルタイムで Android が最終的にその CheckBoxPreference の概要に与えたデフォルトの色を取得します:
public class MyCheckBoxPreference extends android.preference.CheckBoxPreference {
private static int sSummaryColor = Color.WHITE;
private static boolean sInitialized = false;
public MyCheckBoxPreference(Context context) {
super(context);
}
public MyCheckBoxPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyCheckBoxPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void onBindView(View view) {
super.onBindView(view);
if (!sInitialized) {
sSummaryColor = getSummaryColor(view);
sInitialized = true;
}
}
private int getSummaryColor(View view) {
int color = Color.WHITE;
// Gets the color android gave to the summary by default
TextView summaryView = (TextView) view.findViewById(android.R.id.summary);
if (summaryView != null) {
ColorStateList list = summaryView.getTextColors();
if (list != null) {
color = list.getDefaultColor();
}
}
return color;
}
public static int getSummaryColor() {
return sSummaryColor;
}
}
私のpreferences.xmlでは、その設定を単なるCheckBoxPreferenceではなく、MyCheckBoxPreferenceとしてインスタンス化しています:
<org.yourpackage.MyCheckBoxPreference
android:title="@string/preference_title_activate"
android:defaultValue="false"
android:summary="@string/preference_summary_activate_off"
android:summaryOff="@string/preference_summary_activate_off"
android:key="preference_activate">
</org.yourpackage.MyCheckBoxPreference>
MyCheckBoxPreference.getSummaryColor() でサマリー カラーを取得する前に、MyCheckBoxPreference を一度インスタンス化する必要があります。
onBindView(View) から他のカスタマイズされた設定の色を設定できるようになりました。
public class MyCustmizedPreference extends Preference {
public MyCustmizedPreference (Context context) {
super(context);
setLayoutResource(R.layout.my_customized_preference);
}
@Override
public void onBindView(View view) {
super.onBindView(view);
TextView summaryView = (TextView) view.findViewById(android.R.id.summary);
if (summaryView != null) {
summaryView.setTextColor(MyCheckBoxPreference.getSummaryColor());
}
}
}
実際に Samsung Galaxy S で動作します。また、エミュレーターで何も壊れないこともテストしました。
私はこれらを見つけました:android:textAppearance="?android:attr/textAppearanceLarge"
そしてandroid:textAppearance="?android:attr/textAppearanceSmall"
、トリックをしているようです。
サムスンギャラクシーS電話には、概要行に指定されたテキストの色を使用した独自の設定レイアウトがあります。TextAppearance.Smallが指定されていても、レイアウトのtextColor属性がテキストの外観を上書きします。
これは不可能だと思います。背景色とタイトル テキストの色は変更できますが、概要の色は変更できません。
バックグラウンド:
getListView().setBackgroundColor(Color.TRANSPARENT);
タイトルテキスト:
Preference yourpreference = findPreference("yourpreference");
TextView tv = (TextView)yourpreference.getView(null, getListView());
tv.setTextColor(...);
申し訳ありませんが、これ以上お手伝いできませんでした...