参考
AndroidのScrollViewで一番下までスクロールさせるには
ScrollViewを一番下まで自動でスクロールする方法
Scroll TextView to text position
TextView#getLineCountメソッドの戻値がゼロ
ScrollViewを使って、TextViewの任意の位置までスクロールさせるプログラムです。
このプログラムでは、TextViewに設定する大量の文字列群内の中央の文字列に赤色を付けて、その赤色の文字列が存在する中央の位置まで画面をスクロールさせます。
Javaのsample codeは次のとおりです。
public class ScrollTextActivity extends Activity
implements
OnClickListener
{
Button bu;
TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SpannableStringBuilder sb;
int i, j;
BackgroundColorSpan spanBC;
final String sData = "あいうえお";
bu = (Button)findViewById(R.id.Button);
bu.setOnClickListener(this);
//適当に文字列データを作成する。
spanBC = new BackgroundColorSpan(0xff880000);
sb = new SpannableStringBuilder();
for(i=0, j=0; i<300; i++, j++) sb.append(sData);
j *= sData.length();
for(i=0; i<300; i++) sb.append(sData);
sb.setSpan(spanBC, j, j+sData.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv = (TextView)findViewById(R.id.TextView);
tv.setText(sb);
//onCreateメソッドが実行される時点ではスクロールはできない。
//ScrollView sv;
//sv = (ScrollView)findViewById(R.id.ScrollView);
//sv.smoothScrollTo(0, 500);//効果の無いコマンド
}
@Override
public void onClick(View v) {
if(v==bu){
//Viewが作成された後で、スクロールが可能になる。
ScrollView sv;
int iLine, iPixel, iHeight, i;
sv = (ScrollView)findViewById(R.id.ScrollView);
iLine = tv.getLineCount ();
iLine /= 2;
iPixel = tv.getLineHeight ();
iHeight = sv.getHeight ();
i = iLine * iPixel;
i -= iHeight / 2;
sv.smoothScrollTo(0, i);//実行可能
}
}
}
<?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="vertical"
>
<Button
android:id="@+id/Button"
android:text="@string/Button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</Button>
<ScrollView
android:id="@+id/ScrollView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/TextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</TextView>
</ScrollView>
</LinearLayout>
0 件のコメント:
コメントを投稿