일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 안드로이드스튜디오
- mongodb
- java
- androidstudio
- 중국어입문
- 리액트
- 안드로이드
- mern Stack
- 입문
- es6
- Android Studio
- react
- Node js
- 안드로이드 스튜디오
- 블로그 만들기
- 블로그만들기
- javascript
- 장고
- nodejs
- 알고리즘
- PYTHON
- 자바
- 파이썬
- 개발
- 중국어
- 자바스크립트
- Android
- Django
- MernStack
- express
- Today
- Total
City At Night
[Android Studio] Splash! 앱의 Intro를 만들어보자 본문
Splash는 앱을 처음 시작할때 잠깐 나오는 화면을 말합니다.
youtube를 키거나 다른 앱을 킬때 잠깐 그 회사의 로고가 나오고 앱의 메인이 나오죠.
splash 하나만으로도 앱의 Quality를 높일 수 있습니다.
Splash를 사용하는 방법중 여러가지 방법이 있지만 그 중 2가지를 포스팅하겠습니다.
첫 번째는 Splash의 style요소를 만들어 menifest.xml에 선언을 하는 방식과
Layout을 만들고 Handler로 Splash를 만드는 방식이 되겠습니다.
먼저 Style요소로 만드는 방법입니다.
<theme.xml>
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/goodlogo</item>
</style>
res -> values -> themes폴더에 theme.xml이 존재합니다.
Theme.AppCompat.NoActionBar를 해주어 액션바를 없애 전체화면으로 만들어줍니다.
drawble폴더에 미리 다운로드 해두었던 이미지를 불러 옵니다.
그 다음 SplashActivity라는 클래스를 생성합니다.
<SplashActivity.java>
public class SplashActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(this,MainActivity.class);
startActivity(intent);
finish();
}
}
먼저 이 클래스를 실행해서 Intent를 이용해 메인페이지로 넘기는 방식입니다.
SplashActivity에 대한 Layout이 있어야하는게 아닌가 라는 생각을 하실 수 있지만
위에 작성해두었던 Splash Theme를 이 SplashActivity에 적용할것이기때문에 Layout 없이 동작할 수 있답니다.
ㄱ그러면 Theme을 적용하기 위해서 manifest.xml에서 선언을 해줘야 합니다.
<manifest.xml>
<activity
android:name=".SplashActivity"
android:theme="@style/SplashTheme"
tools:ignore="Instantiatable">
.MainActivity를 SplashActivity로 바꿔주시고 나머지 부분을 추가한 다음
<activity android:name=".MainActivity" />
메인 엑티비티도 당연히 다시 선언을 해줘야겠죠?
짜잔.~ 나타나고 메인으로 넘어가는 모습을 볼 수 있습니다 .
이 방식의 문제점은 저 이미지를 백그라운드로 지정을하였고 커스텀을 할 수 가 없습니다 .
그냥 간단하게 사용하기에는 좋지만 좋은 Quality는 보장하지는 않습니다 .
그 다음 방법이 Handler를 이용하여 splash 지속시간도 조절할 수 있는 방식입니다.
<activity_splash.xml>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/simpson">
</androidx.constraintlayout.widget.ConstraintLayout>
최상위 부모의 background를 image로 하여 splash의 레이아웃을 만들었습니다.
<SplashActivity.java>
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_USER);
getSupportActionBar().hide();
Handler handler = new Handler(Looper.getMainLooper());
handler.postDelayed(new splashHandler(), 2000);
}
private class splashHandler implements Runnable {
@Override
public void run() {
startActivity(new Intent(getApplication(), MainActivity.class));
SplashActivity.this.finish();
}
}
}
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_USER);
getSupportActionBar().hide();
위 코드는 상태바를 없애준 코드와 액션바를 없애주는 코드로써 게임 접속할때처럼 완전한 접속화면 느낌이 나게 구현했습니다.
극그 다음 Handler를 사용했는데 현재 제 version에서 Handler는 매개변수 없는 생성자에겐 deprecated되기에
Looper.getMainLooper()를 넣어 지정해주어야 좋습니다.
handler.postDelayed(new splashHandler(), 2000); 에서 두번째 파라미터값 2000을 지정했는데
1초 = 1000이기에 저는 2초로 설정했습니다.
<Manifest.xml>
<activity android:name=".WebviewActivity"></activity>
<activity android:name=".MainActivity" />
<activity android:name=".SplashActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
MainActivity와 SplashActivity를 바꿔주어 앱 실행시 먼저 실행되게 합니다.
어떤가요? 확실히 Quality하나는 죽여주죠 ㅎㅎ?
'Android Studio' 카테고리의 다른 글
[Android Studio] Navigation Drawer 사이드 메뉴바 커스텀 (0) | 2021.03.01 |
---|---|
[Android Studio] Retrofit2를 사용하여 Api파싱 (0) | 2021.01.31 |
[Android Studio]WebView를 사용하여 Web을 App처럼 사용하기 (2) | 2021.01.31 |
[Android Studio] RecyclerView를 사용하여 데이터를 추가해보자! (0) | 2021.01.30 |
[Android Studio] SharedPreferences로 간단한 데이터 저장하기! (0) | 2021.01.24 |