1つの画面に収まるには長すぎるように見えるテキストビューでテキストを表示しています。 TextViewをスクロール可能にする必要があります。どうやってやるの?
これがコードです:
final TextView tv = new TextView(this);
tv.setBackgroundResource(R.drawable.splash);
tv.setTypeface(face);
tv.setTextSize(18);
tv.setTextColor(R.color.BROWN);
tv.setGravity(Gravity.CENTER_VERTICAL| Gravity.CENTER_HORIZONTAL);
tv.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent e) {
Random r = new Random();
int i = r.nextInt(101);
if (e.getAction() == e.ACTION_DOWN) {
tv.setText(tips[i]);
tv.setBackgroundResource(R.drawable.inner);
}
return true;
}
});
setContentView(tv);
実際にはScrollView
を使う必要はありません。
ただ設定する
Android:scrollbars = "vertical"
レイアウトのxmlファイル内のTextView
のプロパティ。
それから:
yourTextView.setMovementMethod(new ScrollingMovementMethod());
あなたのコードで。
ビンゴ、スクロール!
これが私が純粋にXMLでやった方法です:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<ScrollView
Android:id="@+id/SCROLLER_ID"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:scrollbars="vertical"
Android:fillViewport="true">
<TextView
Android:id="@+id/TEXT_STATUS_ID"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_weight="1.0"/>
</ScrollView>
</LinearLayout>
ノート:
Android:fillViewport="true"
をAndroid:layout_weight="1.0"
と組み合わせると、テキストビューは使用可能なスペースをすべて占有します。
Scrollviewを定義するとき、Android:layout_height="fill_parent"
を指定しないでください。そうしないと、Scrollviewは機能しません。 (これは私に今1時間を無駄にさせました!FFS)。
PRO TIP:
テキストを追加した後にプログラムで一番下までスクロールするには、これを使用します。
mTextStatus = (TextView) findViewById(R.id.TEXT_STATUS_ID);
mScrollView = (ScrollView) findViewById(R.id.SCROLLER_ID);
private void scrollToBottom()
{
mScrollView.post(new Runnable()
{
public void run()
{
mScrollView.smoothScrollTo(0, mTextStatus.getBottom());
}
});
}
本当に必要なのはsetMovementMethod()だけです。これはLinearLayoutを使った例です。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
>
<TextView
Android:id="@+id/tv1"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:text="@string/hello"
/>
</LinearLayout>
public class WordExtractTest extends Activity {
TextView tv1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv1 = (TextView)findViewById(R.id.tv1);
loadDoc();
}
private void loadDoc() {
String s = "";
for(int x=0; x<=100; x++) {
s += "Line: " + String.valueOf(x) + "\n";
}
tv1.setMovementMethod(new ScrollingMovementMethod());
tv1.setText(s);
}
}
これを追加するだけであなたのテキストビューを作る
TextView textview= (TextView) findViewById(R.id.your_textview_id);
textview.setMovementMethod(new ScrollingMovementMethod());
入れる必要はありません
Android:Maxlines="AN_INTEGER"`
あなたは単に追加することによってあなたの仕事をすることができます:
Android:scrollbars = "vertical"
そして、このコードをあなたのJavaクラスに入れてください:
textview.setMovementMethod(new ScrollingMovementMethod());
どちらでもできます
TextView
をScrollView
で囲みます。またはScrollingMovementMethod.getInstance();
に設定します。私が見つけた最良の方法:
TextViewをこれらの追加属性を持つEditTextに置き換えます。
Android:background="@null"
Android:editable="false"
Android:cursorVisible="false"
ScrollViewでラップする必要はありません。
これは、XMLのみを使用した「ScrollBarをTextViewに適用する方法」です。
まず、 main.xml ファイルにTextviewコントロールを配置し、そこにテキストを書き込む必要があります。
<TextView
Android:id="@+id/TEXT"
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:text="@string/long_text"/>
次に、テキストビューコントロールをスクロールビューの間に配置して、このテキストのスクロールバーを表示します。
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_height="wrap_content"
Android:layout_width="fill_parent">
<ScrollView
Android:id="@+id/ScrollView01"
Android:layout_height="150px"
Android:layout_width="fill_parent">
<TextView
Android:id="@+id/TEXT"
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:text="@string/long_text"/>
</ScrollView>
</RelativeLayout>
それでおしまい...
簡単です。これが私のやり方です。
XML側:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
tools:context="com.mbh.usbcom.MainActivity">
<TextView
Android:id="@+id/tv_log"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:scrollbars="vertical"
Android:text="Log:" />
</RelativeLayout>
Java側:
tv_log = (TextView) findViewById(R.id.tv_log);
tv_log.setMovementMethod(new ScrollingMovementMethod());
テキストビューがいっぱいになったときにテキストビューを下にスクロールさせるには、追加する必要があります。
Android:gravity="bottom"
textView xmlファイルに。テキストが増えてくると自動的に下にスクロールします。
もちろん、set textの代わりにappend関数を使ってテキストを追加する必要があります。
tv_log.append("\n" + text);
私はそれをログ目的に使用しました。
これが役に立つことを願っています;)
だれかからの上記の「プロのヒント」( AndroidでTextViewをスクロール可能にする )は、ScrollViewに動的にテキストを追加していて、追加後に自動的に一番下までスクロールする場合はどうなりますか のみ ユーザーがScrollViewの下部にいるとき(おそらく、ユーザが何かを読むために上にスクロールしたのであれば、追加中に自動的に一番下にリセットしたくないので、これは面倒です。)
とにかく、ここにあります:
if ((mTextStatus.getMeasuredHeight() - mScrollView.getScrollY()) <=
(mScrollView.getHeight() + mTextStatus.getLineHeight())) {
scrollToBottom();
}
ユーザーがScrollViewの末尾から1行以内にいる場合は、mTextStatus.getLineHeight()を使用してscrollToBottom()を実行しないようにします。
これはスクロールバーでスムーズなスクロールテキストを提供します。
ScrollView scroller = new ScrollView(this);
TextView tv = new TextView(this);
tv.setText(R.string.my_text);
scroller.addView(tv);
テキストをテキストビュー内でスクロールさせたい場合は、次のようにします。
まずtextviewをサブクラス化する必要があります。
そしてそれを使う。
以下は、サブクラス化されたテキストビューの例です。
public class AutoScrollableTextView extends TextView {
public AutoScrollableTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setEllipsize(TruncateAt.Marquee);
setMarqueeRepeatLimit(-1);
setSingleLine();
setHorizontallyScrolling(true);
}
public AutoScrollableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setEllipsize(TruncateAt.Marquee);
setMarqueeRepeatLimit(-1);
setSingleLine();
setHorizontallyScrolling(true);
}
public AutoScrollableTextView(Context context) {
super(context);
setEllipsize(TruncateAt.Marquee);
setMarqueeRepeatLimit(-1);
setSingleLine();
setHorizontallyScrolling(true);
}
@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の中でそれを使わなければなりません:
<com.yourpackagename.AutoScrollableTextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="This is very very long text to be scrolled"
/>
それでおしまい。
XMLのテキストビューに以下を追加します。
Android:scrollbars="vertical"
そして最後に、追加
textView.setMovementMethod(new ScrollingMovementMethod());
javaファイル内。
私はTextViewのスクロールが 'fling'ジェスチャーをサポートすることを見つけることができませんでした。 ScrollViewをさまざまな理由で使用したくないため、私はそれを自分で実装しました。また、テキストを選択してリンクをクリックすることを可能にするMovementMethodがないようでした。
これをXMLレイアウトに追加してください。
Android:ellipsize="Marquee"
Android:focusable="false"
Android:marqueeRepeatLimit="Marquee_forever"
Android:scrollHorizontally="true"
Android:singleLine="true"
Android:text="To Make An textView Scrollable Inside The TextView Using Marquee"
コードでは、次の行を書く必要があります。
textview.setSelected(true);
textView.setMovementMethod(new ScrollingMovementMethod());
スクロール可能なものを使い終わったら、ビューに何かを入力したときに、この行をビューの最後の行に追加します。
((ScrollView) findViewById(R.id.TableScroller)).fullScroll(View.FOCUS_DOWN);
EditTextソリューションを使用したくない場合は、次のようにしてください。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.yourLayout);
(TextView)findViewById(R.id.yourTextViewId).setMovementMethod(ArrowKeyMovementMethod.getInstance());
}
以下のコードは自動水平スクロールテキストビューを作成します。
Xmlの使用にTextViewを追加している間
<TextView Android:maxLines="1"
Android:ellipsize="Marquee"
Android:scrollHorizontally="true"/>
OnCreate()でTextViewの以下のプロパティを設定します。
tv.setSelected(true);
tv.setHorizontallyScrolling(true);
これを使って
<TextView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:maxLines = "AN_INTEGER"
Android:scrollbars = "vertical"
/>
私は1週間以上これに苦労し、ついにこの作品を作る方法を考え出しました!
私の問題は、すべてが「ブロック」としてスクロールすることでした。テキスト自体はスクロールしていましたが、行ごとではなくチャンクとしてでした。これは明らかに私にとってはうまくいきませんでした。一番下の行が途切れるためです。以前の解決策のすべてが私のためにうまくいかなかったので、私は私自身のものを作り上げました。
これが最も簡単な解決策です。
パッケージ内に 'PerfectScrollableTextView'というクラスファイルを作成し、このコードをコピーして次の場所に貼り付けます。
import Android.content.Context;
import Android.graphics.Rect;
import Android.util.AttributeSet;
import Android.widget.TextView;
public class PerfectScrollableTextView extends TextView {
public PerfectScrollableTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setVerticalScrollBarEnabled(true);
setHorizontallyScrolling(false);
}
public PerfectScrollableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setVerticalScrollBarEnabled(true);
setHorizontallyScrolling(false);
}
public PerfectScrollableTextView(Context context) {
super(context);
setVerticalScrollBarEnabled(true);
setHorizontallyScrolling(false);
}
@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'を変更してください:
投稿者:<TextView
宛先:<com.your_app_goes_here.PerfectScrollableTextView
これを試して:
Android:scrollbars = "vertical"
テキストビューをスクロール可能にするためのkotlin内
myTextView.movementMethod= ScrollingMovementMethod()
また、このプロパティをxmlに追加します。
Android:scrollbars = "vertical"
必要なときはいつでも - - ScrollViewを親として使用します 、そしてTextViewではスクロール移動方法も使用します。
そして/ /あなたが - あなたのデバイスを横長にするときにその時に何らかの問題が発生したとき 。ページ全体はスクロール可能ですが、スクロール移動方法は機能しません。
それでもScrollViewを親またはスクロールの移動方法として使用する必要がある場合は、下記のdescも使用します。
問題がなければ、TextViewの代わりにEditTextを使う
下記参照 :
<EditText
Android:id="@+id/description_text_question"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@null"
Android:editable="false"
Android:cursorVisible="false"
Android:maxLines="6"/>
ここでは、EditTextはTextViewのように動作します
そしてあなたの問題は解決されます
XML - Android:scrollHorizontally
属性を使えます
テキストをビューよりも広くすることを許可するかどうか(したがって、水平方向にスクロールできるようにするかどうか)。
"true"や "false"などのブール値にすることができます。
プリグラムマカリー - setHorizontallyScrolling(boolean)
XmlのTextView内にmaxLines
とscrollbars
を入れます。
<TextView Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:scrollbars="vertical"
Android:maxLines="5" // any number of max line here.
/>
それからJavaコードで。
textView.setMovementMethod(new ScrollingMovementMethod());
私の場合は制約レイアウト.AS 2.3。
コードの実装
YOUR_TEXTVIEW.setMovementMethod(new ScrollingMovementMethod());
XML:
Android:scrollbars="vertical"
Android:scrollIndicators="right|end"
TextView
内でScrollView
を使用していたときに、この問題が発生しました。この解決策は私のために働きました。
scrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
description.getParent().requestDisallowInterceptTouchEvent(false);
return false;
}
});
description.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
description.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});