1. 디자인: 피그마를 활용하여 미리 틀을 디자인함.
-문제점: 코드추출은 유료로 바뀌어서 사용불가 => 안드로이드 스튜디오 내에서 구현이 까다로운 부분(TEAM I 부분)은 PNG로 추출하여 이미지뷰로 넣는 방식으로 해결
2. 메인 페이지
1)XML코드
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"
android:background="@drawable/mainbg">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="안드로이드 개발 2조"
android:textColor="#4d4d4d"
android:textSize="25sp"
android:fontFamily="@font/pretendard"
android:layout_marginTop="70dp"
android:gravity="center"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="60dp"
android:src="@drawable/team_name"
android:layout_marginTop="20dp"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="50dp"
android:background="@drawable/team_intro_bg" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="35dp"
android:background="#c4da58"
android:fontFamily="@font/pretendard"
android:paddingHorizontal="10dp"
android:text="팀원소개"
android:textColor="@color/black"
android:textSize="30sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="50dp"
android:gravity="center_horizontal"
android:orientation="vertical">
<Button
android:id="@+id/joo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/main_btn_bg"
android:fontFamily="@font/pretendard"
android:paddingVertical="5dp"
android:paddingHorizontal="60dp"
android:layout_marginVertical="10dp"
android:text="송주영"
android:textSize="25sp"
android:textStyle="bold" />
<Button
android:id="@+id/yoo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/main_btn_bg"
android:fontFamily="@font/pretendard"
android:paddingVertical="5dp"
android:paddingHorizontal="60dp"
android:layout_marginVertical="10dp"
android:text="송유호"
android:textSize="25sp"
android:textStyle="bold" />
<Button
android:id="@+id/jeong"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/main_btn_bg"
android:fontFamily="@font/pretendard"
android:paddingVertical="5dp"
android:paddingHorizontal="60dp"
android:layout_marginVertical="10dp"
android:text="김정호"
android:textSize="25sp"
android:textStyle="bold" />
<Button
android:id="@+id/chan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/main_btn_bg"
android:fontFamily="@font/pretendard"
android:paddingVertical="5dp"
android:paddingHorizontal="60dp"
android:layout_marginVertical="10dp"
android:text="김찬휘"
android:textSize="25sp"
android:textStyle="bold" />
<Button
android:id="@+id/seong"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/main_btn_bg"
android:fontFamily="@font/pretendard"
android:paddingVertical="5dp"
android:paddingHorizontal="60dp"
android:layout_marginVertical="10dp"
android:text="김성진"
android:textSize="25sp"
android:textStyle="bold" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
2)kotlin코드
package com.example.myapplication
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.widget.Toolbar
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<Button>(R.id.joo).setOnClickListener {
val intent=Intent(this,joo::class.java)
startActivity(intent)
}
findViewById<Button>(R.id.yoo).setOnClickListener {
val intent=Intent(this,yooho::class.java)
startActivity(intent)
}
findViewById<Button>(R.id.jeong).setOnClickListener {
val intent=Intent(this,jeong::class.java)
startActivity(intent)
}
findViewById<Button>(R.id.chan).setOnClickListener {
val intent=Intent(this,chan::class.java)
startActivity(intent)
}
findViewById<Button>(R.id.seong).setOnClickListener {
val intent=Intent(this,seong::class.java)
startActivity(intent)
}
}
}
3)사용 툴
<1>FrameLayout: 팀원 소개 부분 테두리를 구현하기 위해 FrameLayout을 이용하여 테두리가 있는 네모 모양 View에 배경색이 초록인 텍스트뷰를 겹치는 방식을 사용
<2>이미지 삽입:drawable폴더에 이미지를 넣은 후 ImageView로 넣는 방식을 이용
<3>폰트 삽입:res->font 폴더(없으면 만들기)에 폰트 파일을 넣은 뒤 fontFamily속성을 통해 적용
<4>drawable resource file - shape:테두리가 있는 배경을 만들기 위해 drawable폴더 내에 파일 생성후 background 속성으로 적용
-파일 코드
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#00FF0000"/> <!-- 이부분은 배경색 -->
<stroke android:color="#000000" android:width="1dp"/> <!-- 이부분은 테두리 -->
<!--외곽을 둥글게 만들고 싶으면 아래부분 추가-->
<!--<corners android:radius="15dp"/> -->
</shape>
3. 개인 페이지
1)XML코드
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".yooho"
android:background="#F9FBBC">
<androidx.appcompat.widget.Toolbar
app:layout_constraintTop_toTopOf="parent"
android:id="@+id/mainToolbar"
android:background="#A9A9A9"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</androidx.appcompat.widget.Toolbar>
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="match_parent"
android:layout_height="200dp"
android:src="@drawable/face"
app:civ_border_overlay="true"
app:civ_border_width="2dp"
app:civ_border_color="@color/black"
android:layout_marginTop="70dp"/>
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="이름: 이름\nMBTI: INFP\n취미: 소설 읽기\n좌우명: 될 때 까지 하자\n목표: 부트캠프 잘 끝내는 것"
android:gravity="center"
android:padding="15dp"
android:fontFamily="@font/pretendard"
android:textColor="@color/black"
android:lineSpacingMultiplier="1.5"
android:textSize="25sp"
android:layout_marginTop="50dp"
android:layout_marginHorizontal="50dp"
android:background="@drawable/bg"/>
</LinearLayout>
2)kotlin 코드
package com.example.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.widget.Toolbar
class yooho : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_yooho)
val toolbar = findViewById<Toolbar>(R.id.mainToolbar)
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowTitleEnabled(false)
supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_home)
toolbar.title="이름 소개페이지"
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when(item!!.itemId){
android.R.id.home -> finish()
}
return super.onOptionsItemSelected(item)
}
}
3)사용 툴
<1>원형 이미지 뷰: 이미지를 둥근 모양으로 삽입하게 해주는 위젯
-1. implement: build.gradle(module)에서 dependencies수정 후 sync
dependencies {
.
.
.
implementation 'de.hdodenhof:circleimageview:3.1.0'
}
-2. de.hdodenhof.circleimageview.CircleImageView 위젯 삽입
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="match_parent"
android:layout_height="200dp"
android:src="@drawable/face"
app:civ_border_overlay="true"
app:civ_border_width="2dp"
app:civ_border_color="@color/black"
android:layout_marginTop="70dp"/>
<!--overlay는 테두리를 이미지에 겹쳐지게 할지 여부, width는 테두리 두께, color는 테두리 컬러-->
<2>Appbar-toolbar사용
-1. res->value->themes에서 NoActionBar로 수정하여 기존 액션바를 없앰
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.MyApplication" parent="Theme.AppCompat.DayNight.NoActionBar">
.
.
.
-2. xml파일에 최상위에 위치한 위젯 내부에 툴바 삽입
<androidx.appcompat.widget.Toolbar
android:id="@+id/mainToolbar"
android:background="#A9A9A9"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
-3. 툴바 설정
val toolbar = findViewById<Toolbar>(R.id.mainToolbar)
setSupportActionBar(toolbar) //툴바를 액션바로 설정
supportActionBar?.setDisplayHomeAsUpEnabled(true) //왼쪽버튼 활성화
supportActionBar?.setDisplayShowTitleEnabled(false) //액션바에서 앱이름 안보이게 제거
supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_home) //왼쪽 버튼 아이콘 설정
toolbar.title="송유호 소개페이지"
-맨 아래는 툴바 타이틀 설정
-4. 왼쪽 버튼 클릭시 동작 설정
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when(item!!.itemId){
android.R.id.home -> finish() //R.id.home이 왼쪽 버튼의 id, 클릭시 액티비티 종료
}
return super.onOptionsItemSelected(item)
}
-onCreate바깥에 해당 함수 작성