본문 바로가기
프로젝트

[안드로이드 스튜디오 프로젝트] 자기소개앱_2 (ScrollView)

by sojung118 2024. 9. 5.

어제 기본적인 home 화면의 기초 xml을 만들어놓고

오늘은 키워드 중에서 '볼링' 키워드를 눌렀을떄 나오는 화면을 구성했다!

  • activity_bowling.xml 생성
  • BowlingActivity.java 생성
  • MainActivity → BowlingActivity 로 가는 intent 생성
  • BowlingActivity → MainActivity 로 가는 intent 생성

간단하게 여기까지만 구현하는걸로!

 


 

1. activity_bowling.xml

볼링 키워드를 눌렀을 때 이동할 화면이다.

ImageView로 사진 4가지를 생성하고 아래에 TextView로 수상 경력을 써 둔 xml이다.

 

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

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_margin="5dp"
            android:layout_width="0dp"
            android:layout_height="200dp"
            android:layout_weight="1"
            android:scaleType="centerCrop"
            android:src="@mipmap/contest1"/>

        <ImageView
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="200dp"
            android:scaleType="centerCrop"
            android:src="@mipmap/contest2"/>
    </LinearLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_margin="5dp"
            android:layout_width="0dp"
            android:layout_height="200dp"
            android:layout_weight="1"
            android:scaleType="centerCrop"
            android:src="@mipmap/contest3"/>

        <ImageView
            android:layout_margin="5dp"
            android:layout_width="0dp"
            android:layout_height="200dp"
            android:layout_weight="1"
            android:scaleType="centerCrop"
            android:src="@mipmap/contest4"/>
    </LinearLayout>

    <LinearLayout
        android:layout_margin="10dp"
        android:orientation="vertical"
        android:layout_gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_margin="5dp"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:layout_gravity="center_vertical"
                android:fontFamily="@font/font"
                android:textSize="27sp"
                android:textStyle="bold"
                android:gravity="center_horizontal"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:text="※ 수상 경력 (스크롤) ※"/>

            <Button
                android:id="@+id/btn_home"
                android:layout_marginRight="15dp"
                android:textSize="16sp"
                android:backgroundTint="#BDA381"
                android:fontFamily="@font/font"
                android:layout_width="80dp"
                android:layout_height="wrap_content"
                android:text="이전화면"/>


        </LinearLayout>



        <ScrollView
            android:fillViewport="true"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <TextView
                    android:fontFamily="@font/font"
                    android:textSize="24sp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="2022 동서대 기존여자 high"/>
                <TextView
                    android:fontFamily="@font/font"
                    android:textSize="24sp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="2022 부경대 기존여자 1등"/>
                <TextView
                    android:fontFamily="@font/font"
                    android:textSize="24sp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="2023-2월 부산지역대학생볼링연합 기존여자 1등"/>
                <TextView
                    android:fontFamily="@font/font"
                    android:textSize="24sp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="2023 동아대 기존여자 4등"/>
                <TextView
                    android:fontFamily="@font/font"
                    android:textSize="24sp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="2023-8월 부산지역대학생볼링연합 기존여자 4등"/>
                <TextView
                    android:fontFamily="@font/font"
                    android:textSize="24sp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="2023 동명대 기존여자 3등"/>
                <TextView
                    android:fontFamily="@font/font"
                    android:textSize="24sp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="2023 동의대 기존여자 3등"/>
                <TextView
                    android:fontFamily="@font/font"
                    android:textSize="24sp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="2024-2월 부산지역대학생볼링연합 기존여자 3등"/>
                <TextView
                    android:fontFamily="@font/font"
                    android:textSize="24sp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="2024 동서대 기존여자 1등"/>
                <TextView
                    android:fontFamily="@font/font"
                    android:textSize="24sp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="2024 부산대 기존여자 3등"/>
                <TextView
                    android:fontFamily="@font/font"
                    android:textSize="24sp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="2024-8월 부산지역대학생볼링연합 기존여자 1등"/>

                <TextView
                    android:fontFamily="@font/font"
                    android:textSize="24sp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="▶ 추후대회 : 동명대, 부경대, 동의대, 재부"/>

            </LinearLayout>


        </ScrollView>


    </LinearLayout>



</LinearLayout>

 

 

워낙 동아리를 열심히 나가고 취미 활동을 열심히 하다보니..ㅎㅎ

대학생활에서 얻게 된 상이 워낙 많아서 한 화면에 다 담기가 어렵다고 판단했다.

그래서 수상경력에 포함되는 여러개의 TextView를 담을 ScrollView를 추가해줬다.

 

 

<ScrollView
    android:fillViewport="true"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:fontFamily="@font/font"
            android:textSize="24sp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2022 동서대 기존여자 high"/>
        <TextView
            android:fontFamily="@font/font"
            android:textSize="24sp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2022 부경대 기존여자 1등"/>
        <TextView
            android:fontFamily="@font/font"
            android:textSize="24sp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2023-2월 부산지역대학생볼링연합 기존여자 1등"/>
        <TextView
            android:fontFamily="@font/font"
            android:textSize="24sp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2023 동아대 기존여자 4등"/>
        <TextView
            android:fontFamily="@font/font"
            android:textSize="24sp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2023-8월 부산지역대학생볼링연합 기존여자 4등"/>
        <TextView
            android:fontFamily="@font/font"
            android:textSize="24sp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2023 동명대 기존여자 3등"/>
        <TextView
            android:fontFamily="@font/font"
            android:textSize="24sp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2023 동의대 기존여자 3등"/>
        <TextView
            android:fontFamily="@font/font"
            android:textSize="24sp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2024-2월 부산지역대학생볼링연합 기존여자 3등"/>
        <TextView
            android:fontFamily="@font/font"
            android:textSize="24sp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2024 동서대 기존여자 1등"/>
        <TextView
            android:fontFamily="@font/font"
            android:textSize="24sp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2024 부산대 기존여자 3등"/>
        <TextView
            android:fontFamily="@font/font"
            android:textSize="24sp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2024-8월 부산지역대학생볼링연합 기존여자 1등"/>

        <TextView
            android:fontFamily="@font/font"
            android:textSize="24sp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="▶ 추후대회 : 동명대, 부경대, 동의대, 재부"/>

    </LinearLayout>


</ScrollView>

 

 

이 부분이 수상경력을 담은 ScrollView의 내용이다.

ScrollView는 사용해본적이 없어서 인터넷와 ChatGPT를 사용해서 스크롤뷰 사용 방법을 알아봤다.

 

  1. ScrollView는 자식이 1개여야한다. (나의 경우 LinearLayout)
  2. ScrollView에서 fillViewport="true" 설정을 해주어야한다.
  3. ScrollView에서 스크롤이 보이지않게 하고 싶으면 android:scrollbar="none" 설정을 준다.

이렇게 해서 내용이 레이아웃 화면을 넘어가면 스크롤로 모든 TextView 내용을 볼 수 있도록 설정했다.

 

 

 

아래처럼 수상경력 부분 오른쪽에 보면 스크롤이 있고, 나는 scrollbar를 none으로 주지 않았다.

이렇게 ScrollView까지 넣어주기 완료!

 


 

이제 xml간 서로 넘어가는 intent를 설정해주면된다.

intent 관련 설명은 앞선 포스팅에서도 있으니까 아래 사이트 참고하기!

https://sojung118.tistory.com/4

 

[안드로이드 스튜디오] 앱만들기 #3. Intent (화면 전환)

[ 실행 화면 ]   이번에는 우리가 평소 앱을 사용하면서 버튼을 누르면 다른 화면으로 전환되는 등Intent (화면전환)에 대해서 알아보도록 하자! 우선 화면전환을 하기 위해서는 xml 화면이 2개가

sojung118.tistory.com

 

2. MainActivity.java

package com.example.introducemyself;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class MainActivity extends AppCompatActivity {

    private Button btn_bowling;


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

        btn_bowling=findViewById(R.id.btn_bowling);
        btn_bowling.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Intent 객체 생성
                Intent intent = new Intent(MainActivity.this,BowlingActivity.class);
                startActivity(intent);
            }
        });

    }
}

 

btn_bowling이라는 id를 가진 버튼을 누르면 BowlingActivity에 설정된 xml로 넘어가기

 

 

3. BowlingActivity.java

package com.example.introducemyself;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import androidx.appcompat.app.AppCompatActivity;

public class BowlingActivity extends AppCompatActivity {


    private Button btn_home;


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

        btn_home=findViewById(R.id.btn_home);
        btn_home.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Intent 객체 생성
                Intent intent = new Intent(BowlingActivity.this,MainActivity.class);
                startActivity(intent);
            }
        });
    }
}

 

MainActivity.java와 달라진 부분은 id 할당 부분과 intent 객체 설정 시 변수의 순서밖에 없다!

+ setContentView(R.layout.나타낼 xml화면)

 

 

intent는 확실히 쓰다보면 엄청 익숙해질듯..

그리고 여기서 AndroidManifest.xml에 들어가서

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.IntroduceMyself"
        tools:targetApi="31">
        <activity
            android:name=".BowlingActivity"
            android:exported="false" />
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

BowlingActivity.java를 추가해줬으므로 AndroidManifest.xml 파일에도 

 

<activity
    android:name=".BowlingActivity"
    android:exported="false" />

 

이 부분을 추가해준다!

 

 


 

[ 실행 화면 ]