web-dev-qa-db-ja.com

TextViewマーキーが機能しない

私はMarqueeを使用しようとしましたが、ここでは機能していませんが私のコードです、どこで間違っているのか教えてください

<TextView
   Android:text="lunch 20.00 | Dinner 60.00 | Travel 60.00 | Doctor 5000.00 | lunch 20.00 | Dinner 60.00 | Travel 60.00 | Doctor 5000.00"
   Android:id="@+id/TextView02"
   Android:layout_width="200dip"
   Android:layout_height="wrap_content"
   Android:marqueeRepeatLimit="Marquee_forever"
   Android:ellipsize="Marquee"
   Android:singleLine="true"
   Android:focusable="true"
   Android:inputType="text"
   Android:maxLines="1">
</TextView>

Android SDK 2.0.1を使用しています

117
amithgc

現在作業中:)以下に添付されたコード

<TextView
    Android:text="START | lunch 20.00 | Dinner 60.00 | Travel 60.00 | Doctor 5000.00 | lunch 20.00 | Dinner 60.00 | Travel 60.00 | Doctor 5000.00 | END"
    Android:id="@+id/MarqueeText" 
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content" 
    Android:singleLine="true"
    Android:ellipsize="Marquee" 
    Android:marqueeRepeatLimit="Marquee_forever"
    Android:scrollHorizontally="true" 
    Android:paddingLeft="15dip" 
    Android:paddingRight="15dip" 
    Android:focusable="true" 
    Android:focusableInTouchMode="true" 
    Android:freezesText="true">

編集(アディルフセインに代わって):

これを機能させるには、textView.setSelected(true)をコードビハインドに設定する必要があります。

253
amithgc
Android:singleLine="true"
Android:ellipsize="Marquee"

唯一の必須属性であり、スクロールはlayout_weightで定義されたlayout_width=0dpでも機能します

サンプルコードを次に示します。

<TextView 
            Android:id="@+id/scroller"
            Android:singleLine="true"
            Android:ellipsize="Marquee"
            Android:textAppearance="?android:attr/textAppearanceLarge"
            Android:textColor="#FFFFFF"
            Android:text="Some veryyyyy long text with all the characters that cannot fit in screen, it so sad :( that I will not scroll"
            Android:layout_marginLeft="4dp"
            Android:layout_weight="3"
            Android:layout_width="0dp"
            Android:layout_height="wrap_content"
            />

しかし、最も重要なのは、暗黙的または明示的にTextView選択されるべきですです。

これを行うには:

TextView txtView=(TextView) findViewById(R.id.scroller);
txtView.setSelected(true);
83
Shardul

スクロールを許可するには、これらの属性をtextviewタグに含める必要があります。

その他はすべてオプションです。

Android:focusable="true"
Android:focusableInTouchMode="true"
Android:layout_width="fill_parent"
Android:ellipsize="Marquee"
23
sajamaum

私は同じ問題に直面し、この議論は私がこの行を置き換えるのに役立ちました

Android:maxLines="1"

xmlのこの行で

Android:singleLine="true"

txtView.setSelected(true);行も私のアクティビティにありました。

20
Dulal

非常に単純な作業コード:

無限にスクロールするテキスト用

            <TextView
            Android:id="@+id/textView_News_HeadLine"
            style="@style/black_extra_large_heading_text"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_alignParentLeft="true"
            Android:layout_marginLeft="8dp"
            Android:ellipsize="Marquee"
            Android:marqueeRepeatLimit="-1"
            Android:singleLine="true"
            Android:text="HeadLine: Banglawash To be Continued" />

&あなたはあなたの活動から書かなければなりません

textView.setSelected(true);
13
Shihab Uddin
 <TextView
  Android:ellipsize="Marquee"
  Android:singleLine="true"
  .../>

コードで呼び出す必要があります

textView.setSelected(true);
9
susemi99

Textview Marqueeが機能していなかったこの状況を経験しました。しかし、これに従ってください、私はそれがうまくいくと確信しています。 :)

<TextView
         Android:id="@+id/tv_Marquee"
         Android:layout_width="match_parent"
         Android:layout_height="wrap_content"
         Android:ellipsize="Marquee"
         Android:focusable="true"
         Android:focusableInTouchMode="true"
         Android:freezesText="true"
         Android:maxLines="1"
         Android:scrollHorizontally="true"
         Android:text="This is a sample code of Marquee and it works"/>

プログラムでこれらの2行を追加します...

tvMarquee.setHorizontallyScrolling(true);
tvMarquee.setSelected(true);

tvMarquee.setSelected(true)は、ビューのいずれかが既にフォーカスされており、setSelectedが機能する場合に必要です。使用する必要はありません。

Android:singleLine="true"

非推奨であり、上記のコードは機能します。

9
Vijay E

作業コード:

<TextView
    Android:id="@+id/scroller"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:ellipsize="Marquee"
    Android:focusable="true"
    Android:focusableInTouchMode="true"
    Android:singleLine="true"
    Android:text="Some veryyyyy long text with all the characters that cannot fit in screen, it so sad :( that I will not scroll"
    Android:textAppearance="?android:attr/textAppearanceLarge" />
8
Kirit Vaghela

私はminSDK = 14を使用しており、これらのバリエーションのどのセットが機能するのか興味がありました。私は結局:

Android:ellipsize="Marquee"
Android:marqueeRepeatLimit="Marquee_forever"
Android:singleLine="true"

他の書式設定に加えて。 scrollHoriontally、focusable、またはfocusableInTouchModeは必要ありませんでした。

このセットには、への呼び出しが必要でした

setSelected(true)

私が面白いと思うのは、singleLineが非推奨になっているということです。maxLines= 1に置き換えることをお勧めします。 singleLineが最終的にほこりを噛むとき、その現在のすべての動作がmaxLinesによってトリガーされることを望みます...

7
ssdscott

同じ問題が発生しました。 Amith GCの答え(受け入れられたものとしてチェックされた最初の答え)は正しいですが、時々textview.setSelected(true);テキストビューが常にフォーカスを取得できない場合は機能しません。そのため、TextView Marqueeが機能するようにするには、カスタムTextViewを使用する必要がありました。

public class CustomTextView extends TextView {
    public CustomTextView(Context context) {
        super(context);
    }
    public CustomTextView(Context context, AttributeSet attrs) {
        super(context, attrs);

    }

    public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }


    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        if(focused)
            super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }

    @Override
    public void onWindowFocusChanged(boolean focused) {
        if(focused)
            super.onWindowFocusChanged(focused);
    }


    @Override
    public boolean isFocused() {
        return true;
    }
}

そして、次のように、レイアウト.xmlファイルのスクロールテキストビューとしてカスタムTextViewを使用できます。

<com.example.myapplication.CustomTextView
            Android:id="@+id/tvScrollingMessage"
            Android:text="@string/scrolling_message_main_wish_list"
            Android:singleLine="true"
            Android:ellipsize="Marquee"
            Android:marqueeRepeatLimit ="Marquee_forever"
            Android:focusable="true"
            Android:focusableInTouchMode="true"
            Android:scrollHorizontally="true"
            Android:layout_width="match_parent"
            Android:layout_height="40dp"
            Android:background="@color/black"
            Android:gravity="center"
            Android:textColor="@color/white"
            Android:textSize="15dp"
            Android:freezesText="true"/>

注:上記のコードスニペットでは、com.example.myapplicationはパッケージ名の例であり、独自のパッケージ名に置き換える必要があります。

これがあなたのお役に立てば幸いです。乾杯!

7
David Roman

上記のように追加してください:

    Android:singleLine="true" 
    Android:ellipsize="Marquee"
    Android:marqueeRepeatLimit ="Marquee_forever"

そして!! must Javaコード内でTextView.setSelected(true)を使用します。

Marqueeがこの記事の一部のユーザーと連携していない理由は、EditText(入力)を持つ入力フォームがある場合、EditTextはフォームでデフォルトでフォーカスと選択が行われるものになります。これで、TextView.setSelected(true)を介して強制すると、最終的にTextViewは何があってもMarqueeを実行します。

したがって、全体的な考えは、TextViewウィジェットをフォーカスして選択し、Marqueeが機能するようにすることです。

5
superlinux

Marqueeに必須のこれらの属性を追加する必要があります

 Android:ellipsize="Marquee"     
 Android:focusable="true"    
 Android:focusableInTouchMode="true"     
 Android:singleLine="true"     
 Android:marqueeRepeatLimit="Marquee_forever"     
 Android:scrollHorizontally="true"
4
package com.app.relativejavawindow;

import Android.os.Bundle;
import Android.app.Activity;
import Android.graphics.Color;
import Android.text.TextUtils.TruncateAt;
import Android.view.Menu;
import Android.widget.RelativeLayout;
import Android.widget.TextView;

public class MainActivity extends Activity {
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final RelativeLayout relativeLayout = new RelativeLayout(this);
        final RelativeLayout relativeLayoutbotombar = new RelativeLayout(this);
        textView = new TextView(this);
        textView.setId(1);

        RelativeLayout.LayoutParams relativlayparamter = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.MATCH_PARENT);

        RelativeLayout.LayoutParams relativlaybottombar = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        relativeLayoutbotombar.setLayoutParams(relativlaybottombar);


        textView.setText("Simple application that shows how to use Marquee, with a long ");
        textView.setEllipsize(TruncateAt.Marquee);
        textView.setSelected(true);
        textView.setSingleLine(true);


        relativeLayout.addView(relativeLayoutbotombar);
        relativeLayoutbotombar.addView(textView);
        //relativeLayoutbotombar.setBackgroundColor(Color.BLACK);
        setContentView(relativeLayout, relativlayparamter);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

このコードは適切に動作しますが、画面サイズがこのテキストを満たさない場合、テキストの末尾に空白を配置しようとして移動しません

3
harsha.kuruwita

コードで次の行を使用します。

TextView.setSelected(true);
3
Nima K

はい、Marquee_foreverTextViewの固定幅の場合にも機能します。 (例:Android:layout_width = "120dp")

必須の属性は次のとおりです

  1. Android:focusable = "true"
  2. Android:focusableInTouchMode = "true"
  3. Android:singleLine = "true" //テキストが欠落している場合は、複数行で表示されます。

作業コード:

<TextView
                Android:id="@+id/mediaTitleTV"
                Android:layout_width="220dp"
                Android:layout_height="wrap_content"
                Android:ellipsize="Marquee"
                Android:focusable="true"
                Android:focusableInTouchMode="true"
                Android:marqueeRepeatLimit="Marquee_forever"
                Android:singleLine="true"
                Android:text="Try Marquee, it works with fixed size textview smoothly!" />
2
Monika

これらのパラメーターをTextViewに配置するだけです。できます :)

    Android:singleLine="true" 
    Android:ellipsize="Marquee"
    Android:marqueeRepeatLimit ="Marquee_forever"
    Android:scrollHorizontally="true"
    Android:focusable="true"
    Android:focusableInTouchMode="true" 

`

2
XYZ_deve

カスタムクラスを作成しましたAlwaysMarqueTextView

public class AlwaysMarqueeTextView extends TextView
{
    protected boolean a;

    public AlwaysMarqueeTextView(Context context)
    {
        super(context);
        a = false;
    }

    public AlwaysMarqueeTextView(Context context, AttributeSet attributeset)
    {
        super(context, attributeset);
        a = false;
    }

    public AlwaysMarqueeTextView(Context context, AttributeSet attributeset, int i)
    {
        super(context, attributeset, i);
        a = false;
    }

    public boolean isFocused()
    {
        return a || super.isFocused();
    }

    public void setAlwaysMarquee(boolean flag)
    {
        setSelected(flag);
        setSingleLine(flag);
        if(flag)
        setEllipsize(TruncateAt.Marquee);
        a = flag;
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) 
    {
        if(focused)

            super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }

    @Override
    public void onWindowFocusChanged(boolean focused)
    {
        if(focused)
            super.onWindowFocusChanged(focused);
    }
}

そして、必要に応じてMarqueeを開始できます。

//textView.setSelected(true); No need of Selection..
textview.setAlwaysMarquee(true); 
2
Xar E Ahmer

Marqueeプロパティをカスタマイズするための独自のスクロール速度と柔軟性を持たせるには、次を使用します。

<TextView
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:ellipsize="Marquee"
    Android:fadingEdge="horizontal"
    Android:lines="1"
    Android:id="@+id/myTextView"
    Android:padding="4dp"
    Android:scrollHorizontally="true"
    Android:singleLine="true"
    Android:text="Simple application that shows how to use Marquee, with a long text" />

アクティビティ内:

private void setTranslation() {
        TranslateAnimation tanim = new TranslateAnimation(
                TranslateAnimation.ABSOLUTE, 1.0f * screenWidth,
                TranslateAnimation.ABSOLUTE, -1.0f * screenWidth,
                TranslateAnimation.ABSOLUTE, 0.0f,
                TranslateAnimation.ABSOLUTE, 0.0f);
        tanim.setDuration(1000);
        tanim.setInterpolator(new LinearInterpolator());
        tanim.setRepeatCount(Animation.INFINITE);
        tanim.setRepeatMode(Animation.ABSOLUTE);

        textView.startAnimation(tanim);
    } 
2
Jaydev

ほとんどの答えは同じですが、
しかし、場合によっては、コンテナのディップの幅を指定しないとマーキーが機能しないことにも注意してください。
たとえば、親コンテナで重量を使用する場合

Android:layout_width="0dp"
Android:layout_weight="0.5"

マーキーが機能しない場合があります。

0
Leo Droidcoder

enter image description here

 import Android.app.Activity;
 import Android.os.Bundle;
 import Android.text.TextUtils.TruncateAt;
 import Android.widget.TextView;

 public class MainActivity extends Activity {
 private TextView textview;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textview = (TextView) this.findViewById(R.id.textview);
    textview.setSelected(true);

    textview.setEllipsize(TruncateAt.Marquee);
    textview.setSingleLine(true);
 }

 }

詳細については、ここをクリックしてください http://androiddhina.blogspot.in/2015/10/Marquee-effect-in-Android-textview.html

0
Dhina k

Android:focusable = "true"およびAndroid:focusableInTouchMode = "true"は必須です。..

私はこれらの行なしで他のすべてをテストし、結果はマーキーではなかったからです。これらを追加すると、Marqueeに開始されました。

0
poly