2016-06-16 18 views
2

私は、マニフェスト内のテーマとウィンドウバックグラウンドを使用して、Androidのアクティビティのアクティビティをよく設定する方法を意識しています。Androidはプログラム開始時にプログラムで変更します

最近、クライアントが「日中にいくつかのイベントに応じてスプラッシュ画面を変更する」ように求めました。 私はそれを行うことができないことはほぼ確信しているが、私はこのコードでそれに打撃を与えることにした:

public class MyApplication extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     int random = (int) Math.abs(System.currentTimeMillis() % 3); 

     switch (random) { 

      case 0: 
       setTheme(R.style.FullscreenTheme1); 
       break; 

      case 1: 
       setTheme(R.style.FullscreenTheme2); 
       break; 

      default: 
       setTheme(R.style.FullscreenTheme3); 
       break; 
     } 
    } 
} 

明らかにこれは動作しません。

誰かがこれを共犯しようとしましたか、それとも良いアイデアですか?

はありがとう

EDIT:

スプラッシュ画面が簡単になるように表示するために偽の活動やその断片を作成しますが、アプリケーションの起動時に不快な白(または黒がテーマに応じて)というフラッシュを残します。

この質問は、スプラッシュ画面をマニフェストでハードコーディングするのと同じ結果をプログラムで変更する可能性についてです。

+0

これを実行できましたか? – thiagolr

+1

申し訳ありませんが、不可能と思われます。 アプリの起動時にスプラッシュ画面を設定できますが、変更することはできません。https://www.bignerdranch.com/blog/splash-screens-the-right-way/ また、ビューを作成することもできますアプリを開くときに空の画面の半分を余裕があれば、好きなときにいつでも変更できます。 –

答えて

0

スプラッシュを削除して、フルスクリーンでアクティビティを作成して、n秒間、目的の画像を表示してシミュレートするとどうなりますか?

0

バックグラウンドだけを変更したい場合は、これを試してみてください。アクションバーの色と外観は、ほぼ同じ方法で実行できます。

package com.example; 

    import java.util.ArrayList; 

    public class WelcomeFragment extends Fragment { 
     private LinearLayout mainLayout; 

     //since you seem only interested in the background color changing, using a theme might seem to be overkill 
     //that is if its for a very short time 
     //but then a theme is better if you are concerned about branding 
     //what i have here is basically to cahnge the background color 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View v = inflater.inflate(R.layout.fragment_welcome, container, false); 
mainLayout = (LinearLayout) v.findViewById(R.id.main_layout); 
      colorList.add(R.color.accent); 
      colorList.add(R.color.primary_light); 
      colorList.add(R.color.secondary_light); 
      colorList.add(R.color.secondary); 
      colorList.add(R.color.secondary_dark); 
      colorList.add(R.color.colorPrimaryDark); 
      colorList.add(R.color.primary_dark); 
      colorList.add(R.color.primary); 

      return v; 
     } 

     ArrayList<Integer> colorList = new ArrayList<>(); 

     @Override 
     public void onViewCreated(View view, Bundle savedInstanceState) { 
      new CountDownTimer((1000 * 14), 1000) {//set my timer to 14 seconds, restarts if a certain condition is not met 
      //set the timing to appropriate values or if you are just interested in a particular event do this in that section 
       public void onTick(long millisUntilFinished) { 
        //do update here 
        mainLayout.setBackgroundColor(getResources(). 
          getColor(colorList.get((int) (millisUntilFinished/1000) % 7))); 
       } 

       public void onFinish() { 
        if (!done) 
         this.start(); 
       } 
      }.start(); 

      super.onViewCreated(view, savedInstanceState); 
     } 
    } 

これは現在のアクティビティで有効です。

+0

私は_EDIT_に記載されているので、タイプoのスプラッシュ画面ではありません。私は楽しみにしています。 –

関連する問題