一番簡単?なテキスト表示プログラム
「なにもしないプログラム」の時と同じようにプロジェクトを作成して下さい。おもむろに無心で作りましょう。考えてはだめです。作成ファイルがどこにあるかとかも考えたらだめです。実行できる環境が作られればいいんです。
わたしはプロジェクト名を「text1」と名付けました。そして左側のパッケージエクスプローラーを見ると、当然今作成したプロジェクトフォルダがあります。実はそれをクリックすると、ツリー上にフォルダやファイルが展開していきます。そしてここの中にプログラムを書き込むファイルが存在します。わたしの場合だと
「text1」>「src」>「and.roid」>「Text1Activity.java」 ←これです。これをクリックしましょう。
するとどうでしょう。あの何に使えばいいかわからなかった真ん中の空間が、匠の手によりエディッターに変わってしまいました。
わたしの場合はこうなってます。
package and.roid; import android.app.Activity; import android.os.Bundle; public class Text1Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } |
なんか色々書いてありますがムシしますね・・・わかんないし・・・次いきますがここで気づいたことをお話します。
Androidプログラムを教えて下さっているサイトさん、書籍などみるとあるプログラム言語と瓜二つなのです。それが
「java」
です。「java」はプログラミング初心者にはうってつけなのですがBASICプログラム(主にポケコンとか)や古いC言語経験者などから始めたわたしには理解するのに時間がかかりました。それが「オブジェクト思考」ってやつです。この辺のことについては別ページを設けて話そうと思いますが、なにが言いたいかというと「javaにコレといった作り方はない」ということです。
今回のテキスト表示プログラムですが、色々調べると様々な表示の仕方があってとまどってしまいます。なぜかというとこれから先、何かを表示するにはこう書けばいいとかって決めた方がらくちんなのですが、やり始めた私から見るとどれが一番効率的かわからないからです。しかしわたくしはっちゃけました。その場しのぎでテケトーにやっていけばいいんじゃないかと。色々なのがあるなら、簡単そうなの選んでとか、全部やってみるとか、そんな感じで行って、上達したあかつきにはテンプレでコレ書けばいじゃないみたいなページ作ればいいじゃないかと。
てことで一つだけプログラミングを勉強してた時に学んだコツを。
何種類も同じことをする簡単なソース(プログラム)あがったら、見比べて違う所を探してみること。
だと思います。プログラミング初心者にとって(昔のわたし)変数や、文字1つ違っても違うプログラムに見えるものです。今回のプログラム、上記のソースに
「public class Text1Activity extends Activity {」
の「Text1Activity」の部分など実はファイル名なのでファイル名を好きなようにつけちゃって下さいって時点でもうわたしのソースとは違う人がいるのです。でもその違いさえわかれば簡単です。
イイワケが長くなりましたが行きます。
今回のプログラムに限らず、「オブジェクト思考」という考えは、「すべてをオブジェクト(物)として考えてプログラミングしよう」という意味で、上記のプログラムを
「最初に出来上がる骨格のメインプログラムソース」
とすると、これがひとつのオブジェクト(物)と考えます。と、いうことはテキストを表示するプログラムはまた別のオブジェクト(物)として考えるということです。
本当はこんなおおざっぱでテキトーではないのですがわかりやすくすると、別の物なら別のファイルにした方が綺麗に整頓できるってことで別になります。ここまでの考え方は自分をナットクさせて混乱させないために考えた思考なので本当の答えではないですよ。奥は深いので勉強などしてみたらいいかもしれません。おもしろいですよ。
「プログラムを起動させるプログラム(オブジェクト)」、「画面に出力させるプログラム(オブジェクト)」、「テキストの内容プログラム(オブジェクト)」
こんな感じのイメージでこれをどれとどれをどうファイルに配置するかなどがプログラムする人それぞれで違いますね。とりあえずAndroidプログラムを教えてくださってるサイトさんを参考にしたものと書籍からのもととの2つ書いてみます。
ファイル名「Text1Activity.java」 package and.roid; import android.app.Activity; import android.os.Bundle; import android.widget.LinearLayout; public class Text1Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout l = new LinearLayout(this); l.setOrientation(LinearLayout.VERTICAL); setContentView(l);←似てるけどちょっと違う(元 setContentView(R.layout.main);) l.addView(new Screen(this)); } }
| ||
ファイル名「Screen.java」 package and.roid; import android.content.Context; import android.view.View; import android.graphics.*; public class Screen extends View { public Screen(Context context) { super(context); } @Override protected void onDraw(Canvas c) { super.onDraw(c); Paint p = new Paint(); c.drawColor(Color.GRAY); p.setARGB(255,100,100,255); p.setTextSize(64); p.setAntiAlias(true); c.drawText("Androidn",50,300,p); } } |
c.drawColor(Color.GRAY); 背景に灰色を表示 p.setARGB(255,100,100,255); 色を不透明な水色に設定 p.setTextSize(64); 文字の大きさを32に設定 p.setAntiAlias(true); 文字の輪郭をきれいに設定 c.drawText("Androidn",50,300,p); 座標(32,32)に、設定pで、hello world と表示 |
赤字は元と比べて変更した所です。下のファイルは
「新規作成 クラス」>「名前 Screen」>「 スーパークラスの横の「参照」」>「 スーパークラス選択画面が出る 」>
「 上に「 View 」と入力 」>「 「 View - android.view 」を選択」 で作成しました。「クラス」というのはひとつのプログラムのかたまりみたいなものと思っていいと思います。
実行するとわかるのですが文字がはみでてますが「Screenクラス」の一番したの「c.drawText("Androidn",50,300,p);」で登録したテキストが表示されると思います。
ここまで書いてやはりこれはjavaそのものなんだなと。考え方やコードそのものもjavaの勉強したほうがはやいのかな・・・
お次は書籍から
ファイル名「Text2Activity.java」 package and.roid; import android.app.Activity; import android.os.Bundle; import android.view.Window; public class Text2Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(new StringView(this)); ←似てるけど違う(元 setContentView(R.layout.main); } }
|
||
ファイル名「StringView.java」 package and.roid; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; public class StringView extends View { public StringView(Context context) { super(context); setBackgroundColor(Color.WHITE); } protected void onDraw(Canvas canvas) { //描画オブジェクトの生成 Paint paint=new Paint(); paint.setAntiAlias(true); //文字サイズと文字色の指定 paint.setTextSize(12); paint.setColor(Color.argb(255, 0, 0, 0)); //画面サイズの取得 canvas.drawText("画面サイズ:"+getWidth()+"x"+getHeight(),0, 30, paint); //文字幅の取得 canvas.drawText("文字幅:"+(int)paint.measureText("A"), 0, 30*2, paint); //アセントとディセントの取得 canvas.drawText("アセント:"+(int)paint.ascent(), 0, 30*3, paint); canvas.drawText("ディセント:"+(int)paint.descent(), 0, 30*4, paint); //12ドットの文字表示 paint.setTextSize(12); paint.setColor(Color.argb(255, 255, 0, 0)); canvas.drawText("12dot", 0, 30*5, paint); //16ドットの文字表示 paint.setTextSize(16); paint.setColor(Color.argb(255, 0, 255, 0)); canvas.drawText("16dot", 0, 30*6, paint); //24ドットの文字表示 paint.setTextSize(24); paint.setColor(Color.argb(255, 0, 0, 255)); canvas.drawText("24dot", 0, 30*7, paint); } } } |
画面サイズの取得とかもしれっとやってますが混乱したらだめです。 getWidth()で画面幅getHeight()で画面高さです。 アセント、ディセントとは「g」のようにベースラインより下にはみ出る文字があります。 ベースラインより上の高さをアセント、下の高さをディセントとして値を取得できます。ということらしいです。 ドットとかわかんなぁいウフとか思ってる方は大きさと思ってくださいねぐへ。 |
どうでしょう表示されましたでしょうか。どちらのプログラムも同じことをしているのですが見た目では全然違うコードからのアプローチにしかみえません。とりあえず文字の位置、色、大きさなどの設定の仕方がわかったのでこのソースからコードを消したり、数字を変えたりしたらどうなるか遊んでみたらいいかもしれません。
とりあえずテキスト表示編はこれで終了です。お疲れ様でした。