私は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を使用しています
現在作業中:)以下に添付されたコード
<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)
をコードビハインドに設定する必要があります。
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);
スクロールを許可するには、これらの属性をtextview
タグに含める必要があります。
その他はすべてオプションです。
Android:focusable="true"
Android:focusableInTouchMode="true"
Android:layout_width="fill_parent"
Android:ellipsize="Marquee"
私は同じ問題に直面し、この議論は私がこの行を置き換えるのに役立ちました
Android:maxLines="1"
xmlのこの行で
Android:singleLine="true"
txtView.setSelected(true);
行も私のアクティビティにありました。
非常に単純な作業コード:
無限にスクロールするテキスト用
<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);
<TextView
Android:ellipsize="Marquee"
Android:singleLine="true"
.../>
コードで呼び出す必要があります
textView.setSelected(true);
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"
非推奨であり、上記のコードは機能します。
作業コード:
<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" />
私はminSDK = 14を使用しており、これらのバリエーションのどのセットが機能するのか興味がありました。私は結局:
Android:ellipsize="Marquee"
Android:marqueeRepeatLimit="Marquee_forever"
Android:singleLine="true"
他の書式設定に加えて。 scrollHoriontally、focusable、またはfocusableInTouchModeは必要ありませんでした。
このセットには、への呼び出しが必要でした
setSelected(true)
私が面白いと思うのは、singleLineが非推奨になっているということです。maxLines= 1に置き換えることをお勧めします。 singleLineが最終的にほこりを噛むとき、その現在のすべての動作がmaxLinesによってトリガーされることを望みます...
同じ問題が発生しました。 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はパッケージ名の例であり、独自のパッケージ名に置き換える必要があります。
これがあなたのお役に立てば幸いです。乾杯!
上記のように追加してください:
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が機能するようにすることです。
Marqueeに必須のこれらの属性を追加する必要があります
Android:ellipsize="Marquee"
Android:focusable="true"
Android:focusableInTouchMode="true"
Android:singleLine="true"
Android:marqueeRepeatLimit="Marquee_forever"
Android:scrollHorizontally="true"
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;
}
}
このコードは適切に動作しますが、画面サイズがこのテキストを満たさない場合、テキストの末尾に空白を配置しようとして移動しません
コードで次の行を使用します。
TextView.setSelected(true);
はい、Marquee_foreverはTextViewの固定幅の場合にも機能します。 (例:Android:layout_width = "120dp")
必須の属性は次のとおりです
作業コード:
<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!" />
これらのパラメーターをTextViewに配置するだけです。できます :)
Android:singleLine="true"
Android:ellipsize="Marquee"
Android:marqueeRepeatLimit ="Marquee_forever"
Android:scrollHorizontally="true"
Android:focusable="true"
Android:focusableInTouchMode="true"
`
カスタムクラスを作成しました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);
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);
}
ほとんどの答えは同じですが、
しかし、場合によっては、コンテナのディップの幅を指定しないとマーキーが機能しないことにも注意してください。
たとえば、親コンテナで重量を使用する場合
Android:layout_width="0dp"
Android:layout_weight="0.5"
マーキーが機能しない場合があります。
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
Android:focusable = "true"およびAndroid:focusableInTouchMode = "true"は必須です。..
私はこれらの行なしで他のすべてをテストし、結果はマーキーではなかったからです。これらを追加すると、Marqueeに開始されました。