画面変更テストの仕様 このテストの意義は、ViewクラスからActivityクラスを呼び出すテスト。 Test1Activityが基点となりTest2ActivityかTest3Activityを呼び出し、呼び出し先でボタンクリックにてTest1Activityに戻る Test1Activity:このクラスが立ち上げ時に呼び出される。ViewクラスをextendsしたTest1Viewクラスで立ち上げ時の表示をすることとする。四角図形が2つあり、それぞれその図形をタップすると別のActivityクラスを呼び出す。 Test2Activity:Test1Activityからのみ呼び出されるクラス。レイアウトはmain2.xmlを使用。 Test3Activity:Test1Activityからのみ呼び出されるクラス。レイアウトはmain.xmlを使用。 もともとあるmain.xmlと自作(といっても内容はほぼ同じ)のmain2.xmlを使用しています。気をつけたい所が、Strings.xmlに、表示させるオブジェクトのテキストを設定しているので、main,main2でそれぞれしっかりidをリンクさせること。main,main2ともにもっているレイアウトオブジェクト情報は表示テキストとボタンのみ、違う所は表示テキストの内容のみです。 使用したいActivityファイルが複数ある場合、自分でAndroidManifest.xmlに使用するActivityファイルを指定するみたいなのでここも変更。 |
ファイル名「AndroidManifest.xml」 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="and.roid.test1" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="4" /> <application android:icon="@drawable/ic_launcher"> <activity android:name=".Test1Activity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Test2Activity"> </activity> <activity android:name=".Test3Activity"> </activity> </application> </manifest> ファイル名「main.xml」 <?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" > <TextView android:id="@+id/TextView01" android:textSize="12pt" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/A3Text" /> <Button android:id="@+id/APush" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/PUSH" /> </LinearLayout> ファイル名「main2.xml」 <?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" > <TextView android:id="@+id/TextView01" android:textSize="12pt" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/A2Text" /> <Button android:id="@+id/A2Push" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/PUSH" /> </LinearLayout> ファイル名「Strings.xml」 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="A2Text">Activity2の画面だよ</string> <string name="A3Text">Activity3の画面だロボ</string> <string name="PUSH">押すのだ</string> </resources> ファイル名「Test1Actibity.java」 package and.roid.test1; import android.app.Activity; import android.os.Bundle; import android.view.Display; import android.view.Window; import android.view.WindowManager; import android.widget.EditText; public class Test1Activity extends Activity { public float disp_w,disp_h; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); WindowManager manager = window.getWindowManager(); Display disp = manager.getDefaultDisplay(); disp_w = disp.getWidth(); disp_h = disp.getHeight(); setContentView(new Test1View(this)); } } ファイル名「Test1View.java」 package and.roid.test1; import android.content.Context; import android.content.Intent; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class Test1View extends View{ private static final int SHOW_SUB_FORM = 0; private Test1Activity diary; private float disp_w,disp_h; private Rect btn1,btn2; private Mesod mesod; public Test1View(Context context) { super(context); initDiary(context); } public Test1View(Context context, AttributeSet attrs) { super(context,attrs); initDiary(context); } public void initDiary(Context context){ diary = (Test1Activity)context; disp_w = diary.disp_w; disp_h = diary.disp_h; btn1 = new Rect(50,600,50+100,600+50); btn2 = new Rect(300,600,300+100,600+50); mesod = new Mesod(); } protected void onDraw(Canvas c) { Paint p = new Paint(); c.drawColor(Color.BLACK); drawTexts(50,"メモ帳!", 0, (int)(disp_h/2),c,p); p.setColor(Color.BLUE); c.drawRect(btn1, p); drawTexts(20,"Activity2へGO!", btn1.left, btn1.top,c,p); p.setColor(Color.RED); c.drawRect(btn2, p); drawTexts(20,"Activity3へGO!", btn2.left, btn2.top,c,p); } public void drawTexts(int size,String str, int x, int y,Canvas c,Paint p){ p.setColor(Color.WHITE); p.setTextSize(size); c.drawText(""+str, x, y, p); } //タッチ処理 public boolean onTouchEvent(MotionEvent event){ int action = event.getAction(); int x = (int)event.getX(); int y = (int)event.getY(); switch(action){ case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_UP: if(mesod.RectTap(x, y, btn1)){ Intent intent = new Intent(diary,Test2Activity.class); diary.startActivityForResult(intent,SHOW_SUB_FORM); } if(mesod.RectTap(x, y, btn2)){ Intent intent = new Intent(diary,Test3Activity.class); diary.startActivityForResult(intent,SHOW_SUB_FORM); } break; case MotionEvent.ACTION_MOVE: break; } invalidate(); return true; } protected void onActivityResult(int requestCode, int resultCode,Intent data){} } ファイル名「Test2Activity.java」 package and.roid.test1; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Display; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class Test2Activity extends Activity implements OnClickListener{ public float disp_w,disp_h; private TextView textView; private Button Push; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); WindowManager manager = window.getWindowManager(); Display disp = manager.getDefaultDisplay(); disp_w = disp.getWidth(); disp_h = disp.getHeight(); setContentView(and.roid.test1.R.layout.main2); textView = (TextView) findViewById(and.roid.test1.R.id.TextView01); Push = (Button)this.findViewById(and.roid.test1.R.id.A2Push); Push.setOnClickListener(this); } public void onClick(View view){ if(view == Push){ Intent intent = new Intent(); setResult(RESULT_OK, intent); finish(); } } } ファイル名「Test3Activity.java」 package and.roid.test1; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Display; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class Test3Activity extends Activity implements OnClickListener{ public float disp_w,disp_h; private TextView textView; private Button Push; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); WindowManager manager = window.getWindowManager(); Display disp = manager.getDefaultDisplay(); disp_w = disp.getWidth(); disp_h = disp.getHeight(); setContentView(and.roid.test1.R.layout.main); textView = (TextView) findViewById(and.roid.test1.R.id.TextView01); Push = (Button)this.findViewById(and.roid.test1.R.id.APush); Push.setOnClickListener(this); } public void onClick(View view){ if(view == Push){ Intent intent = new Intent(); setResult(RESULT_OK, intent); finish(); } } } |
実行結果 |
無事に表示できました。 |
今回やりたかったことが出来ました。 ぶっちゃけてしまうと、こうやったら呼び出せます、とかいうコードを色々な所からコピペして試しながらやっているので、詳しくはワカリマセン。わたくしがやりたかった、画面立ち上げでViewクラススタート画面、ボタン押下でそれぞれ違う画面、しかもテキストボックスやボタンなどを表示できるActivityクラスの表示をするが実現できました。 ちょっとこれを改造してなんか作ってみようと思います。 |