스타의 도서관/안드로이드 개발

안드로이드 기초 강좌(listview, gridview, 명시적 intent, 암묵적 intent, alertdialog, progressdialog, customdialog) - 5/24

스타(star) 2013. 5. 24. 09:57

안녕하세요. 스타입니다. 


계속해서 안드로이드 기초 강좌가 나가고 있습니다.


요 몇일 째 계속해서 view에 대해서 소스 코드 예제를 올리고 있습니다.



listview는 데이터를 리스트 처럼 나열하고 싶을 때 사용합니다.


activity_main.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"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context=".MainActivity" >


    <TextView

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:id="@+id/selection"/>

    

    <ListView

        android:id="@android:id/list"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"/>


</RelativeLayout>


MainActivity.java

package com.example.listview;


import java.util.ArrayList;


import android.os.Bundle;

import android.app.Activity;

import android.app.ListActivity;

import android.view.Menu;

import android.view.View;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.TextView;


public class MainActivity extends ListActivity {


TextView selection;

ArrayAdapter<String> mAdapter;

private ArrayList<String> mStrings = new ArrayList<String>();

String[]items = {"mike", "angel","crow","john","ginnie", "sally", "cohen", "rice"};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

for(int i=0;i<items.length;i++)

mStrings.add(items[i]);

mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mStrings);

setListAdapter(mAdapter);

selection = (TextView)findViewById(R.id.selection);

}


protected void onListItemClick(ListView lv, View v, int position, long id)

{

super.onListItemClick(lv, v, position, id);

String text = "position:" + position+", "+items[position];

selection.setText(text);

}


}


실행 결과



다음은 gridview 입니다. 사진을 격자 단위로 출력합니다. 보통 갤러리 용도로 많이 사용합니다.


activity_main.xml

<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:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:id="@+id/selection"/>

    

    

    <GridView

        android:id="@+id/grid"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:verticalSpacing="35px"

        android:horizontalSpacing="5px"

        android:numColumns="auto_fit"

        android:columnWidth="100px"

        android:stretchMode="columnWidth"

        android:gravity="center"/>

    </LinearLayout>

    

MainActivity.java

package com.example.gridview;


import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ArrayAdapter;

import android.widget.GridView;

import android.widget.TextView;


public class MainActivity extends Activity {


String items[]={"busan", "ulsan", "seoul", "dfdf", "dfdfd", "daegu", "gyungido", "gwangju", "fdfdfd"};

ArrayAdapter<String> arraryAdapter;

GridView gridView;

TextView textView;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

gridView = (GridView)findViewById(R.id.grid);

textView = (TextView)findViewById(R.id.selection);

arraryAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);

gridView.setAdapter(arraryAdapter);

gridView.setOnItemClickListener(onClick);

}


AdapterView.OnItemClickListener onClick = new OnItemClickListener(){

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3){

textView.setText(items[arg2]);

}

};


}



다음은 실행 결과




이번에는 명시적 intent에 대해서 알아봅니다.


둘째날 했던 액티비티간 화면 전환과 비슷한 코드입니다.

다만 intent.putextra 를 통해 추가적인 정보를 전달합니다.


activity_main.xml

<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:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="this is sub activity" 

        android:textSize="30sp"

        android:textColor="#00ff00"/>

    

    <Button

        android:id="@+id/call"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Call"/>

    


</LinearLayout>


activity_sub.xml

<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:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="this is sub activity" 

        android:textSize="30sp"

        android:textColor="#ff0000"/>

    

    <TextView

        android:id="@+id/subTextView"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:textSize="30sp"

        android:textColor="#ff0000"/>

    

    <Button

        android:id="@+id/close"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="close"/>

    


</LinearLayout>


두개의 액티비티 레이아웃을 만들고


다음엔 두개의 자바 스크립트를 만듬.


MainActivity.java

아래 내용에서 intent.putExtra 부분을 유심이 보기 바람.

package com.example.intent;


import android.os.Bundle;

import android.app.Activity;

import android.content.Intent;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;


public class MainActivity extends Activity {


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button btnCall = (Button) findViewById(R.id.call); //버튼을 정의한다.

btnCall.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent(MainActivity.this, SubActivity.class);

intent.putExtra("name", "Kim");

intent.putExtra("age", "19");

startActivity(intent);

}

});


}

}


SubActivity.java

아래 intent 부분에서 getExtra 부분을 유심이 보기 바람.

package com.example.intent;


import android.os.Bundle;

import android.app.Activity;

import android.content.Intent;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;


public class SubActivity extends Activity {


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_sub);

Intent intent = getIntent();

String name = intent.getExtras().get("name").toString();

String age = intent.getExtras().get("age").toString();

TextView tv = (TextView)findViewById(R.id.subTextView);

tv.setText(name + "/" + age);

Button btnCall = (Button) findViewById(R.id.close);

btnCall.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

finish();

}


});


}

}


실행결과





이번에는 암묵적 intent 예제입니다.


activity_main.xml

<LinearLayout 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"

    android:orientation="vertical">


    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="web or call" />

    

    <Button

        android:id="@+id/web"

        android:text="web"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"/>

    <Button

        android:id="@+id/dial"

        android:text="dial"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"/>


</LinearLayout>


MainActivity.java

package com.example.intentimplicit;


import android.net.Uri;

import android.os.Bundle;

import android.app.Activity;

import android.content.Intent;

import android.view.Menu;

import android.view.View;

import android.widget.Button;


public class MainActivity extends Activity {


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.web).setOnClickListener(clickListener);

findViewById(R.id.dial).setOnClickListener(clickListener);

}


Button.OnClickListener clickListener = new View.OnClickListener(){

public void onClick(View v){

Intent intent;

switch (v.getId()){

case R.id.web:

intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.naver.com"));

startActivity(intent);

break;

case R.id.dial:

intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:010-123-1234"));

startActivity(intent);

break;

}

}

};


}


실행결과는 아래와 같음.







이번에는 alertdialog 예제입니다. 알림 화면을 보여줄 때 사용합니다.


activity_main.xml

<LinearLayout 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"

android:orientation="vertical" >


    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/hello_world" />

    

    <Button

        android:id="@+id/btn0"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="AlertDialog" />


     <Button

        android:id="@+id/btn1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="ProgressDialog" />

</LinearLayout>


이번엔 자바쪽.

MainActivity.java

package com.example.alertdialog;


import android.os.Bundle;

import android.app.Activity;

import android.app.AlertDialog;

import android.app.ProgressDialog;

import android.content.DialogInterface;

import android.util.Log;

import android.view.Menu;

import android.view.View;

import android.widget.Button;


public class MainActivity extends Activity {


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button dialogBtn = (Button)findViewById(R.id.btn0);

dialogBtn.setOnClickListener(new Button.OnClickListener(){

public void onClick(View v){

AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);

alertDialog.setTitle("alert!");

alertDialog.setNegativeButton("Close", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

Log.i("INFO","alert show");

}

});

alertDialog.show();

}

});

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

progBtn.setOnClickListener(new Button.OnClickListener(){

public void onClick(View v){

ProgressDialog dialog = ProgressDialog.show(MainActivity.this, "", "wait plz", true);

}

});

}

}


실행 결과는 다음과 같이 나오네요.









customdialog