1. ホーム
  2. android

[解決済み] APIレスポンスから取得したカラーリソースの値をプログラムで変更する

2023-05-23 12:17:18

質問

例えば、APIコールのパラメータに color . を編集したり変更したりすることはできますか? R.colors.color を編集または修正して、APIの結果から色を割り当てることは可能ですか?

例として

自分のAPIを呼び出すと、そのAPIは green でアプリをロードしたいのですが、(緑の Toolbar 緑色の TextView の色など)、可能でしょうか?

最初に考えたのは

に項目を作成します。 colors.xml という demo という名前にして、デフォルトカラーを割り当てた後、この demo の色を好きな場所で使うことができます ( Button , TextView など) そこで、この値をAPIからの結果でプログラム的に変更することが可能ではないかと思いつきました。 SharedPreferences などを作る必要がなく、コードが増えないようにするためです。

として @Y.S. に言われた

残念ながら、どこでも手動でテキストやビューの色を設定しなければなりません ... :(

の数が分からないので、他に方法があれば教えて欲しいです。 Activities の数がわからないので、もし他の方法があるのなら、他の推測を聞いてみたいです。

EDIT

私は@Jared Rummlerの答えを試していますが、多分私は何か間違っている... 私は単純な Json を作成し、私の資産に置く。 Json を解析し、それを GlobalConstant で、"simple app"を作りました。

まず最初に、私は TextViewButton には "your_special_color"が入っていて、その戻りには GlobalConstant int を次のようにします。

case "your_special_color":                
            return GlobalConstant.color; 

次に、私が試したのは、最初の Activity には1つの TextView と1つの Button があり、それらは "your_special_color"という色を持っていて、私はそれを変更したくありません。 Intent の上に Button を開くと、もう一方の Activity を含む、同じだが GlobalConstant.color を指定しても変わりません。

こんな感じでやってみました(2回目のActivity)。

public class Main2Activity extends AppCompatActivity {
private Res res;
@Override public Resources getResources() {
    if (res == null) {
        res = new Res(super.getResources());
    }
    return res;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}

何か見逃したかな?

ああ...私はそれを理解しました...私はこれを私の MainActivity2 ?

 Button btn = (Button)findViewById(R.id.button2);
 btn.setBackgroundColor(res.getColor(R.color.your_special_color));

どのように解決するのですか?

もし、あなたが リソースにアクセスする のドキュメントを見ると、そこに書かれているのは...

アプリケーションでリソースを提供したら、そのリソースIDを参照することで適用することができます。すべてのリソースIDは、あなたのプロジェクトの R クラスで定義され、その aapt ツールが自動的に生成します。

さらに

<ブロッククオート

アプリケーションが コンパイル , aaptR クラスを生成します。 にあるすべてのリソースのリソース ID が含まれます。 res/ ディレクトリにあるすべてのリソースのリソース ID が含まれています。リソースの種類ごとに R サブクラスがあります (たとえば 例えば R.drawable はすべての描画可能なリソースに適用されます)、そして各リソースに対して そのタイプのリソースには、静的な整数(例えば R.drawable.icon ). この整数がリソース ID であり、リソースを取得するのに使用できます。 であり、リソースを取得するために使用します。

これが言っていることは、本質的に、ほとんどすべてのものが リソース の中で res/ ディレクトリにあるリソース は、変更不可能な定数としてコンパイルされ、参照されます。このような理由から、リソース要素の値をプログラム上/実行時に変更することはできないのです。 コンパイルされた . ローカル/グローバル変数とは対照的な& SharedPreferences とは対照的に、リソースエレメントはプログラムメモリ上で固定で変更不可能なオブジェクトとして表現されます。プログラムメモリの特別な読み取り専用領域に保持される。この点に関して、次の項目も参照してください。 プログラムによるR.Stringの値の変更 .

何を できること での色の値を変更する共通の関数を作成します。 SharedPreferences というように、あらゆるところでこの方法を使います。もちろん、もうご存知だとは思いますが。

プロジェクトに追加するコードの量を減らすために、別の方法があります。以前、私は カリグラフィーライブラリ を使いました。このライブラリでは、アプリ全体のフォントスタイルと色を修正することができます。これはあなたにとって役に立つかもしれませんので、チェックしてみてください ...