Activityのタイトルバーでマーキー表示する


こんな感じにタイトルバーに表示する文字列をFading領域から横スクロールしたい。いわゆるマーキー表示って奴だ。

  • Activity中に書くサンプル
Window window = this.getWindow();
Class phoneWindowClass = Class.forName("com.android.internal.policy.impl.PhoneWindow");
Field field = phoneWindowClass.getDeclaredField("mTitleView");
field.setAccessible(true);
TextView title = (TextView)field.get(window);
title.setSingleLine(); 
title.setEllipsize(TruncateAt.MARQUEE); 
title.setHorizontallyScrolling(true); 
title.setFocusableInTouchMode(true); 
//例外処理は省く

this.setTitle("マーキー表示する文字列");
title.requestFocus();

こんなベタベタのリフレクションは久しぶりだ。
フィールド名が変わったらアウトだしバッドノウハウだと思うが、Titleを描画するTextViewはPhoneWindowsではprivateスコープなのでアクセスできないし、Viewを張り替えるといろいろと問題が出るのでやむなし。

実現出来たものの、フォーカスを得てないとマーキー表示にならない仕様は使いづらいな。