2017-02-14 30 views
0

これを今一年間把握しようとしています。私は開発したアプリに新しい機能を追加する準備ができているので、これまでの一時的な回避策がありましたが、問題は復活しました。Androidアプリで背景色を動的に設定するにはどうすればよいですか?

主な目標:ユーザーがアプリの背景として使用する色を実質的に選択できるようにしますか?

現在のイテレーション:描画可能なイメージが2つあり、緑色と青色があります。ユーザは、両者の間に切り替えることができる、だけで:

if (bgColor) { 
     getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.custom_blue_background_simple)); 
    } 
    else { 
     getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.custom_green_background)); 
    } 
} 

はbgColorユーザが青に、デフォルトの緑色から背景を変更した場合はブール値です。

は今、私は色に切り替えるしようとしているということではなく、ドロウアブルは、私が試してみました:

LayoutInflater layInflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View view = layInflate.inflate(R.layout.main_activity_layout, null); 
    mainLayout = (RelativeLayout) view.findViewById(R.id.mainActivityRelativeLayoutId); 
    mainLayout.setBackgroundResource(R.color.colorRed); 

を、それは何もしません!

それで、描画可能なイメージで動作するようにしようとしていますが、color(type int)は描画可能ではありません!したがって、このコードはどちらも動作しません。

ジレンマと質問:私はカラーピッカーの設定/優先度を持っています。ユーザーは実質的に任意の色を選択することができ、int型の色として保存します。 それは成功したテキストの色で動作します:

textView.setTextColor(colorPickerColor); 

はcolorPickerColorは、カラーピッカーの好み

から取得し、int型の変数ではなく、レイアウトやビューの背景を変更するためにそれを使用しようとすると、それは何もしません。定数/ハードコーディングされた色を設定しても、色は変わりません(上記のコードを参照)。色を使って背景を変更できる唯一の方法は、いずれかのドロウアブル(私のために働いていますが、選択可能な色ごとに個別のドロワブルを持たなければならないので非常に非効率的です。色の16進コードですが、コードの中に入れることは何もしません(ユーザーが選択できないので、まったく役に立たないので)。

int型の色をコードでプログラム/動的に指定して、レイアウトの背景色を変更する適切な方法は何ですか?私のアプリがサポートしているMin APIは14

注:私は検索しましたが、出てきたすべての結果は関連していなかったか、うまくいかなかった。

+1

'view.setBackgroundColor(int color)'を試したことがありますか?使用例: 'mainLayout.setBackgroundColor(0xFF000000);' – Isaac

+0

@Isaacは正しいです。先頭のFFを覚えていますので、完全に不透明です。 –

+0

@isaacこれは何もしません。これはすでに私がやっていることではありませんか? –

答えて

0

ColorDrawableがあなたのケースの解決策になります。 colorPickerColor描画する整数カラーコードであると仮定し、背景には、以下のコードを設定してもよい:

mainLayout.setBackgroundDrawable(new ColorDrawable(colorPickerColor)); 

とcolorPickerColorカラーリソースIDである場合、

mainLayout.setBackgroundDrawable(new ColorDrawable(getResources().getColor(colorPickerColor))); 

は親切setBackgroundDrawableことに注意してくださいメソッドは廃止されましたが、代わりにsetBackgroundを呼び出すことができます。

+0

新しいColorDrawable()メソッドを使用して動作しますが、投稿した方法では動作しません。背景色はbgColorPickerで変更されません。 drawableイメージの操作方法と同じように使用する必要があります。 getWindow()。setBackgroundDrawable(new ColorDrawable(bgColorPicker)); これは使用することができますか、または悪い形式ですか? –

+0

@AeonPsych、何も良いことも悪いも、それはあなたの場合に依存しています。たとえば、ユーザーが色を選択してアプリケーションのすべてのアクティビティに適用できるようにするには、基本アクティビティでgetWindow()を設定するだけで、すべてのアクティビティがこれに適用されます。例えば、複数のフラグメントをアクティビティ内でナビゲートした後、フラグメントのmainLayout(例えば、レイアウトのルート要素でもよい)に設定して、このようにすると、アプリケーションが異なる場合があります色々な画面で – CodePlay

+0

私はちょうどレイアウトの色を変更することができないので、奇妙です。 mainLayout.setBackgroundDrawable(new ColorDrawable(colorPickerColor)); は私のために働かない。 何らかの理由で、getWindow()メソッドを変更したときにのみ機能します。 –

関連する問題