화면을 두 개로 만들기 위해 새로운 액티비티를 추가하는 것이 아니라 하나의 메인 액티비티 이용하여 그 일부분을 레이아웃으로 만들고 또 다른 뷰로 이용하는 것
보이는 레이아웃은 두 개이므로 layout.xml은 두 개고, 자바 파일은 한 개(실질적 액티비티)<br>
그래서 manifest 건들지 않아도 됨
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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" >
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.049"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.055" />
<FrameLayout
android:id="@+id/container"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="36dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button">
<!-- 프레임레이아웃은 한 번에 하나의 뷰만 추가할 수 있어서 공간 확보하는 데에 쓰이기도 함
다른 영역을 담고 있을 수 있는 영역을 확보했을 때 container라고 하는 아이디 주로 줌-->
</FrameLayout>
</android.support.constraint.ConstraintLayout>
sub.xml
<?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_red_light"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="부분화면"
android:textSize="40dp" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
<!--activity_main.xml은 전체 화면을 의미하고 sub1.xml은 부분화면을 의미
이 액티비티 디자인 탭의 미리보기에는 전체 화면처럼 보이지만 전체 화면이 아님-->
MainActivity.java
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
public class MainActivity extends AppCompatActivity {
FrameLayout container;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//화면 전체를 객체화(버튼 객체 만들어줌)
container = (FrameLayout)findViewById(R.id.container);
//여기서 선언이 되면 밖에는 참조가 안 됨 즉, setOnClickListener에서 OnClickListener에는 참조가 안 되므로 선언 밖에
Button button = (Button)findViewById(R.id.button);//버튼을 시스템이 붙여주니까(버튼 객체를 만들어주니까) 나는 어딨는지 모르므로 아이디로 찾아오는거
button.setOnClickListener(new View.OnClickListener() {//버튼 클릭되면 OnClick 메서드 호출
@Override
public void onClick(View v) {
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.sub1, container, true);//내가 만든 일부 화면인 레이아웃을 지정하고(이 xml레이아웃을 인플레이션 한 다음),
//container뷰에 붙여주는 것, true는 바로 붙여달라는 뜻
//레이아웃 인플레이션 과정
//이렇게 부분화면도 메모리 객체화를 거치면 그 안에 들어가 있는 위젯 또는 뷰 들을 아이디를 통해 찾아서 사용 가능하다.
}
});
}
}
//전체 객체화가 아니라 부분 화면인 경우(액티비티가 아니라 어떤 화면의 한 부분을 레이아웃으로 만들고(레이아웃 안에 레이아웃 만들고 이랬을 때)
//레이아웃 안에 들어갈 수 있는 뷰(그걸로 다시 화면 구성 가능)
//그 때 인플레이션 직접(인플레이터 서비스)
//시스템 서비스라고 하는 거는 안드로이드 단말기가 실행이 됐을 때, 뒤단에서 미리 실행된 거(화면이 없는거), 시스템이 미리 실행시켜놓은 화면이 없는 그런 실행 프로세스 = 서비스
결과
'Blog > Android' 카테고리의 다른 글
AudioRecorder, 녹음 기능 (0) | 2020.04.05 |
---|---|
List, 화면 리스트 만들기 (0) | 2020.04.05 |
Intent, 메뉴 액티비티와 데이터 전달 (0) | 2020.04.05 |
Event, 버튼 이벤트 처리 (0) | 2020.03.31 |
Dialog, 대화상자 띄우기 (0) | 2020.03.31 |