안드로이드

1 2 3 4 5

자바코드로 UI 구현


보통의 경우에는 xml을 사용해서 UI를 구현하지만 java를 이용해서 UI를 구현해야할 경우가 생긴다.

예를 들어 버튼 수백개를 만들어야 하는데 xml로 만들면 노가다를 해야되니까 java에서 UI를 만들어서

for문에 넣어 생성시켜주면 보다 편하게 생성이 가능하다.

 

간단하게 LinearLayout을 생성하고 EditText와 Button을 나타내도록 만들었습니다.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // setContentView(R.layout.activity_main);

        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);

        layout.setLayoutParams(new LinearLayout.LayoutParams(
		LinearLayout.LayoutParams.FILL_PARENT, 
		LinearLayout.LayoutParams.FILL_PARENT));

	// EditText 생성
        EditText edit = new EditText(this);
        edit.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

	// Button 생성
	Button button = new Button(this);
	button.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

	// 레이아웃에 추가
	layout.addView(edit);
	layout.addView(button);

	setContentView(layout);


    }
}

+ setContentView(R.layout.activity_main);는 activity_main.xml을 연결시켜 보여주는 것이므로 지워줍니다.



탭레이아웃(TabLayout) 사용하기

 


안드로이드 탭레이아웃(TabLayout) : https://material.io/develop/android/components/tab-layout/

 

Tab Layout - Material Components for Android

Tab Layout TabLayout provides a horizontal layout to display tabs. The layout handles interactions for a group of tabs including: scrolling behavior, (swipe) gestures, tab selection, animations, and alignment. The Android Developers site provides detailed

material.io

 

탭레이아웃을 사용하려면 우선 build.gradle에 dependency를 추가시켜줘야 합니다.

implementation 'com.android.support:design:28.0.0'

( ※ 싱크 후 에러가 뜰 경우 Alt + Enter를 통해서 해결해주시면 됩니다. )

 

 

xml 코드

<com.google.android.material.tabs.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0xxx"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1xxx"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="2xxx"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="3xxx"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="4xxx"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="5xxx"/>

    </com.google.android.material.tabs.TabLayout>

탭레이아웃 안에 탭아이템을 통해서 탭 설정을 해주시면 됩니다.

 

탭을 많이 만들어서 스크롤이 가능하게 하려면 탭레이아웃 태그 내에 tabMode를 추가시켜주시면 됩니다.

app:tabMode="scrollable"

 

그리고 기타 추가구현 사항은 맨 위에 올린 링크를 통해 들어가시면

아이콘, 백그라운드, 사이즈, 색상 등 사용방법을 확인하실 수 있습니다.

 

 


(+ 탭 Fragment 연결)

 

탭을 클릭했을 때 각각의 탭마다 Fragment연결을 시켜주겠습니다.

우선 activity_main.xml에서 탭레이아웃 밑에 FrameLayout을 생성합니다.

<FrameLayout
	android:id="@+id/frame"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	android:layout_below="@id/tabs"
></FrameLayout>

RelativeLayout를 사용했으므로 layout_below로 탭레이아웃 아래에 위치하도록 했습니다.

 

 

연결시켜줄 xml과 java파일을 생성합니다.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:textSize="20sp"
        android:text="0000"/>

</LinearLayout>

간단하게 xml 파일을 만들어 주고

 

public class Fragment0 extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment0, container, false);

        return view;
    }
}

java 파일도 생성했습니다. 원하는 탭 갯수만큼 생성시켜주시면 됩니다.

 

public class MainActivity extends AppCompatActivity {

    Fragment fragment0, fragment1, fragment2, fragment3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fragment0 = new Fragment0();
        fragment1 = new Fragment1();
        fragment2 = new Fragment2();
        fragment3 = new Fragment3();

        getSupportFragmentManager().beginTransaction().add(R.id.frame, fragment0).commit();

        TabLayout tabs = (TabLayout) findViewById(R.id.tabs);

        tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {

                int position = tab.getPosition();

                Fragment selected = null;
                if(position == 0){

                    selected = fragment0;

                }else if (position == 1){

                    selected = fragment1;

                }else if (position == 2){

                    selected = fragment2;

                }else if (position == 3){

                    selected = fragment3;
                }

                getSupportFragmentManager().beginTransaction().replace(R.id.frame, selected).commit();
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }
}

MainActivity에서 만든 Fragment들을 선언해주고,

getSupportFragmentManager().beginTransaction().add(R.id.frame, fragment0).commit(); 으로 초기화면을 설정합니다.

그리고 TabLayout의 addOnTabSelectedListener에 onTabSelected메서드를 이용해서

해당탭을 클릭했을 때 getPosition() 값을 이용해 프래그먼트 전환시켜줍니다.



Android studiod에서 유용한 쓰는 단축키

(Window / Mac)


지정한 범위 복제 또는 줄 복제

- 별도의 블록지정이 없을 경우 줄 복사, 블록지정을 했을 경우 해당 블록 복사

(Window) Ctrl + D

(Mac) Cmd + D

 

줄 삭제

(Window) Ctrl + Y

(Mac) Cmd + Delete(백스페이스 버튼)

 

 

확장범위 선택

(Window) Ctrl + W

(Mac) Opt + ↑ (범위 축소는 ↓)

 

자동완성

(Window) Ctrl + Space

(Mac) Cmd + Space(키가 겹치므로 추가설정 필요!)

 

대소문자 변환

(Window) Ctrl + Shift + U

(Mac) Cmd + Shift + U

 

활성화 탭 닫기

(Window) Ctrl + F4

(Mac) Cmd + W

 

전체에서 검색

- 프로젝트 전체에서 검색가능

- 기본 검색은 Shift 제외하면 됨

(Window) Ctrl + Shift + F

(Mac) Cmd + Shift + F

 

퀵 픽스(빠른수정)

(Window) Alt + Enter

(Mac) Opt + Enter

 

코드 생성(getter, setter, constructor, hashCode/equal, toString, new file, new class)

(Window) Alt + Insert

(Mac) Cmd + N

 

오버라이드 메서드 생성

(Window, Mac 동일) Ctrl + O

 

미사용 import 제거

(Window) Ctrl + Alt + O

(Mac) Ctrl + Option + O

 

 

 


[Android] WebView 사용하기

2020. 5. 31. 17:14

WebView 사용하기


 

Webview를 사용해서 웹페이지 로드를 할 수 있다.

WebView webView = (WebView)findViewById(R.id.id_webview);

WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true); // 자바스크립트 허용 

webView.setWebViewClient(new WebViewClient()); 
webView.loadUrl("https://www.naver.com");

 위 코드를 통해서 네이버 등 기타 웹사이트를 Webview를 통해 간단하게 로드가 가능하다.

 

자바스크립트가 적용되어 있어서 사이트가 제대로 보여지지 않는 곳이 있는데 이 경우에는

webSettings.setJavaScriptEnabled(true); 를 이용해 자바스크립트를 허용해주어야 한다.

 

 


[Android] selector

2020. 5. 29. 23:40

selector 종류


 

android:state_pressed = true (눌렀을 때)

 

android:state_checked = true (체크했을 때)

 

android:state_enabled = true (사용가능할 때)

 

android:state_focused = true (포커스 됐을 때)

 

android:state_selected = true (선택 됐을 때)

 

반대의 경우에는 false를 입력하시면 됩니다.

 

 

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_selected="true"
        android:drawable="@android:color/holo_blue_light"/>
</selector>

위와 같이 작성하여 선택되었을 때 색상을 변경시켜줄 수 있습니다.



다이얼로그(AlertDialog)

 


버튼을 눌러서 알림창을 띄우는 예제.

btn_dialog.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		AlertDialog.Builder ad = new AlertDialog.Builder(MainActivity.this);
		ad.setIcon(R.mipmap.ic_launcher);
		ad.setTitle("제목");
		ad.setMessage("Dialog 내용");
        
		ad.setPositiveButton("확인", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
            	
			}
		});
		ad.setNegativeButton("취소", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
            	
			}
		});
        	ad.setNeutralButton("나중에", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {

			}
		});
		ad.show();
	}
});

 

.setIcon() - 이미지 선택

.setTitle() - Dialog 제목

.setMessage() - Dialog 내용

 

.setPositiveButton()

.setNegativeButton()

.setNeutralButton()

각가의 함수를 이용해서 버튼 생성도 가능합니다.

 

"setNeutralButton()________________setNegativeButton()___setPositiveButton()"

와 같이 배치가 되므로 원하는 위치에 있는 함수에 작성하시면 됩니다.

 

 

 

 

 



스낵바(SnackBar)

 

 


토스트(Toast) 사용하기 : https://sseong66.tistory.com/36

 

스낵바와 토스트는 비슷한 기능을 하는데

토스트는 단순히 메시지를 띄우지만,

스낵바는 메시지 옆에 클릭할 수 있는 액션을 줄 수 있습니다.

 

스낵바를 사용하기 위해서는 build.gradle - dependencies에서 추가해줘야 합니다.

implementation 'com.android.support:design:28.0.0'

 

위의 implementation이 에러가 발생한다면

File -Project Structure - Dependencies - app에서 "+"를 눌러 Library Dependency에서 design을 검색해서

com.android.support로 된거를 선택해서 추가시켜주면 됩니다.

 

MainActivity에 코드 작성

btn_snackBar.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {

		Snackbar.make(v, "스낵바가 실행되었습니다!", Snackbar.LENGTH_SHORT).show();
	}
});

버튼을 누르면 SnackBar가 실행되도록 만들었습니다.

SnackBar는 make()함수를 통해서 구현이 가능하고 3개의 인자를 필요로 합니다.

첫 번째 인자는 View인 v를 넣어주고,

두 번째 인자는 표시할 내용,

세 번째 인자는 화면에 SnackBar가 표시될 시간을 나타냅니다.

  SnackBar.LENGTH_SHORT는 짧게! (약 2초)

  SnackBar.LENGTH_LONG은 길게! (약 5초)

 

마지막으로 .show()를 통해서 표시되도록하면 됩니다.

 

그리고 스낵바 메시지 옆에 버튼을 추가해주려면

btn_snackBar.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {

		Snackbar.make(v, "스낵바가 실행되었습니다!", Snackbar.LENGTH_SHORT).setAction("CLOSE", new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// 버튼 클릭 시 실행한 내용 작성
			}
		}).show();
	}
});

.show() 전에 위와 같이 .setAction()을 써서 클릭했을 때 처리할 내용을 작성하시면 됩니다.

 



토스트(Toast) 사용하기

 

 


 

Toast는 Log처럼 쉽게 실행이 가능합니다.

Toast.makeText(MainActivity.this, "메시지", Toast.LENGTH_SHORT).show();

이와 같이 작성하시면 사용이 가능합니다.

 

makeText()함수를 이용하는데 3개의 인자가 사용됩니다.

첫 번째 인자는 Context정보를 넘겨줍니다.

  주로 this, getApplicationContext(), Activity명.this를 사용합니다.

두 번째 인자는 표시할 내용.

세 번째 인자는 화면에 Toast가 표시될 시간을 나타냅니다.

  Toast.LENGTH_SHORT는 짧게! (약 2초)

  Toast.LENGTH_LONG은 길게! (약 5초)

 

그리고 마지막으로 .show()를 통해서 표시되도록하면 됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



안드로이드 개발을하면서 필요한 로그 출력방법입니다.

코드가 실행되다가 로그를 지나가게 되면 로그캣에 메시지를 남기게 됩니다.

 

로그 5종류(v, i, d, w e)

verbose  -> Log.v

info       -> Log.i

debug    -> Log.d

warning  -> Log.w

error      -> Log.e

 

 

좌측하단을 보시면 로그캣(Logcat)이 있는데 클릭을 해보시면 다른 로그들이 많이 생성되는 것을 볼 수 있습니다.

 

코드에 위와 같이 첫번째 인자에는 제목, 두번째 인자에는 내용을 넣어서 작성하시고 실행을 하면

이와 같이 출력이 되는 것을 확인하실 수 있습니다.

 

로그캣을 통해서 실행이 되는지를 확인하거나 데이터를 출력해보실 수 있습니다.



onCreate() - Activity가 최초 실행 시 호출, onCreate를 통해서 초기화 설정

onStart() - Activity가 시작되기 직전에 호출

onResume() - Activity가 뜨고 동작 직전에 호출

onPause() - 다른 Activity가 활성화 되었을 경우 호출

onStop() - 다른 Activity로 완전히 가려졌을 경우 호출

onDestory() - Activity 삭제되기 직전에 호출

onRestart() - Activity가 onStop()된 후 시작되기 전에 호출


+ Recent posts