전체 글

1 2 3 4 5 6 7 8

하단네비게이션

 

 

1. gradle 추가

2. activity_main.xml

3. menu 폴더 생성

4. bottom_menu.xml

5. java파일 및 xml 생성

6. MainActivity


1. gradle 추가

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

 

build.gradle에 implementation 추가시켜줍니다.

버전이 맞지 않으면 에러가 발생할 수 있으므로 버전을 맞춰주세요.

 

2. activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/main_frame"
        android:layout_width="match_parent"
        android:layout_height="659dp"
        app:layout_constraintBottom_toTopOf="@+id/bottomNavi"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottomNavi"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:itemIconTint="#000"
        app:itemTextColor="#000"
        app:layout_constraintBottom_toBottomOf="parent"
        app:menu="@menu/bottom_menu"
        tools:layout_editor_absoluteX="8dp" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

3. menu 폴더 생성

res - New - Android Resource Directory에서 Resource type을 menu로 선택 후 생성.

 

4. bottom_menu.xml 생성

menu 폴더에 bottom_menu.xml 생성 후 메뉴 추가.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/show"
        android:enabled="true"
        android:icon="@drawable/ic_import_contacts_black_24dp"
        android:title="보기"/>

    <item
        android:id="@+id/write"
        android:enabled="true"
        android:icon="@drawable/ic_create_black_24dp"
        android:title="쓰기"/>

    <item
        android:id="@+id/info"
        android:enabled="true"
        android:icon="@drawable/ic_info_outline_black_24dp"
        android:title="정보"/>
</menu>

 

5. java파일 및 xml 생성

각각의 메뉴마다 연결시킬 파일 만들기

 

- Fragment1.java

public class Fragment1 extends Fragment {

    private View view;

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



        return view;
    }
}

- fragment1.xml

<?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="30sp"
        android:text="fragment1"/>

</LinearLayout>

위와 같이 2와 3에 해당하는 java파일 & xml 파일 추가 생성~!

 

 

6. MainActivity

public class MainActivity extends AppCompatActivity {

    private BottomNavigationView bottomNavigationView; // 바텀네비게이션 뷰
    private FragmentManager manager;
    private FragmentTransaction transaction;
    private Fragment1 fragment1;
    private Fragment2 fragment2;
    private Fragment3 fragment3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavi);
        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                switch (menuItem.getItemId()){

                    case R.id.show:
                        setFrag(0);
                        break;
                    case R.id.write:
                        setFrag(1);
                        break;
                    case R.id.info:
                        setFrag(2);
                        break;
                }
                return true;
            }
        });

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

        setFrag(0); // 첫화면 설정
    }

    // 프래그먼트 교체가 일어나는 메서드
    private void setFrag(int n){

        manager = getSupportFragmentManager();
        transaction = manager.beginTransaction();

        switch (n){
            case 0:
                transaction.replace(R.id.main_frame, fragment1);
                transaction.commit();
                break;
            case 1:
                transaction.replace(R.id.main_frame, fragment2);
                transaction.commit();
                break;
            case 2:
                transaction.replace(R.id.main_frame, fragment3);
                transaction.commit();
                break;
        }
    }
}


1. gradle 추가

2. AndroidManifest 추가

3. xml 작성

4. java 작성

 


https://sseong66.tistory.com/47

 

[Android] 구글맵 API 키 발급

구글맵 API 키 발급 받기 https://console.cloud.google.com/projectselector2/apis/dashboard Google Cloud Platform 하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요. a..

sseong66.tistory.com

시작하기 전에 API 키를 발급받지 않았으면 위 링크로 이동해 API 키 발급을 먼저 진행해주세요.

 

 

1. gradle 추가

dependencies {

	...

    implementation 'com.google.android.gms:play-services-maps:17.0.0'
    implementation 'com.google.android.gms:play-services-location:17.0.0'
}

dependencies에 구글맵에 필요한 2가지 종속성을 추가시킨 후 Sync Now 클릭.

 

 

2. AndroidManifest 추가

<manifest>

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <application
        
        ...

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="AIzaSyCkR6r2uJz2dK5J3pP2Gj9Pq9iv-GfXu7o"/>

    </application>

</manifest>

구글맵에 필요한 uses-permission 2개와 meta-data를 추가시켜줍니다.

meta-data의 value에는 발급받은 API키를 입력하면 됩니다.

 

 

3. xml 작성

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/gMap"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	class="com.google.android.gms.maps.SupportMapFragment"/>

xml에 구글맵을 표시할 fragment를 추가해줍니다.

class를 작성하지 않으면 앱이 정상 작동이 되지 않을 수 있습니다! (이틀 날려먹음 T^T)

 

4. java 작성

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

    GoogleMap map;

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

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.gMap);
        mapFragment.getMapAsync(this);

    }

    @Override
    public void onMapReady(GoogleMap googleMap) {

        map = googleMap;

        LatLng location = new LatLng(37.239912, 131.869296);
        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.title("독도");
        markerOptions.snippet("Dokdo is korean territory");
        markerOptions.position(location);
        map.addMarker(markerOptions);

        map.moveCamera(CameraUpdateFactory.newLatLngZoom(location,16));
    }
}

아무것도 작성하지 않아도 실행이 가능합니다.

 

위와 같이 작성하시면 지도에 마커를 생성할 수 있습니다.



구글맵 API 키 발급 받기


 

https://console.cloud.google.com/projectselector2/apis/dashboard

 

Google Cloud Platform

하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.

accounts.google.com

구글 클라우드 플랫폼에 접속해서 API키를 발급받아야 합니다.

 

 

- 로그인한 후 "프로젝트 만들기"를 선택합니다.

 

 

- 원하는 프로젝트 이름을 입력하고 만들기.

 

 

- API 및 서비스 사용 설정 클릭.

 

 

- 안드로이드에 적용하니까 Maps SDK for Android 선택.

 

 

- 사용설정 클릭.

 

 

- 사용자 인증 정보 탭 클릭해서 "API 및 서비스의 사용자 인증 정보" 클릭.

 

 

- "사용자 인증 정보 만들기"에서 API 키 클릭.

 

 

- 키가 생성됩니다. 이 API 키를 사용하면 되는데 아직 API 설정이 끝난건 아닙니다. "키 제한"을 클릭.

 

 

- 애플리케이션 제한사항에서 Android를 선택하고, Android 앱의 사용량 제한에 "항목 추가" 클릭.

 

 

- 첫번째 패키지 이름은 Android Studio에서 프로젝트를 생성할 때 만든 패키지를 입력

  두번째 SHA-1 인증서는 CMD창을 열어

 

 

"D:Android\jre\bin\keytool" -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

 

입력해줍니다. "D:Android\jre\bin\keytool"는 keytool파일이 위치한 경로라서 해당파일 경로를 찾아서 입력해줍니다.

 

 

SHA1이라고 적힌부분을 복사해서 입력한 후 완료 클릭.

 

 

이제 좀 전에 발급 받았던 API 키를 가져가서 사용하시면 됩니다!



자바코드에서 색상코드 사용하기


배경색 사용을 예로

 

 

xml에서는 background에 색상코드를 넣어서 사용할 수 있고,

android:background="#bbceff"

 

java에서는 setBackgroundColor에 Color.parseColor("색상코드")를 넣어서 사용하면 됩니다.

textView.setBackgroundColor(Color.parseColor("#bbceff"));

[Android] Chip 사용하기

2020. 6. 7. 14:34

Chip 사용하기

 


build.gradle - dependencies 추가

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

 

xml에 chip 추가

<com.google.android.material.chip.Chip
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:text="Banana"/>

 

 

이렇게만 해서 실행하면 앱이 정상적으로 실행이 안될 수 있습니다.

values - style.xml에서 style태그 내에 parent를 Theme.MaterialComponents로 시작하는거로 변경해줘야 합니다.

<style name="AppTheme" parent="Theme.MaterialComponents.Light.Bridge">

여기까지는 기초!

 

 

Chipgroup

Chip만 사용할 경우 줄이 가득차면 다음 줄로 넘어가지 않고 계속해서 옆으로 생성된다.

Chipgroup 안에 Chip을 생성하면 알아서 다음 줄에 Chip을 생성한다.

<com.google.android.material.chip.ChipGroup
	android:id="@+id/chipgroup"
	android:layout_width="match_parent"
	android:layout_height="match_parent">
    
    <!-- 코드 작성 -->
    
</com.google.android.material.chip.ChipGroup>

 

 

Chip 테마

Chip에는 4가지 테마가 있습니다.

왼쪽부터 차례로 Action, Entry, Filter, Choice 입니다.

아래와 같이 style을 추가시켜주시면 됩니다.

<com.google.android.material.chip.Chip
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	style="@style/Widget.MaterialComponents.Chip.Action"
	android:text="Banana"/>
<com.google.android.material.chip.Chip
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	style="@style/Widget.MaterialComponents.Chip.Entry"
	android:text="Banana"/>
<com.google.android.material.chip.Chip
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	style="@style/Widget.MaterialComponents.Chip.Filter"
	android:text="Banana"/>
<com.google.android.material.chip.Chip
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	style="@style/Widget.MaterialComponents.Chip.Choice"
	android:text="Banana"/>

 

기타 추가 속성들은 링크를 통해서 확인하실 수 있습니다.

https://material.io/develop/android/components/chip/

 

Chips - Material Components for Android

Chips A Chip represents a complex entity in a small block, such as a contact. It is a rounded button that consists of a label, an optional chip icon, and an optional close icon. A chip can either be clicked or toggled if it is checkable. Chips may be place

material.io

 



자바코드로 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을 연결시켜 보여주는 것이므로 지워줍니다.



4자리 수로 표시하기

ex) 0001


1000은 4자리 수이지만

1, 10, 100과 같은 수들은 4자리로 표현이 되지 않는다.

 

이 경우에는 String.format을 이용하면 된다.

System.out.println(String.format("%04d", 1));

% - 명령의 시작

0 - 빈공간을 채울 문자

4 - 총 자리수

d - 십진수

 

0001이 출력되게 된다.


' > Java' 카테고리의 다른 글

[Java] this, super  (0) 2020.04.28
[Java] GUI 창닫기  (0) 2019.12.20
[Java] 데이터 타입  (0) 2019.11.13
[Java] 단축키  (0) 2019.11.13
[Java] Hello Java  (0) 2019.11.13

탭레이아웃(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); 를 이용해 자바스크립트를 허용해주어야 한다.

 

 


+ Recent posts