setPopupTheme();
呼ばToolbar
クラスのメソッドポップアップメニューを膨張させるときに使用するテーマを指定しますがあります。デフォルトでは、ツールバーと同じテーマを使用します。
単にあなたがToolbar
を拡張し、それが動的に現在のすべてのActivity/Fragments
でのbackground/popup theme
を変えることができるので、あなたはそれにイベントを投稿することができ、カスタムclass
を作成することができ、ツールバーの背景/ポップアップテーマを変更しますスタックがあります。
たとえば、私はあなたがEventBus
を使用する方法でアイデアを持っていると仮定していますが、以下のクラスを考えてみましょう。
public class ThemeableToolbar extends Toolbar {
private boolean isSemiTransparent;
public ThemeableToolbar(Context context) {
super(context);
init();
}
public ThemeableToolbar(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public ThemeableToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
if (isInEditMode()) return;
int primary = PrefHelper.getInt(PrefConstant.PRIMARY_COLOR);
if (primary == 0) {
primary = ActivityCompat.getColor(getContext(), R.color.primary);
}
if (isSemiTransparent()) {
AnimUtil.animateColorChange(this, ColorUtils.setAlphaComponent(primary, 40), null);
} else {
AnimUtil.animateColorChange(this, primary, null);
}
}
@Override protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (isInEditMode()) return;
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
}
@Override protected void onDetachedFromWindow() {
if (isInEditMode()) return;
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
super.onDetachedFromWindow();
}
public void onEvent(ThemeModel themeModel) {
init();
}
public boolean isSemiTransparent() {
return isSemiTransparent;
}
public void setIsSemiTransparent(boolean isSemiTransparent) {
this.isSemiTransparent = isSemiTransparent;
setBackgroundColor(ColorUtils.setAlphaComponent(ViewHelper.getPrimaryColor(getContext()), 40));
}
}
ThemeModelはそれを通知するEventBus
onEvent
に渡されることを単なるJavaクラスです。
編集は、私はあなたがそれに渡されるイベントを登録し、イベントを受信したときに、その後recreate();
どれを呼び出すことによって、あなたの活動を再作成する必要がありますBaseActivity
を持っていることをお勧めしたい全体Activity Theme
を変更することができるようにしますBaseActivity
まで拡張された活動が再現されます。 BaseActivity
にsuper.onCreate(....)
を呼び出す前に、目的のテーマを設定してください。おそらくアンドロイドPreferences
にリファレンスを保存して、設定するテーマを知ることができますか?
はい、実行時にツールバーの色を変更できます。ツールバーツールバー=(ツールバー)(getActivity())。findViewById(R.id.toolbar); toolbar.setBackgroundColor(Color.parseColor( "desired color")); –
@RakshitNawaniこれはすでに行っていますが、タイトル、アイテム、オーバーフローアイテム、セレクタはどうですか?すべてがテーマです。私は背景とタイトルテキストの色を変更しましたが、項目がよく見えません。私はViewStubを使用する必要があると思うし、必要に応じてどのツールバーを膨張させるかを決定しますが、もっと良い方法があればそれについて知りたいと思います。 –
ツールバーのテキストの色、メニューオプション、ツールバーのボタンを別々のフラグメントで表示するために私が行ったことをすぐに回答します。 –