EditTextの縦方向のスクロールについて
EditTextを使い縦スクロールできる文章のスクロールを実装しています。
import android.graphics.Canvas;
import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputType;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
//クリックイベント用に追加
import android.view.View.OnClickListener;
//ボタンを宣言
import android.widget.Button;
//色の宣言
import android.graphics.Color;
//ログ出力の宣言
import android.util.Log;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements OnClickListener {
private int mWidth = 0;//幅
private int mHeight = 0;//高さ
private int mNo1 = 0;
private int mNo2 = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNo1 = View.generateViewId();//TextView
mNo2 = View.generateViewId();//Button
//Displayは非推奨となりました。
//画面の高さと幅を取得します。
DisplayMetrics display = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(display);
mWidth = display.widthPixels;
mHeight = display.heightPixels;
String sData = "";
//座標の初期設定
int x=0;
int y=0;
int width=0;
int height=0;
//相対座標を設定できるようにレイアウトを設定
RelativeLayout layout = new RelativeLayout(this);
setContentView(layout);
width = 350;
height = 300;
x = (mWidth - width) / 2;
y = 50;
//TextView txt=new TextView(this);
EditText txt=new EditText(this);
RelativeLayout.LayoutParams obj = getLayoutObject(width, height);
obj.leftMargin=x;
obj.topMargin=y;
sData="波がちょっと荒いが釣り日和。\n\n釣り餌をまいて待つこと2時間\nいいひきだと思いきや何も釣れなかった…。\n\nでもがんばってねばりにねばってさらに2時間経過。\n引いたので慎重にリールを回した。\n次第に魚も疲れてきたみたいだ。\nいっきにまくしたてるとようやく魚の影が…\nようやく釣れたのがちっちゃなカサゴ。\nでもないよりまし。\n今日はいい日と自分に言い聞かせて釣りを終えることにした。";
txt.setText(sData);
//テキストのフォントサイズ
txt.setTextSize(20.0f);
txt.setTextColor(Color.argb(90, 2, 3, 100));
txt.setBackgroundColor(Color.argb(85, 255, 255, 200));
//InputTypeがNONEであることが条件となりますが、
//「0」や「TYPE_NULL」は適当でないと思います。(動くには動きました)
//txt.setInputType(0);
txt.setInputType(InputType.TYPE_NULL);
//Gravity.BOTTOMを設定すると文章が下付けになります。
//txt.setGravity(Gravity.BOTTOM);
//フォントの変更
txt.setTypeface(Typeface.MONOSPACE,Typeface.ITALIC|Typeface.BOLD);
//setSingleLine
//true:1行表示
//false:複数行表示
txt.setSingleLine(false);
//行数の最大数を設定
//0以上の数字を設定します
//マイナスになるとエラーになります。
//また0は何も表示しないという設定となってしまいます。
//txt.setMaxLines(0);
layout.addView(txt, obj);
}
@Override
//ボタンがクリックされたら実行されます。
public void onClick(View view) {
}
//レイアウトを決定するオブジェクトを生成し渡します
public RelativeLayout.LayoutParams getLayoutObject(int width,int height)
{
return new RelativeLayout.LayoutParams(width, height);
}
}
|
TextViewに諸設定を行っています。
項目 | 内容 | setText | テキストを表示します。 | setTextSize | フォントサイズを設定します。 | setTextColor | テキスト文字の色を設定します。 | setBackgroundColor | テキストの背景色を設定します。 | setTypeface | フォントの設定をします。 | setSingleLine | 単行か複数行の設定ができます。 |
また、縦方向のスクロールができるようにしています。
(例)
//InputTypeがNONEであることが条件となりますが、
//「0」や「TYPE_NULL」は適当でないと思います。(動くには動きました)
//txt.setInputType(0);
txt.setInputType(InputType.TYPE_NULL);
また、キー入力が反映されないようにするには、上記の設定のほか、次の設定をしてください。
EditTextコントロールオブジェクト.setFocusable(false);
(例)
txt.setFocusable(false);
|
実行結果
|
|