[解決済み] APIレスポンスから取得したカラーリソースの値をプログラムで変更する
質問
例えば、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"を作りました。
まず最初に、私は
TextView
と
Button
には "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
ツールが自動的に生成します。
さらに
<ブロッククオート
アプリケーションが
コンパイル
,
aapt
は
R
クラスを生成します。
にあるすべてのリソースのリソース ID が含まれます。
res/
ディレクトリにあるすべてのリソースのリソース ID が含まれています。リソースの種類ごとに
R
サブクラスがあります (たとえば
例えば
R.drawable
はすべての描画可能なリソースに適用されます)、そして各リソースに対して
そのタイプのリソースには、静的な整数(例えば
R.drawable.icon
). この整数がリソース ID であり、リソースを取得するのに使用できます。
であり、リソースを取得するために使用します。
これが言っていることは、本質的に、ほとんどすべてのものが
リソース
の中で
res/
ディレクトリにあるリソース は、変更不可能な定数としてコンパイルされ、参照されます。このような理由から、リソース要素の値をプログラム上/実行時に変更することはできないのです。
コンパイルされた
. ローカル/グローバル変数とは対照的な&
SharedPreferences
とは対照的に、リソースエレメントはプログラムメモリ上で固定で変更不可能なオブジェクトとして表現されます。プログラムメモリの特別な読み取り専用領域に保持される。この点に関して、次の項目も参照してください。
プログラムによるR.Stringの値の変更
.
何を
できること
での色の値を変更する共通の関数を作成します。
SharedPreferences
というように、あらゆるところでこの方法を使います。もちろん、もうご存知だとは思いますが。
プロジェクトに追加するコードの量を減らすために、別の方法があります。以前、私は カリグラフィーライブラリ を使いました。このライブラリでは、アプリ全体のフォントスタイルと色を修正することができます。これはあなたにとって役に立つかもしれませんので、チェックしてみてください ...
関連
-
[解決済み] ロリポップの最新版Chromeでヘッダーバーやアドレスバーの色を変更する方法とは?
-
[解決済み】Androidでステータスバーの色を変更する方法は?
-
[解決済み】カラーリソースからcolor-intを取得する方法は?
-
[解決済み] android: imageview の画像を画面に合わせて伸縮させる
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] onCreate(Bundle savedInstanceState)とは?
-
[解決済み] react nativeアプリのバージョン番号を更新する方法
-
[解決済み] FABアイコンの色を設定する
-
[解決済み] ブルートゥースアプリケーションのテストにアンドロイドエミュレータを使用するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】AndroidでSharedPreferencesを使って値の保存・取得・編集をする方法【終了しました
-
[解決済み] 参照である場合にプログラムで色の値を取得する (テーマ)
-
[解決済み] Android Debug Bridgeでアプリケーションのインストール時にINSTALL_FAILED_VERSION_DOWNGRADEを無視する方法はありますか?
-
[解決済み] Android - タイトルバーに戻るボタンが表示される
-
[解決済み] Android ConstraintLayout - あるビューを別のビューの上に配置する
-
[解決済み] ViewPagerのアイテムを強制的に再インスタンス化する方法 [重複].
-
[解決済み] Android - Snackbar vs Toast - 使い方と違い。
-
[解決済み] Android端末がHDPI画面かMDPI画面かを確認する方法は?
-
[解決済み] FragmentPagerAdapterのgetItemが呼び出されない
-
[解決済み] Recyclerviewと異なるタイプの行のインフレーションの処理