2

タイトルをアクティビティに動的にロードします。タイトルが長すぎるときはいつでも、タイトル全体が読めるようにスクロールしたいと思います。

カスタム XML ファイルと requestFeature で試してみましたが、

android:singleLine="true" 
android:ellipsize="marquee"
android:marqueeRepeatLimit ="marquee_forever"
android:scrollHorizontally="true"
android:focusable="true"
android:focusableInTouchMode="true" 

私が試した別の方法

TextView textView = (TextView) findViewById(android.R.id.title);
textView.setSelected(true); 
textView.setEllipsize(TruncateAt.MARQUEE);
textView.setMarqueeRepeatLimit(1);

textView.setFocusable(true);
textView.setFocusableInTouchMode(true);
textView.requestFocus();
textView.setSingleLine(true);

ellipsize() で nullpointers をくれました。私は本当に途方に暮れています。どうすればこの効果を達成できますか?

4

1 に答える 1

1

(TextView) findViewById(android.R.id.title)null を返すため、2 番目のアプローチは機能しません。

特にタイトルバーをカスタマイズする方法については、Bhuro's answerに従うことをお勧めします。基本的に、カスタム タイトル バーに必要なものを定義するカスタム titlebar.xml が必要です (この場合は TextView のみ)。titlebar.xml の例:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/myTitle" 
        android:text="This is my new title and it is very very long"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:singleLine="true" 
        android:ellipsize="marquee"
        android:marqueeRepeatLimit ="marquee_forever"
        android:scrollHorizontally="true"
        android:focusable="true"
        android:focusableInTouchMode="true" 
    />
</LinearLayout>

次に、アクティビティでそれを指定します。

final boolean customTitleSupported = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

if (customTitleSupported) {
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);
}
于 2013-03-15T11:06:43.503 に答える