Androidプログラミング日記 (仮)  

画面変更

あなたは

人目のプログラマーだよ。

Androidプログラミング日記 (仮).

 

 

 

 

別のアクティビティ画面の呼び出し

今回やったことは、一言でなんていっていいかわかんないんですよね。わたくしが、「実用アプリを作成したいな」と思ったのがキッカケなのですが、いつも通り立ち上げ画面、実行画面、リスト画面とかって見ていくと、立ち上げ画面はViewをextendsしたクラスになり、何かを入力するTextBoxの表示をするならActivityクラスに表示させるのが簡単。ListViewなるものも当然Activityクラスで表示させたい。色々考えた結果、必要な実行画面がいくつかあり、それぞれ画面の数だけActivityクラスを持たし、イベントで画面を呼び出し変更させる。というやり方を勉強しなければならないと思い、色々調べ今回の結論にいたりました。

 

 

画面変更テストの仕様

このテストの意義は、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クラスの表示をするが実現できました。

ちょっとこれを改造してなんか作ってみようと思います。

 

 

Androidプログラミング日記 (仮) | サイトマップ | 個人情報保護方針 | 応援メールテヘペロ | ©2012 Japan  相互リンク大募集中です