안드로이드 Button style 버튼 꾸미기





결과

결과





Layout 코드

<?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:background="@android:color/holo_orange_light"
    android:orientation="vertical">


    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_empty"
        android:text="배경 투명"
        android:textColor="@android:color/background_light"
        android:textSize="24sp"
        android:textStyle="bold" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_style"
        android:text="버튼 스타일"
        android:textColor="@android:color/background_light"
        android:textSize="24sp" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/text_style"
        android:gravity="center"
        android:text="텍스트 뷰"
        android:textColor="#FFA159"
        android:textSize="24sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_style"
        android:gravity="center"
        android:text="텍스트 뷰"
        android:textSize="24sp"
        android:textStyle="bold" />
</LinearLayout>








파일 생성

- drawable -> resource file을 생성한다.



- 스타일을 쉽게 만들기 위하여 아래 사이트를 이용한다.

https://angrytools.com/android/button/




스타일 제작


- 원하는 스타일을 만든 후 해당 부분을 복사하여 파일에 복사해준 후 사용한다.






투명 Style 코드

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <corners
        android:radius="10dp"
        />
    <solid
        android:color="#00FFFFFF"
        />
    <size
        android:width="270dp"
        android:height="60dp"
        />
    <stroke
        android:width="3dp"
        android:color="#898989"
        />
</shape>

ㄴ 백그라운드를 투명하게 하기 위해서는 solid 부분을 지워주면 된다. 해당 예제는 투명도를 조절하는 방법을 보이기 위하여 작성하였다.


- corners : 사각형 각 모서리부분을 둥글게 만든다. 값이 클수록 각이 없어진다.


- solid : 배경 Color를 지정한다. 여기서는 투명하게 하기 위해서 Color를 "#00FFFFFF" 로 주었다. 


- size : 사이즈를 지정한다. height를 바꾸어주면 높이가 바뀌는것을 확인할 수 있다.


- stroke : 테두리 선을 지정한다. width로 길이를 color로 색을 지정한다.








Style 코드

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <corners
        android:radius="8dp"
        />
    <solid
        android:color="#CCFFDD"
        />
    <padding
        android:left="0dp"
        android:top="0dp"
        android:right="0dp"
        android:bottom="0dp"
        />
    <size
        android:width="270dp"
        android:height="60dp"
        />
    <stroke
        android:width="3dp"
        android:color="#2FEDE7"
        />
</shape>


- padding : padding 값을 지정해 줄수 도 있다.








안드로이드 뷰페이저, 탭 레이아웃 구현 - 탭 연동하기

 

 

 

 

2020/02/12 - [Android] - 안드로이드 뷰페이저, 탭 레이아웃 구현 (1) - 좌우로 밀어서 페이지 전환

불러오는 중입니다...

해당 글은 이전 글과 이어진다.

 

 

 

 

 

결과

 

 

 

 

 

 

 

구현

 

1. MainActivity

- 23 ~ 32라인이 추가되었다.

 > 24 ~ 25 라인 : 탭과 뷰 페이저를 연동시키는 과정

 > 27 ~ 32 라인 : 이미지들을 ArrayList에 저장한 후 탭에 넣어준다. 이미지를 넣지 않을꺼면 생략하여도 된다.

 

 

※ 이미지는 직접 파일을 구하여 이름의 맞게 넣어주어야 한다. 아래 사이트에 가면 사용할 여러 이미지를 받을 수 있다.

 

https://material.io/resources/icons/?style=baseline

 

Resources

Build beautiful, usable products faster. Material Design is an adaptable system—backed by open-source code—that helps teams build high quality digital experiences.

material.io

 

 

 

 

 

 

 

* MainActivity

package com.example.myapplication;

import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;

import com.google.android.material.tabs.TabLayout;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

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

        ViewPager vp = findViewById(R.id.viewpager);
        VPAdapter adapter = new VPAdapter(getSupportFragmentManager());
        vp.setAdapter(adapter);

        // 연동
        TabLayout tab = findViewById(R.id.tab);
        tab.setupWithViewPager(vp);

        ArrayList<Integer> images = new ArrayList<>();
        images.add(R.drawable.cal);
        images.add(R.drawable.sea);
        images.add(R.drawable.set);

        for(int i=0; i<3; i++) tab.getTabAt(i).setIcon(images.get(i));
    }
}

 

 

 

 

 

 

 

 

 

2. Adapter

- 탭과 연동을 해주면 탭의 텍스트가 표시가 안되게 된다. 그래서 이를 표시해주기 위하여 Adapter파일로 간다.

 

- 'Ctrl + O' 를 눌러 getPageTitle을 타이핑하여 찾은 후 추가해 준다.

 

- 탭 아이템들의 표시할 텍스트를 ArrayList를 선언하여 저장해준 후 getPageTitle에서 position에 따라 표시하도록 한다.

 

 

 

 

 

 

 

 

3. Tab Layout

- app:tabIndicatorColor 를 사용하여서 탭의 indicator 색을 변경해 줄 수 있다.

 

- app:tabSelectedTextColor 를 사용하여서 선택된 탭의 텍스트 색을 변경해 줄 수 있다.

 

- 더욱 복잡한 효과를 적용하고 싶다면 직접 파일로 만들어 적용해 주어야 한다.

 

( ※ app: 속성을 찾지 못할 때는 'app:' 까지 입력하면 추가할 것인지 물으면 'Alt + Enter' 를 해주면 된다. )

 

 

 

 

 

 

 

4. 실행 결과

- 이전 글에서와 달리 탭을 눌러도 그에 따라 페이지가 변하며 페이지를 변경하여도 그에따라 탭도 변경된다.

 

 

탭의 텍스트만 넣고 싶다면 위에서 이미지를 넣는 부분을, 이미지만을 넣고 싶다면 텍스트를 넣는 부분을 빼주면 된다.

 

 

 

 

안드로이드 뷰페이저 + 탭  구현하기

 

 

 

 

결과

실행 화면

 

 

 

 

뷰 페이저(ViewPager)

 

좌우로 화면을 밀어 페이지를 전환할 수 있는 뷰

 

 

 

 

탭(Tab Layout)

 

뷰 페이저와 연동하여 뷰 페이저의 페이지들의 메뉴처럼 사용할 수 있다.

 

 

 

 

 

 

 

구현

 

1. 레이아웃 구현

- TabLayout 을 추가해주면 다음과 같은 창이 뜬다면 OK를 누른다. ( 필요로 하는 라이브러리를 추가하겠다고 묻는거다)

 

 

 

 

 

 

- 라이브러리를 추가하고 sync를 하느라 잠시 기다려야 한다. Module: app의 가보면 가장 하단의 material이 추가되었다.

 

 

 

 

 

 

- 이제 다음과 같이 레이아웃을 구성해 준다.

 

 

 

 

 

* 레이아웃 코드

<?xml version="1.0" encoding="utf-8"?>
<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">

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

        <com.google.android.material.tabs.TabItem
            android:id="@+id/tab_Item1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Tab1" />

        <com.google.android.material.tabs.TabItem
            android:id="@+id/tab_Item2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Tab2" />

        <com.google.android.material.tabs.TabItem
            android:id="@+id/tab_Item3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Tab3" />
    </com.google.android.material.tabs.TabLayout>

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

 

 

 

 

 

 

 

2. 페이지로 사용할 Fragment 생성

- 뷰 페이저의 보여줄 페이지를 작성하기 위하여 Fragment를 만들어 준다.

(반드시 Fragment일 필요는 없지만 Fragment를 사용하여 쉽게 구현이 가능하다.)

 

 

 

 

 

- 해당 예시에서는 3개의 페이지만을 이용하므로 위 과정을 반복하여서 Fragment1부터 3까지 만든다.

 

 

 

 

 

- 각 페이지가 전환된 것을 구분하기 편하게 하기 위하여 3개의 Fragment 레이아웃에서 각각 다른 background-Color를 입혀준다.

 

 

 

 

 

 

 

3. ViewPager 의 Adapter 생성

- Java Class 파일을 하나 생성한 후 FragmentPagerAdapter를 상속받도록 한다. 상속받는 것 까지 하였으면 위 이미지처럼 빨간 라인이 보인다.

 

- 커서를 클래스 안에 두고 'Ctrl + i' 를 누르면 위 이미지 처럼 창이 뜨며 2가지를 추가해준다.

 

- 이후 'Alt + Insert' -> Constructor(생성자)를 선택하여 추가해주면 빨간 라인이 사라지며 기본적인 구조가 완성된다.

 

 

 

 

 

 

- ArrayList를 Fragment형으로 정의하여 선언 후 이전에 생성하였던 Fragment 1~3까지 add를 이용하여 추가해 준다.

(※ Fragment 이름을 위와 다르게 하였다면 이름을 맞추어주어야 한다.)

 

 

 

 

* Adapter 코드

package com.example.myapplication;

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;

import java.util.ArrayList;

public class VPAdapter extends FragmentPagerAdapter {
    private ArrayList<Fragment> items;
    public VPAdapter(FragmentManager fm) {
        super(fm);
        items = new ArrayList<Fragment>();
        items.add(new Fragment1());
        items.add(new Fragment2());
        items.add(new Fragment3());
    }

    @Override
    public Fragment getItem(int position) {
        return items.get(position);
    }

    @Override
    public int getCount() {
        return items.size();
    }
}

 

 

 

 

 

 

 

4. MainActivity

- ViewPager와 구현하였던 Adapter를 생성해 준 후 연결해 준다.

 

 

 

 

 

 

 

5. 실행 결과

- 실행을 한 후 페이지를 끌어 옆으로 넘기면 페이지가 전환되는 것을 확인할 수 있다. 하지만 tab과 페이지는 따로 동작한다.

 

 

 

 

위 문제를 해결하기 위해서는 탭과 페이지를 연동해주어야 하며 이는 다음글에서 다룬다.

또한, 추가적으로 탭 레이아웃의 이미지를 넣어 볼 것이다.

 

 

 

 

2020/02/13 - [Android] - 안드로이드 뷰페이저, 탭 레이아웃 구현 (2)

불러오는 중입니다...

 

 

 

 

 

 

 

adb를 이용한 스마트폰 원격 연결 방법

 

 

 

1.  [Window + r] -> cmd 실행 -> adb 엔터

이렇게 입력을 하면 없는 명령어라고 나온다.

 

 

 

2. 우선 안드로이드 스튜디오를 설치할 때 같이 설치된 adb를 찾아야 한다.

보통은 C:\Users\사용자명\AppData\Local\Android\Sdk\platform-tools 해당 위치에 있다.

 

AppData는 숨김 파일이라는 점을 주의해야 한다.

 

 

 

3. adb.exe 파일을 찾았다면 이 위치를 환경 변수의 저장해 준다.

 

제어판\시스템 및 보안\시스템 -> 고급 시스템 설정 -> 고급 탭 -> 환경 변수 ->

변수 목록의 Path 선택 -> 편집 클릭 -> 위 2번의 경로를 추가해 준다.

 

 

 

4. 다시 cmd를 실행하고 adb를 입력하면 1번과 달리 adb(Android Debug Bridge)가 실행된다.

 

 

 

5. 이제 연결할 스마트폰을 USB로 연결해 준다.

 

 

 

6. 아래 문을 입력해 준다.

 

> adb tcpip [포트번호]

 

포트 번호는 본인이 마음대로 지정해주는 것이며, 이미 사용중인 다른 포트와 겹치면 안된다. 모르겠다면 5000~9999 사이의 적당한 값을 입력해준다.

위처럼 뜬다면 성공한 것이다.

 

해당과정은 포트를 지정해주는 것이므로 이후 재연결 시 다시 시도할 필요가 없다.

 

 

 

 

 

7. 포트 지정까지 끝났다면 이제 

> adb connect [스마트폰의 연결된 와이파이 ip주소]:[위에서 지정한 포트번호]

 

※ 스마트폰의 연결된 Wifi를 클릭해보면 해당 Wifi의 IP주소를 알 수 있다.

※ 원격 연결을 하기 위해서는 스마트폰과 해당 컴퓨터가 같은 네트워크의 연결되어있어야 한다.

 

성공하였으면 원격 연결이 되었다. 

 

이제 USB를 제거하고 안드로이드 스튜디오에서 원격으로 애플리케이션을 다운받아서 테스트 해볼 수 있다.

 

 

 

 

8. 연결을 해제 해 줄 때는

 

> adb disconnect

 

입력해 준다.

 

 

 

 

 

+) 연결해 줄 때마다 위 과정을 일일이 처리하기는 귀찮다.

 

그래서 해당 과정을 .bat파일로 만들면 간단히 해당 구문을 실행할 수 있다.

 

 

메모장 -> 7번에서 입력하였던 adb connect [스마트폰의 연결된 와이파이 ip주소]:[위에서 지정한 포트번호] 입력 후 저장 -> 파일 형식은 모든 파일을 선택한 후 파일명의 .bat을 붙인다.

 

-> 마찬가지로 연결을 해제해주는 8번도 .bat파일로 만들어 주면 파일을 실행함으로써 간단하게 연결해주고 해제해 줄 수 있다.

 

 

 

 

 

 

안드로이드 회전 고정/설정     

 

 

액티비티는 회전 시 재시작하므로 데이터를 복원해주는 코드를 구현 해야한다.

 

하지만 이를 구현하지 않기 위해서는 화면을 고정되도록 하면 된다.

 

또한 레이아웃 상 화면 방향을 고정하고자 할 때 화면을 고정하면 된다.

 

 

 

 

 

예시)매니페스트 파일

 

[매니페스트 파일] -> [ 해당 activity 속성 ] ->

 

가로 고정

android:screenOrientation="landscape"

 

 

세로 고정

android:screenOrientation="portrait"

 

을 추가해주어야 한다.

 

 

※ 단, 액티비티의 속성이므로 액티비티마다 설정을 해주어야 한다. 위 이미지를 보면 MainActivity는 가로로 고정 되었지만 Main2Activity는 설정을 해주지 않아 화면이 회전 되는 것을 볼 수 있다.

 

이는 특정 액티비티에서만 화면 방향을 고정 할 수 있게 한다는 장점이 있지만, 액티비티마다 속성을주어야 한다는 단점이 있다.

 

 

안드로이드 다중 창 설정하기     

 

 

다중 창(multi windows) 기능이란 안드로이드 7.0 누가부터 추가 된 기능이다. 

 

기본값으로 사용이 가능하도록 되어있으므로 애플리케이션의 설정을 건드리지 않는다면 다중 창을 지원한다.

 

하지만 다중 창을 사용할 때는 액티비티가 재시작되므로 화면 회전같은 경우와 마찬가지로 데이터를 유지시키도록 처리해야한다.

 

화면 회전과 마찬가지로 데이터 처리부분을 구현 안 할것이면 다중 창 모드를 지원하지 않도록 하면 된다.

 

 

 

 

예시)매니페스트 파일

 

[매니페스트 파일] -> [ application 속성] ->

android:resizeableActivity = "false"

를 추가 해 준다.

 

 

기본 값은 true로써 다중 창 모드를 지원하도록 되어있다.

 

 

안드로이드 액션바에 뒤로 가기 버튼 추가하기

 

 

 

실행 화면

 

 

 

 

 

 

 

 

 

 

 

 

▲ 1. AndroidManifest.xml 파일을 연다.

 

 

 

 

 

▲ 2. 뒤로가기 버튼을 추가할 activity에서 android:parentActivityName 속성을 추가한다.

 

속성 값으로는 뒤로 가기 버튼을 눌러서 이동될 activity의 name을 주면 된다.

 

 

ex)

<activity                                 <- 뒤로 가기 버튼을 추가할 액티비티

   android:name=                     <- 해당 액티비티의 이름

   android:parentActivityName     <- 뒤로 가기 버튼으로 이동할 엑티비티 이름

/>

 

 

 

 

 

2019/05/15 - [Android] - 안드로이드 메뉴 만들기

 

안드로이드 메뉴 만들기

안드로이드 액션바에 메뉴 아이템 추가하기 실행 화면 ▲ 1. res - [New] -> [Android Resource Directory] 클릭 ▲ 2. Resource type에서 menu 선택 후 OK 버튼 클릭 ▲ 3. 생성 된 menu 디렉터리에서 [New]..

godog.tistory.com

 

▲ 메뉴를 추가하고 해당 속성을 사용하여도 둘 다 적용되므로 메뉴에 뒤로가기 버튼을 구현하고 싶을 경우 간단히 한 줄로 구현할 수 있다.

 

안드로이드 액션바에 메뉴 아이템 추가하기

 

 

 

실행 화면

 

 

 

 

 

 

 

 

 

 

 

▲ 1. res - [New] -> [Android Resource Directory] 클릭

 

 

 

 

▲ 2. Resource type에서 menu 선택 후 OK 버튼 클릭

 

 

 

 

▲ 3. 생성 된 menu 디렉터리에서 [New] -> [Menu resource file] 클릭

 

 

 

 

 

▲ 4. 레이아웃을 만들 때처럼 Palette에서 item을 끌어다가 간단히 추가

 

 

 

 

▲ 5. 

id : 자바 코드에서 각 아이템을 클릭하였을 때 동작을 지정하기 위해서 필요

- title : 아이콘이 아닌 목록으로 표시할 때 보일 메뉴 명

- icon : 표시할 아이콘 이미지

- showAsAction : always를 클릭하면 항상 아이콘이 보인다. (아이콘이 없을 경우 title로 표시)

 

 

 

icon 이미지 파일을 직접 만들경우 이미지 리소스의 크기는 아래 글을 참조하면 될 것 같다.

2019/05/15 - [Android] - 안드로이드 이미지 리소스 크기

 

 

 

▲ 6. 

showAsAction

- never : 메뉴를 [ ... ] 안으로 감춤

- ifRoom : 공간이 남을 경우 [ ... ] 밖으로 표시

- always : 항상 [ ... ] 밖으로 표시

 

 

 

 

 

▲ 7.

- 이제 메뉴를 보여줄 엑티비티의 .java 파일로 간다.

 

- 클래스 안의 커서를 두고 Ctrl + O 를 누른다.

 

- onCreateOptionsMenu 를 찾아서 추가

 

 

 

 

 

▲ 8.  7번 과정 처럼 onOptionsItemSelected 도 추가

 

 

 

 

 

 

▲ 9. 

- onCreateOptionsMenu 메소드에서는 .inflate를 사용하여서 연결하고자하는 menu 리소스 파일과 연결해 준다.

 

- onOptionsItemSelected 메소드에서는 item의 지정하였던 id를 이용하여서 각각의 메뉴가 선택되었을 때 동작할 코드를 구현하면 된다.

 

 

 

 

 

▲ 10. 실행 후 메뉴 아이템을 선택하면 Toast 메시지를 확인할 수 있다.

+ Recent posts