●버튼

- 회로를 닫아주고 열어주는 역할을 한다. 아래 버튼은 손으로 누르고 있으면 전류가 흐르고 손을 때면 전류가 흐르지 않게 되는 버튼이다.





●아두이노 스케치를 이용하지 않은 버튼 테스트







●버튼의 입력에 따라 LED가 점등이 되는 예제


const int ledPin = 2;

const int buttonPin = 4;

int currentButtonState;


void setup() {

  pinMode(ledPin,OUTPUT);

  pinMode(buttonPin,INPUT);

  Serial.begin(9600);

}


void loop() {

  currentButtonState = digitalRead(buttonPin);

  digitalWrite(ledPin, currentButtonState);

  Serial.println(currentButtonState);

  

}

 







Posted by -현's-

댓글을 달아 주세요



●자바로 Button 위젯 만들기


- CustomEx1.java

package com.custom;


import android.app.Activity;

import android.app.ActionBar.LayoutParams;

import android.os.Bundle;

import android.widget.Button;

import android.widget.LinearLayout;


public class CustomEx1 extends Activity{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//리니어 레이아웃 선언

LinearLayout layout = new LinearLayout(this);

layout.setOrientation(LinearLayout.VERTICAL);

//기타 속성은 레이아웃 파라미터 객체에 지정

LayoutParams params1 = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

//레이아웃 파라미터를 리니어 레이아웃에 적용

layout.setLayoutParams(params1);

//버튼을 선언

Button btn = new Button(this);

btn.setText("버튼");

//기타 속성은 레이아웃 파라미터 객체에 지정

LayoutParams params2 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

//레이아웃 파라미터를 버튼에 적용

btn.setLayoutParams(params2);

layout.addView(btn);

setContentView(layout);

}

}










●커스텀 버튼 위젯을 자바에서 사용하고 보여주기


- MyButton.java

package com.custom;


import android.content.Context;

import android.util.AttributeSet;

import android.widget.Button;


public class MyButton extends Button{

public MyButton(Context context) {

//부모의 생성자를 생성하면서 현재 내가 정의하는 버튼 객체가 어떤 액티비티에서 사용되는지 정보를 넘긴다.

//모든 위젯은 액티비티를 벗어날수 없다.

super(context);

}

}




- CustomEx1.java

package com.custom;


import android.app.Activity;

import android.app.ActionBar.LayoutParams;

import android.os.Bundle;

import android.widget.Button;

import android.widget.LinearLayout;


public class CustomEx1 extends Activity{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//리니어 레이아웃 선언

LinearLayout layout = new LinearLayout(this);

layout.setOrientation(LinearLayout.VERTICAL);

//기타 속성은 레이아웃 파라미터 객체에 지정

LayoutParams params1 = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

//레이아웃 파라미터를 리니어 레이아웃에 적용

layout.setLayoutParams(params1);

//버튼을 선언

Button btn = new Button(this);

btn.setText("버튼");

//기타 속성은 레이아웃 파라미터 객체에 지정

LayoutParams params2 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

//레이아웃 파라미터를 버튼에 적용

btn.setLayoutParams(params2);

//우리가 정의한 커스텀 버튼을 정의

MyButton my_btn = new MyButton(this);

my_btn.setLayoutParams(params2);

my_btn.setText("커스텀 버튼");


//리니어에 버튼을 붙인다.

layout.addView(btn);

layout.addView(my_btn);

setContentView(layout);

}

}










커스텀 버튼 위젯을 xml에서 사용하기


- 커스텀 위젯을 xml에서 사용할 경우 패키지 경로까지 써줘야한다.


- MyButton.java

package com.custom;


import android.content.Context;

import android.util.AttributeSet;

import android.widget.Button;


public class MyButton extends Button{

//현재 클래스를 순수 자바코드에서 메모리에 올릴때는 Context 정보만 넘기면 되지만,

//디자인의 효율목적상 xml레이아웃 파일에서 생성하고자 할대는 xml에서 설정한 각종

//속성 정보가 전달되어지므로, 이 클래스의 생성자에서  그 정보를 받아야 한다.

//결론:생성자 인수를 2개자리로 해야한다.

public MyButton(Context context, AttributeSet set) {

//부모의 생성자를 생성하면서 현재 내가 정의하는 버튼 객체가 어떤 액티비티에서 사용되는지 정보를 넘긴다.

//모든 위젯은 액티비티를 벗어날수 없다.

super(context, set);

}

}

 



- Custom_ex2.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    

    <Button 

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="네이티브 버튼"/>


    <com.custom.MyButton 

        android:id="@+id/btn_cus"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="커스텀 버튼"/>

        

</LinearLayout>




- CustomEx2.java

package com.custom;


import com.example.day0314.R;


import android.app.Activity;

import android.os.Bundle;


public class CustomEx2 extends Activity{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.custom_ex2);

}

}

 














Posted by -현's-

댓글을 달아 주세요



●버튼클릭하면 숫자가 하나씩 증가하는 예제

- ex1.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="${relativePackage}.${activityClass}" >


    <Button

        android:id="@+id/btn1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="숫자 증가" />


</RelativeLayout>




-MainActirity.java

package com.example.day0307;

import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.Toast;


public class MainActivity extends Activity implements OnClickListener{

int cnt=1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//xml을 해석하여 위젯이 메모리에 올라옴

setContentView(R.layout.activity_main);

Button btn1 = (Button)findViewById(R.id.btn1);

//자바에서는 이벤트 구현시 3단계로 이루어진다.

//1.리스너의 종류를 선택

//2.리스너가 보유한 메서드 재정의

//3.이벤트를 일으킨 이벤트 소스(위젯)과 리스너와의 연결

btn1.setOnClickListener(this);

}

//현재 클래스를 클릭을 감지하는 리스너로 정의했기 깨문에 클릭행위가 발생했을때 

//어떤 구현을 할지를 아래의 매서드에서 재정의 해야한다.

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

//숫자를 1씩 증가시켜 화면에 출력

cnt++;

Toast.makeText(this, "숫자:"+cnt, Toast.LENGTH_SHORT).show();

}

}

 









●버튼을 클릭하면 ImageView 의 이미지를 바꾸는 예제


- gallery.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

    

    <ImageView 

        android:id="@+id/imgView"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_marginLeft="30dp"

        android:layout_marginRight="30dp"

        android:src="@drawable/img0"/>

    <Button 

        android:id="@+id/backButton"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignLeft="@id/imgView"

        android:layout_alignBottom="@id/imgView"

        android:text="이전"/>

    <Button 

        android:id="@+id/forwardButton"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignRight="@id/imgView"

        android:layout_alignBottom="@id/imgView"

        android:text="다음"/>

</RelativeLayout>




- GalleryActivity.java

//자바에서의 클래스는 사물 자체가 아닌, 사물을 생성해낼 수 있는 틀을 정의하는것!

//개발자가 정의한 틀을 가리켜 클래스라 하고, 문자,숫자,논리값 이외의 새로운 객체자료형을 정의한 것고 같다.

//따라서 앞으로는 클래스는 자료형으로 봐야한다.

package study;


import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.Toast;


import com.example.day0307.R;


public class galleryActivity extends Activity implements OnClickListener{

ImageView imgView;

//갤러리와 같이 대량의 데이터를 순서대로 처리하는 경향이 강한 프로그램은

//대상 데이터를 변수명으로 처리하기 보다는 

//순서있는 데이터를 처리하기 위한 배열기법을 이용하는 것이 효율적이다.

int data[] = new int[7];

int cnt=0;

//액티비티의 생명주기중에서, 메모리에 최초에 올라올때 호출되는 메서드이다.

//따라서 개발자는 앱이 가동되자 마자 최초에 보게될 화면 수정을 해야한다.

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);


data[0] = R.drawable.img0;

data[1] = R.drawable.img1;

data[2] = R.drawable.img2;

data[3] = R.drawable.img3;

data[4] = R.drawable.img4;

data[5] = R.drawable.img5;

data[6] = R.drawable.img6;

//화면 호출

setContentView(R.layout.gallery);

//이미 xml에 의해 메모리에 올라온 기존 위젯을 참고

imgView = (ImageView)findViewById(R.id.imgView);

Button backButton = (Button)findViewById(R.id.backButton);

Button forwardButton = (Button)findViewById(R.id.forwardButton);

backButton.setOnClickListener(this);

forwardButton.setOnClickListener(this);

}

//다음 사진 나오는 메서드 정의

public void forward(){

if(cnt==data.length-1){

Toast.makeText(this, "마지막 사진입니다.", Toast.LENGTH_SHORT).show();

}else{

Toast.makeText(this, "다음사진", Toast.LENGTH_SHORT).show();

cnt++;

imgView.setImageResource(data[cnt]);

}

}

//이전 사진 나오는 메서드 정의

public void back(){

if(cnt==0){

Toast.makeText(this, "첫 사진입니다.", Toast.LENGTH_SHORT).show();

}else{

Toast.makeText(this, "이전사진", Toast.LENGTH_SHORT).show();

cnt--;

imgView.setImageResource(data[cnt]);

}

}


@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Log.i("my info", "v의 값"+v);

//이벤트를 일으킨 id값

int id = v.getId();

if(id==R.id.backButton){

back();

}

if(id==R.id.forwardButton){

forward();

}

}

}























Posted by -현's-

댓글을 달아 주세요


●버튼을 클릭하면 메세지가 나오는 예제


MainActivity.java

package com.example.project


import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.Toast;


//사용자가 위젯에 이벤트를 발생시킬때, 이러한 이벤트를 click이벤트라 하고, 이 이벤트가 발생했을때 어떤 내용의

//구현을 할지는 개발자의 몫이기 때문에, 내용이 불완전한 인터페이스 객체가 전달된다!

public class MainActivity extends Activity implements OnClickListener {  

//클릭 이벤트를 사용하려면 implements OnClickListener를 사용해야한다.


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//xml화면이 보여지게됨

setContentView(R.layout.ex9);

//이벤트 구현의 대상이 되는 위젯을 명시하기

Button btn1 = (Button)findViewById(R.id.btn1);

//버튼 클릭시 이벤트 발생

btn1.setOnClickListener(this);

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Toast.makeText(this, "클릭되었습니다.", Toast.LENGTH_SHORT).show();

}

}

 



- ex.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:gravity="center" >

    

    <!-- 아이디는 한xml당 id값이 중복되지만 않으면 된다. -->

    <Button 

        android:id="@+id/btn1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="클릭"/>

    

    

    

</LinearLayout>











●버튼을 클릭하면 화면이 이동하는 예제

액티비티를 추가하면 매니페스트에 액티비티를 추가해야한다.

앱이 실행되면 <intent-filter>가 있는 액비티비가 먼저 실행된다. 먼저 화면에 띄울 액티비티 안에 <intent-filter>를 넣어준다.


- AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.day0228"

    android:versionCode="1"

    android:versionName="1.0" >


    <uses-sdk

        android:minSdkVersion="14"

        android:targetSdkVersion="21" />


    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name=".MainActivity"

            android:label="@string/app_name" >

        </activity>

        

        <!-- 액티비티 추가하면 여기에 선언해야한다 -->

        <activity 

            android:name="study.activity.ActivityA">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        

        <activity

            android:name="study.activity.ActivityB">

        </activity>

      

    </application>


</manifest>

 



-a.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/RelativeLayout1"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    

    <Button 

        android:id="@+id/btn_move"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="다른 화면 이동"/>

    

</RelativeLayout>




- ActivityA.java

package study.activity;


import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;


import com.example.day0228.R;


public class ActivityA extends Activity implements OnClickListener{

//액티비티 클래스가 최초에 실행될때 메모리에 올라오는 순간, 아래의 onCreate 메서드가 자동으로 호출된다.

//따라서 개발자는, 화면이 최초에 앱 가동에 의해 보여질때 하고 싶은 코드를 작성하면 된다.

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//xml에 명시된 태그를 해석하여 실제 위젯으로 생성 및 메모리에 올리는 과정을 임플레이션이라 한다.

setContentView(R.layout.a);

//이미 메모리에 올라온 버튼을 제어하기 위해, findViewById라는 메서드로 버튼을 지적한다.

Button btn_move = (Button)findViewById(R.id.btn_move);

btn_move.setOnClickListener(this);

}


@Override

public void onClick(View v) {

//다른 액티비티 호출

//this는 현재 클래스

Intent intent = new Intent(this, ActivityB.class);

startActivity(intent);

}

}






- b.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:background="#ffdd00"

    android:gravity="center" >

    

    <Button 

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="닫기"/>

    

</LinearLayout>






- ActivityB.java

package study.activity;


import com.example.day0228.R;


import android.app.Activity;

import android.os.Bundle;


public class ActivityB extends Activity{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.b);

}

}

 













Posted by -현's-

댓글을 달아 주세요

 

●버튼에 링크를 걸려면 <a href="#">을 쓰면 안되고 버튼 태그 안에 onclick="location.href='#' "을 넣어줘야한다.

ex)


<input type="button" value="버튼" onclick="location.href='#' ">



<button type="button" onclick="location.href='javascript:jsFunction();' " >버튼 누르면 자바스크립트 실행</button>

Posted by -현's-

댓글을 달아 주세요

●엑티비티(Activity) 영역

 

1. 전역변수 선언 영역

 

2. 프로그램 초기화 영역 - onCreate() 메서드는 프로그램이 켜질때 한 번 실행된다. 이 부분은 변수에 초기값을 지정해주고 버튼 등의 컨트롤에 리스너를 연결하는 용도로 쓰인다.

 

3. 프로그램에서 반복적으로 사용할 영역 - 실제로 작성할 프로그램의 본체이다. 각종 연산과정과 처리결과를 화면에 표시하는 소스코드 등을 여기에 작성한다.

 

 

 

 

●버튼 리스너 작성 기본

 

1. 리스너 할당

 

2. 리스너 본체

 

 

 

 

 

●예제 - EditText에 어떤 값을 입력한후 '확인' Button을 누르면 그 값이 TextView에 표시되는 예제

 

 

 

 

 

 

 

 

Posted by -현's-

댓글을 달아 주세요