Toolbarでmarqueeを実現する

追記

こっちのほうが上手く動く


昔のWebサイトでよく見た文字が流れるやつはandroidでも実現できる。TextViewにellisize=marqueeを指定すれば良いんだけど、設定しただけじゃ動いてくれなくてfocusbleとかいろいろいれないといけない。

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="marquee"
            android:marqueeRepeatLimit="marquee_forever"
            android:scrollHorizontally="true"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:singleLine="true"/>

それで、ツールバーでも同じように設定すればいいかと思わせてそれじゃ動かない。なので、toolbarにmakrkerを設定したTextViewを入れてそこにタイトルを設定するっていう力技しか無いっぽい。

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    <TextView
            android:id="@+id/toolbar_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="marquee"
            android:marqueeRepeatLimit="marquee_forever"
            android:scrollHorizontally="true"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:singleLine="true"/>

</android.support.v7.widget.Toolbar>

コードからTitleを設定する

        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        mToolbarTitle = (TextView) findViewById(R.id.toolbar_title);

        setSupportActionBar(mToolbar);
        mToolbarTitle.setText(getSupportActionBar().getTitle());
        getSupportActionBar().setTitle("");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

すごい力技。もうちょっときれいな方法はなかろうか。とりあえず動くは動く。ただ、ListViewとかだとこれでも動かない場合がある。その場合はフォーカスを与えると動く

        mToolbarTitle.setSelected(true);
        mToolbarTitle.requestFocus();