반응형

안녕하세요. 애드소프트입니다.

 

오늘은 안드로이드 개발을 하다보면 많은 액티비티(Activity)를 새롭게 호출할때가 많습니다.

 

액티비티에 대해 간단히 알아 보도록 하겠습니다.

액티비티의 개념은 화면에 표시되는 UI구성을 위해 가장 기본이 되는 요소입니다. 안드로이드 앱은

화면에 UI를 표시하기 위해 최소하나 이상의 Activity를 가져야합니다.

앱 실행시 AndroidManifest.xml을 통해 최초 실행될 Activity를 지정할 수도 있습니다.

간단히 설정하자면 현재 화면상에 표시되는 활성화된 창이라고 할 수 있습니다.

 

액티비티의 상태 변화 라이프 사이클은 다음과 같이 표시됩니다.

타원은 상태를 표시하며, 직사각형은 상태를 변경하기 위한 콜백 함수를 표시합니다.

 

출저 : 구글 Developer

 

오늘은 이 Activity를 표시하거나 종료하는 방법을 알아볼까 합니다.

 

Activity를 호출하기 위해서는 다음 두 함수를 이용합니다.

1. startActivity - 액티비티를 호출 할때 사용합니다.

2. startActivityForResult - 액티비티가 시작 될때 코드값를 전송합니다.

 

다음 함수는 Intent를 통해 제공됩니다.

 

Activity를 활성화 하기 위한 간단한 코드를 작성해 보겠습니다.

Intent newIntent = new Intent(context, JavaActivityClass.class);

//key = 문자열키, value = 문자열 값 입력
intent.puExtra(key, value);

startActivity(intent);

파라미터를 받는 쪽에서는 다음과 같이 구현됩니다.

Intent intent = getIntent();
String value = intent.getExtras().getString("key");

 

startActivityForResult를 사용하여 새로운 Activity를 사용한다면 다음과 같이 사용하시면 됩니다.

Intent newIntent = new Intent(context, JavaActivityClass.class);
startActivityForResult(intent, newIntent, requestCode.LOGIN_RESULT);

코드를 사용하기위해서는 다음 함수를 구현 하시면 됩니다.

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	super.onActivity(requestCode, resultCode, data);
    case RequestCode.LOGIN_RESULT:
    	if(resultCode == RESULT_OK && !data) {
        	//로그인 성공시
        }else if(requestCode == RESULT_CANCELED) {
        	// 로그인 결과가 CANCEL 할 때 할일
        }
        break;
      default:
        break;
}

본 예제들은 가상으로 코딩한 내용입니다. 오타와 문법이 조금씩 다를 수 있는점 가만해 주세요 ^^;

본 예제는 새로운 Activity를 실행하면서 두가지 방법으로 간단한 결과나 파라미터를 전송하는 방법을 구현한 내용입니다.

 

 

 

 

 

 

 

 

 

반응형
반응형

안녕하세요. 애드소프트 입니다.

오늘은 LinearLayout을 소개해 볼까 합니다.

 

안드로이드 앱을 만들려면 레이아웃을 기반으로 위젯을 배치해 개발을 하게 됩니다.

제일 기본이 되는 레이아웃 중 사용하기도 편하고 설정할 것이 많지 않아 간단하게 

배치할때 사용하게 됩니다.

 

LinearLayout은 가로또는 세로의 단일 방향으로 정렬을 해주는 스택 방식의 뷰 그룹입니다.

정렬 방향은 android:origentation 속성을 사용하여 레이아웃 방향을 지정할 수 있습니다.

 

분홍색 처럼 가로로 배열 하거나 연두색 처럼 세로로 정렬하여야 할 때 많이 사용됩니다.

위젯을 균등하게 분할 할때도 유용하게 사용하 실 수 있습니다.

균등하게 분할하기 위해서는 

layout_width나 layout_height를 0dp또는 wrap_content 속성을 주어야합니다.

android:layout_weight 속성에 모두 1을 설정하면 위젯을 수에따라 균등하게 분할 됩니다.

 

다음 예제를 통해 확인해 보시기 바랍니다.

<?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:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical" >
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/btn1" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:hint="@string/btn2" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:text="@string/btn3" />
</LinearLayout>

 

위와같이 코딩을 하시면 다음과 같이 배치가 될 것입니다.

글자 크기와 보더는 다르지만 정렬 방식만 참고하세요.

 

반응형
반응형

안녕하세요. 애드소프트 입니다.

 

오늘은 토스트 사용법에 대해 알아 보겠습니다.

 

토스트(Toast)는 사용자에게 짧은 메시지 형식으로 팝업과 비슷한 형태의 오버레이 창에 메시지를 표시합니다.

메시지 전달을 위해 사용하고 일정시간 지나면 자동으로 사라집니다. 쉽게 말해 단순한 의사전달 팝업 정도로 이해하시면 될 것 같습니다.

 

android developer 발췌

 

 

Toast(토스트) 사용하기

 

    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView title;
        TextView content;
        public ViewHolder(View view) {
            super(view);

            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast alertToast = Toast.makeText(view.getContext(), getContentTextView().getText(), Toast.LENGTH_SHORT );
                    alertToast.show();
                }
            });

            title = view.findViewById(R.id.item_tv_title);
            content = view.findViewById(R.id.item_tv_content);
        }

        public TextView getContentTextView() {
            return content;
        }
    }

 

상단 예제는 RecylerView의 아이템을 눌렀을 경우 토스트 메시지를 표시하는 샘플 코드입니다.

 

이 예는 대부분의 토스트 메시지 알림에 필요한 모든 것을 보여주며, 이 외에 필요한 것은 거의 없습니다. 그러나 토스트 메시지의 위치를 다르게 지정하거나 단순한 SMS 대신 자체 레이아웃을 사용하는 것이 좋습니다.

 

토스트 메시지 위치 지정

toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);

위치를 오른쪽으로 살짝 이동하려면 두 번째 매개변수의 값을 올리고, 아래로 조금 이동하려면 마지막 매개변수의 값을 올립니다.

 

맞춤 토스트 메시지 뷰 만들기

단순한 텍스트 메시지로 충분하지 않다면 토스트 메시지 알림용으로 맞춤설정된 레이아웃을 만들 수 있습니다. 맞춤 레이아웃을 만들려면 XML 또는 애플리케이션 코드에 뷰 레이아웃을 정의하고 루트 View 객체를 setView(View) 메서드에 전달합니다.

다음 스니펫에는 토스트 메시지 알림용으로 맞춤설정된 레이아웃이 포함되어 있습니다(layout/custom_toast.xml로 저장됨).

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/custom_toast_container"
              android:orientation="horizontal"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:padding="8dp"
              android:background="#DAAA"
              >
    <ImageView android:src="@drawable/droid"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_marginRight="8dp"
               />
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:textColor="#FFF"
              />
</LinearLayout>

LinearLayout 요소의 ID는 'custom_toast_container'임을 확인하세요. 다음과 같이 이 ID와 XML 레이아웃 파일 'custom_toast'의 ID를 사용하여 레이아웃을 확장해야 합니다.

 

LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_toast,
                (ViewGroup) findViewById(R.id.custom_toast_container));

TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("This is a custom toast");

Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();

 

먼저 getLayoutInflater()(또는 getSystemService())를 사용하여 LayoutInflater를 가져온 다음 inflate(int, ViewGroup)

사용하여 XML에서 레이아웃을 확장합니다.

첫 번째 매개변수는 레이아웃 리소스 ID이고 두 번째는 루트 뷰입니다.

이 확장된 레이아웃을 사용하여 레이아웃에서 더 많은 뷰 객체를 찾을 수 있으므로 이제 ImageView와 TextView 요소의 콘텐츠를 캡처하고 정의할 수 있습니다.

마지막으로 Toast(Context)를 사용하여 새 토스트 메시지를 만들고 토스트 메시지의 일부 속성(예: 중력 및 지속 시간)을 설정합니다.

그런 다음 setView(View)를 호출하고 확장된 레이아웃을 전달합니다.

이제 show()를 호출하여 맞춤 레이아웃으로 토스트 메시지를 표시할 수 있습니다.

 

참고 : developer.android.com/guide/topics/ui/notifiers/toasts

반응형
반응형

 

개요

스피너는 값 집합에서 하나의 값을 선택할 수 있는 빠른 방법을 제공합니다. 기본 상태의 스피너는 현재 선택된 값을 표시합니다. 스피너를 터치하면 기타 모든 사용 가능한 값을 포함하는 드롭다운 메뉴가 표시되며, 여기서 새 값을 선택할 수 있습니다.

Spinner 객체를 사용하여 레이아웃에 스피너를 추가할 수 있습니다. 이 작업은 일반적으로 XML 레이아웃에서 <Spinner> 요소를 사용하여 실행해야 합니다. 예:

 

<Spinner
    android:id="@+id/planets_spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

 

선택 항목 목록으로 스피너를 채우려면 Activity 또는 Fragment 소스 코드에 SpinnerAdapter를 지정해야 합니다.

주요 클래스는 다음과 같습니다.

사용자 선택 항목으로 스피너 채우기

스피너에 제공하는 선택 항목은 어떠한 소스에서든 가져올 수 있지만, SpinnerAdapter를 통해 제공되어야 합니다. 예를 들어 선택 항목을 배열에서 사용할 수 있는 경우에는 ArrayAdapter, 선택 항목을 데이터베이스 쿼리에서 사용할 수 있는 경우에는 CursorAdapter를 통해 제공합니다.

예를 들어, 스피너에 사용할 수 있는 선택 항목이 사전 결정된 경우에는 문자열 리소스 파일에 정의된 문자열 배열을 사용하여 이러한 선택 항목을 제공할 수 있습니다.

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
        <item>Jupiter</item>
        <item>Saturn</item>
        <item>Uranus</item>
        <item>Neptune</item>
    </string-array>
</resources>

이러한 배열과 함께 Activity 또는 Fragment에 다음 코드를 사용하여 ArrayAdapter의 인스턴스를 통해 스피너에 이러한 배열을 제공할 수 있습니다.

 

createFromResource() 메서드를 사용하면 문자열 배열에서 ArrayAdapter를 생성할 수 있습니다. 이 메서드의 세 번째 인수는 선택된 항목이 스피너 컨트롤에 나타나는 방식을 정의하는 레이아웃 리소스입니다. simple_spinner_item 레이아웃은 플랫폼에서 제공하며 스피너의 모양에 관해 자체적인 레이아웃을 직접 정의하고자 하지 않을 경우 사용해야 하는 기본 레이아웃입니다.

그런 다음, setDropDownViewResource(int)를 호출하여 어댑터가 스피너 선택 항목의 목록을 표시하는 데 사용해야 하는 레이아웃을 지정해야 합니다(simple_spinner_dropdown_item은 플랫폼에서 정의하는 또 다른 표준 레이아웃임).

setAdapter()를 호출하여 어댑터를 Spinner에 적용합니다.

 

사용자 선택에 응답

사용자가 드롭다운에서 항목을 선택하면 Spinner 객체가 항목 선택 시 이벤트를 수신합니다.

스피너에 관한 선택 이벤트 핸들러를 정의하려면 AdapterView.OnItemSelectedListener 인터페이스와 이에 상응하는 onItemSelected() 콜백 메서드를 구현합니다. 예를 들어, 다음은 Activity의 인터페이스 구현입니다.

public class SpinnerActivity extends Activity implements OnItemSelectedListener {
    ...

    public void onItemSelected(AdapterView<?> parent, View view,
            int pos, long id) {
        // An item was selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos)
    }

    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback
    }
}

AdapterView.OnItemSelectedListener에는 onItemSelected() onNothingSelected() 콜백 메서드가 필요합니다.

그런 후 setOnItemSelectedListener()를 호출하여 인터페이스 구현을 지정해야 합니다.

 

Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(this);

 

Activity 또는 Fragment를 사용하여 AdapterView.OnItemSelectedListener 인터페이스를 구현하는 경우(위의 예시 참조) this를 인터페이스 인스턴스로 전달하면 됩니다.

 

 

adapter나 리스너 구현이해가 어렵다면 다음 라이브러리와 같은 오픈소스를 사용하셔도 좋습니다.

github.com/arcadefire/nice-spinner

 

arcadefire/nice-spinner

A nice spinner for Android. Contribute to arcadefire/nice-spinner development by creating an account on GitHub.

github.com

 

참고: developer.android.com/guide/topics/ui/controls/spinner?hl=ko

 

반응형

+ Recent posts