=================================
=================================
=================================
AndroidManifest.xml
<application android:label="@string/app_name"
android:theme="@style/MyTheme.NoTitleBar.SplashWindow" <!-- 여기가 초기화면 인트로 부분코드 -->
android:icon="@drawable/mycon"
android:debuggable="true">
..... <!-- 생략코드들 -->
</application>
프로젝트->res-> 이미지리소스폴더아무거나(예:drawable-hdpi) -> intro.png 파일을 넣어둔다
프로젝트->value->styles.xml (파일이 없으면 만든다)
styles.xml
<resources>
<style name="MyTheme.NoTitleBar.SplashWindow" parent="@android:Theme">
<item name="android:windowBackground">@drawable/intro</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
</style>
</resources>
=================================
=================================
=================================
앱을 실행하자마자 아래와 같은 이미지를 띄우고 대략 2~3초 뒤에 메인 화면으로 넘어가는 동작을 구현해 보겠습니다.
우선 가장 무난한 페이스북 인트로 화면을 예제로 잡아보겠습니다.
우선 아래와 같이 인트로로 사용할 이미지를 준비합니다.
저는 가장 무난한 페이스북 이미지에 나인패치를 입혀서 적용했습니다. 화면을 다 덮는 이미지를 사용해도 되지만 intro 화면에 사용될 Drawable 을 정의한 xml 파일을 사용하는 것이 좋습니다.
우선 values 폴더의 style.xml 파일에 다음과 같은 테마를 하나 추가시켜줍니다.
액션바와 타이틀을 제거하고 인트로에 사용될 배경 이미지를 출력하는 테마입니다.
<style name="IntroTheme" parent="android:Theme.Light.NoTitleBar">
<item name="android:windowBackground">@drawable/intro</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
</style>
그리고 AndroidManifest.xml 에서 Intro 를 보여줄 Activity 에 해당하는 엘리먼트에 다음과 같은 속성을 추가시켜서 인트로 테마를 지정합니다.
android:theme="@style/IntroTheme"
마지막으로 인트로 화면을 보여줄 해당 Activity 에 인트로 화면을 표시하기 위하여 코드를 다음과 같이 작성합니다.
아래 코드는 액티비티 하나로 인트로와 컨텐츠를 모두 보여주는 예 입니다.
Preview:
public class MainActivity extends Activity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean isRunIntro = getIntent().getBooleanExtra("intro", true);
if(isRunIntro) {
beforeIntro();
} else {
afterIntro(savedInstanceState);
}
}
// 인트로 화면
private void beforeIntro() {
// 약 2초간 인트로 화면을 출력.
getWindow().getDecorView().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(MainActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("intro", false);
startActivity(intent);
// 액티비티 이동시 페이드인/아웃 효과를 보여준다. 즉, 인트로
// 화면에 부드럽게 사라진다.
overridePendingTransition(android.R.anim.fade_in,
android.R.anim.fade_out);
}
}, 2000);
}
// 인트로 화면 이후.
private void afterIntro(Bundle savedInstanceState) {
// 기본 테마를 지정한다.
setTheme(R.style.AppBaseTheme);
setContentView(R.layout.activity_main);
}
}
실행 결과
=================================
=================================
=================================
RAD Studio XE7부터는 프로젝트 옵션에서 스플래쉬 이미지를 쉽게 변경할 수 있습니다.
RAD Studio XE6 이전 버전에서 아래 내용을 참고하기 바랍니다.
안녕하세요. 험프리 김현수입니다.
델파이 모바일로 앱을 만들면, iOS에서는 스플래쉬 윈도우가 표시된 후 앱이 구동되지만 안드로이드의 경우 스플래쉬 윈도우가 없이 검은색 화면이 표시된 후 앱이 구동됩니다.
델파이 모바일 개발의 경우 엔터프라이즈 개발에 주요 초점이 맞쳐져 있어, 쉬운개발과 빠른개발에 더 강점을 갖고 있어 큰 이슈가 되지는 않지만 B2C등의 개인 사용자에게 배포할 경우 때때로 눈에 거슬리기도 합니다.
위의 이슈(검은 화면 이후 앱 구동)를 해결하기 위한 방법은 3가지 정도가 될 것 같습니다.
- 앱을 최대한 빨리 띄우고 시간이 걸리는 부분은 앱이 구동된 이후에 수행
- 안드로이드 테마를 이용해서 스플래쉬 윈도우 출력
- 자바코드로 스플래쉬 윈도우용 Activity(화면)을 구성
위의 3가지 방법 중 제일 좋은 방법은 3번 항목입니다. 별도의 스플래쉬 윈도우를 자바코드로 작성하고, 구동 시점에 스플래쉬 윈도우 출력 후 앱을 구동하는 방법입니다.
하지만, 3번 항목으로 구현하게 되면 자바코드를 작성 후 컴파일하고, 패키징하는 작업이 델파이만을 사용하시는 분들에게는 꽤 번거롭고 어려운 작업입니다.
(그리고, 스플래쉬 윈도우를 초기에 구동하게되면 델파이에서 앱의 진입점을 찾지 못해 디버깅 작업을 진행 할 수 없습니다.)
위의 이유로 제일 간단하고 디버깅도 가능한 2번째 항목으로 스플래쉬 윈도우 구성하는 방법을 설명합니다.
안드로이드 테마를 이용한다는 것은 기본 테마를 변경하는 것이므로, 구현 후 전체적인 구성을 반드시 확인해야 합니다.
파이어몽키의 경우 기본적으로 테마위에 컨트롤들이 올라가는 것이므로, 큰영향을 주지 않을 것으로 생각됩니다.
혹시 테마를 이용할 경우 이슈가 있으면 댓글 부탁드립니다
안드로이드 테마를 이용해 스플래쉬 윈도우를 구성하려면 아래의 순서를 진행하면 됩니다.
- 프로젝트 생성 및 디렉토리 구조
- 스플래쉬 이미지 준비
- Styles.xml 파일 준비 - 스플래쉬 윈도우를 xml로 구성합니다.
- AndroidManifast.template.xml 파일 수정
- 배포파일 등록
프로젝트 생성 및 디렉토리 구조
Firemonkey Mobile Application으로 새로운 프로젝트를 생성하고, 프로젝트를 지정된 경로에 저장합니다.(e.g. D:\Projects\SplashWindow)
지정된 경로 하위에 res 디렉토리를 생성하고 아래의 단계를 거처 스플래쉬 이미지 파일과 styles.xml 파일을 생성합니다.
- SplashWindowTheme
- splash.png
- styles.xml
- res
- 프로젝트 소스파일
스플래쉬 이미지 준비
스플래쉬 윈도우를 추가할 프로젝트를 생성하고 스플래쉬 윈도우에 표시할 이미지를 준비합니다. 확장자는 이미지 포맷인 경우 무관합니다.
저는 아래와 같은 이미지(splash.png, 768 * 1024)로 준비했습니다.
styles.xml 파일 준비
splash.png, splash.jpg등으로 스플래쉬 이미지를 이용하실 경우 아래 파일을 그대로 사용해도 됩니다.
- <style name="MyTheme.NoTitleBar.SplashWindow" parent="@android:Theme.Holo">
- name은 아래의 AndroidManifast에서 android:theme에서 사용 할 style 명
- parent는 상속받을 안드로이드의 테마를 입력합니다.
- <item name="android:windowBackground">@drawable/splash</item>
- 스플래쉬로 등록할 파일을 지정합니다.
- 배포 시 [res/drawable] 경로에 splash.png 이미지 파일이 함께 배포되어야 합니다.
AndroidManifast.template.xml 파일 수정
프로젝트 파일을 저장한 경로를 보시면 AndroidManifast.template.xml 파일이 자동 생성됩니다.(만약, 파일이 없을 경우 Platform Target을 Android로 설정 후 컴파일 하면 생성됩니다.)
해당파일을 RAD Studio에 추가하거나 텍스트 에디터 등으로 열고, 아래와 같이 android:theme를 수정합니다.
(아래의 문구는 styles.xml의 style.name과 반드시 같아야 합니다.)
기존 : android:theme="%theme%">
변경 : android:theme="@style/MyTheme.NoTitleBar.SplashWindow">
배포파일 등록
준비한 스플래쉬 이미지와 styles.xml 파일을 앱과 함께 배포 합니다.
Project > Deployment 메뉴를 통해 [] 화면을 표시하고 Add file 버튼을 이용해 res\ 경로에 있는 2개의 파일을 업로드 하고 아래와 같이 내용을 변경합니다.
splash.png
- Platform : Android
- Remote Path : res\drawable\
styles.xml
- Platform : Android
- Remote Path : res\values\
컴파일을 하고 실행하면 아래와 같이 스플래쉬 윈도우가 실행되고, 메인화면이 표시되는 것을 확인 할 수 있습니다.
http://www.youtube.com/watch?v=J2kXdGzzMzY
참고
소스파일
=================================
=================================
=================================
[Android] 초기화면 만들기
아이폰에서 제공되는 기능이지만 안드로이드에선 직접 구현해야하는 초기화면을 한번 만들어 보도록 하겠습니다. 말씀드렸겠지만 아이폰에서는 기본적으로 제공이 되서 개발자는 해당 관련 코드를 생각할 필요없이 이미지 리소스만 링크에만 신경쓰면 됬지만 안드로이드의 경우 사용자가 직접 Activity를 만들어 해당 초기화면을 기술적으로 구현하고 xml으로 뷰를 만들어 리소스와 링크시키는 작업까지 손수해줘야 합니다. 안드로이드 어플리케이션을 계속 만드실 분이라면, 이러한 초기화면을 한번 구현해 놓고 다음 개발에는 해당 소스를 재사용하는것이 좋을듯 싶습니다.
일단 들어가기전에 초기화면이 전체화면이라는 점은 아시고 계실겁니다. 만약에 모르신다면 검색하지 마시고 아래 포스팅을 이용하시기 바랍니다 ^^.
[Android]전체화면 사용하기
일단 숙지하시고 들어가 봅시다!
# 진짜 초기화면 만들기!!
정말 초기화면을 만들어 보겠습니다! 혹시 다른 기능과 뷰들을 개발하고 계시다가 갑자기 "아맞다! 초기화면 만들어야는데 "라고 생각이 드신다면,, 첫 화면을 설정하면되는데, 어렵지 않아요!
위에서 AndroidManifest.xml 파일만 수정하면됩니다. 해당 파일을 더블클릭하시면 하단에 5개의 Tab이 나옵니다. 그중에서 마지막 AndroidManifest.xml이란 텝을 클릭하면 다음과 같은 화면이 나올것입니다.
그럼 중간에 android:name=".IntroActivity" 라는 곳이 보일것입니다. 그렇습니다. 요녀석이 시작 Activity입니다. 고로 새로운 Activity를 만드신후 android:name=".새로운Activity명" 하면 해당 Activity부터 실행이 되겠죠?! 이젠 정말 시작하겠습니다.
일단 IntroView를 간단히 만들어 보겠습니다.
~ intro_activity.xml ~
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="@drawable/background" > </LinearLayout> |
해당 intro_activity와 연결될 IntroActivity입니다! 실질적으로 해당 포스팅의 핵심입니다. 일단 코드를 보겠습니다.
~ IntroActivity.java ~
package wecon.test.intro; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; public class IntroActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.intro_activity); Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { Intent intent = new Intent(IntroActivity.this, MainActivity.class); startActivity(intent); // 뒤로가기 했을경우 안나오도록 없애주기 >> finish!! finish(); } }, 2000); } } |
Handler 클래스의 postDelayed() 라는 메소드를 활용해 보았습니다. 해당 메소드는 특정 시간후에 작업을 처리하기 위해 사용되는 메소드 입니다. 매개변수로는 첫째로 실행할 동작, 그리고 두번째로 실행 시간 입니다 . 실행시간의 경우 밀리세컨드로, 계산하기 편하게 초에다가 1000곱하면 됩니다;; ex)3초 == 3000
첫번째 매개변수로 들어가는 Runnable(){}의 경우 실행할 Activity를 띄워주도록 구현 합니다. 새로운 Activity를 만들수 있다는 가정하에 마지막 finish()에 주목해 봅시다.
해당 Handler를 통해 postDelayed()는 분명히 특정시간후 작업을 처리한다고 했지, 자기자진을 죽인다고 말하진 않았습니다. 고로 Activity Stack(Android task)에 의해 죽지않고 살아있습니다. 뒤로가기(취소)버튼을 클릭하면 초기화면으로 돌아올수 있다는 말입니다. 혹시 어떤 앱을 실행하시고 나서 뒤로가기를 했는데 초기화면을 또볼수 있다면, 그건 아니아니 아니되오! 때문에 finish()를 통해 해당 초기화면 Activity를 종료시켜줍니다.
여기에 메인 화면을 연결시켜주면 구현이 끝납니다(new Intent() 잘 구현해 줍니다 ^^). 마무리를 깔끔히 하기 위해 메인도 한번 만들어 보겠습니다.
~ main_activity.xml ~
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#ffc31e"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="카카오톡" android:gravity="center_horizontal" android:textSize="15sp" android:textColor="#000000" android:paddingTop="5sp" android:paddingBottom="5sp"/> </LinearLayout> <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="이거슨 카카오톡!" android:textSize="30sp" android:gravity="center_horizontal|center_vertical"/> </LinearLayout> |
~ MainActivity.java ~
package wecon.test.intro; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); } } |
# 결과화면
카카오톡 화면이 처음 뜹니다.(카톡님 이미지 저작권ㅈㅅ.. 굾굾) 2초간 보여주고 난후..
메인화면이 뜹니다! 뒤로가기 버튼을 누르면 앱이 종료 됩니다! 이거스로 끝! 참 쉽죠?!
=================================
=================================
=================================
출처: http://www.androidpub.com/4710
안드로이드에서 전체화면을 사용하기 위해서는 상태바(Status Bar)와 타이틀바(Title Bar)를 숨겨야 합니다. 숨기는 방법은 여러가지가 존재하는데 그 중 몇가지 방법을 정리하도록 하겠습니다.
1. 미리 정의된 Theme 사용하기
1.<activity android:name=".MyActivity"
2.android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
AndroidManifest.xml 에서 Activity의 Theme를 위와 같이 설정해주면 Status Bar와 Title Bar가 모두 없는 상태가 됩니다.
1.<activity android:name=".MyActivity"
2.android:theme="@android:style/Theme.NoTitleBar" >
이렇게만 한다면 TitleBar만 없는 상태가 됩니다.
2. 내가 정의한 Theme 에서 설정하기
1.<item name="windowNoTitle">true</item>
Title Bar만 없는 상태로 만들기
1.<item name="windowFullscreen">true</item>
Status Bar와 Title Bar 모두 없는 상태 만들기
3. Java Code에서 설정하기
1.requestWindowFeature(Window.FEATURE_NO_TITLE);
Title Bar 없는 상태로 만들기
1.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
2.WindowManager.LayoutParams.FLAG_FULLSCREEN);
Status Bar 없는 상태로 만들기. Theme 설정과 다른 것은 Fullscreen Flag를 주더라도 Title Bar는 남아있습니다.
엮인글 주소 : http://www.androidpub.com/index.php?document_srl=4710&act=trackback&key=7af
2009.05.13 12:25:28
TaekLove
안녕하세요, 회색님
Title Bar,StatusBar의 크기 조절은 할 수 없나요?.
날씨가 이상합니다. 감기 조심하세요.
^________________________________________^
2009.05.13 12:31:57
회색
StatusBar는 임의로 조정할수는 없구요. TitleBar는 수정하고 싶으시면 ApiDemos/app에 CustomTitle.java를 참고하시면 됩니다.
2009.10.22 13:23:54
iRoid
하나의 activity 에서 Title 영역을 조절하시길 원하실 경우,
1. 해당 activity 의 onCreate() 에서 setContentView 이전에
requestWindowFeature(Window.FEATURE_NO_TITLE); 으로 타이틀을 hide 시키고
2. Layout 에 원하는 타이틀 내용을 구성하시면 됩니다.
2010.05.27 13:55:43
토끼씨
회색님의 좋은 정리를 이제서야 보네요.. ㅋ 감사합니다
2011.12.22 15:59:19
아즈라엘
2. 내가 정의한 Theme 사용이 조금 틀려진거 같네요
아래와 같은 방법으로 해야 됩니다.
<style name="Theme.Translucent" parent="android:style/Theme.Translucent">
<item name="android:windowBackground">@drawable/translucent_background</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:colorForeground">#fff</item>
</style>
2015.07.08 14:33:47
홍성재
감사합니다. 하나 배워갑니다!
=================================
=================================
=================================
'스마트기기개발관련 > 안드로이드 개발' 카테고리의 다른 글
안드로이드 결제 테스트 검증 및 알파/베타 버전 배포 및 테스트 방법 (0) | 2020.09.20 |
---|---|
[안드로이드] android.webkit.CookieManager 를 이용한 웹뷰와의 세션 공유 (0) | 2020.09.20 |
[안드로이드] android 앱에서 다른 앱 실행 시 값 전달하는 방법 패키지명 또는 URI로 다른앱 실행 방법 관련 (0) | 2020.09.20 |
안드로이드 android TextView 밑줄 긋기, html 의 href 처럼 링크버튼 처럼 사용하기 관련 (0) | 2020.09.20 |
안드로이드 android 상태에 따라 버튼 색깔바꾸기 다른 컨트롤도 응용 가능 관련 (0) | 2020.09.20 |
댓글 영역