화면에 텍스트를 출력 하는데 일부 글자를 강조하기 위해 색을 사용해야 하는데 필요에 따라 텍스트가 변경되는 경우 이미지로 하기도 어려운 조건인 경우 html tag를 이용하여 쉽게 해결할 수 있습니다.

사용법도 그냥 html tag를 그대로 사용할 수 있기 때문에 전혀 어렵지도 않습니다.  먼저 text를 출력할 TextViewButton을 하나씩 만들어 주고

 

<TextView
   
android:id="@+id/tvHtml"
   
android:layout_width="match_parent"
   
android:layout_height="321dp"
   
android:textAlignment="center"/>

<
Button
   
android:id="@+id/button"
   
android:layout_width="wrap_content"
   
android:layout_height="wrap_content"
   
android:layout_marginBottom="180dp"
   
android:text="Button"
   
app:layout_constraintBottom_toBottomOf="parent"
   
app:layout_constraintEnd_toEndOf="parent"
   
app:layout_constraintHorizontal_bias="0.498"
   
app:layout_constraintStart_toStartOf="parent" />

 

java 파일에서 Html.formHtml()만 사용하면 됩니다.

 

String htmlText = "<h1>Hi</h1><br>blue<font color='green'>Blue</font>bl<font color='red'>u</font>e";
htmlText +=
"<p><i>test</i> <u>under</u>";
TextView tv = (TextView)findViewById(R.id.
tvHtml);
tv.setText(Html.fromHtml(htmlText));

String htmlBtn =
"B<font color='red'>u</font>tt<font color='blue'>o</font>n";
Button btnHtml = (Button)findViewById(R.id.
button);
btnHtml.setText(Html.fromHtml(htmlBtn));

 

 

이렇게 일반 텍스트와 버튼에도 쉽게 적용이 가능 합니다.

 

- copy coding -

 

안드로이드에서 사용하는 이미지는 해상도에 따라 다르게 적용하는데 최초에 파일을 저장하려면 drawable v24 폴더만 존재하기 때문에 고해상도용 이미지를 저장할 폴더는 신규로 생성해야 합니다.  생성 방법은 몇번의 마우스 클릭만으로 가능 합니다.

 

res에 마우스 포인터를 위치하고 우클릭을 해줍니다. 

New > Android Resource Directory

 

 

그리고 팝업 메뉴에서 Android Resource Directory를 선택 합니다.

그러면 팝업 창이 나오는데 여러 리소스들을 추가할 수 있지만 여기서는 이미지 관련 작업을 하기위한 선택을 합니다.

 

Resource type을 drawable로 선택하면 Directory Name은 자동으로 변경됩니다.

그리고 좌측 하단에서 Density를 클릭하고 중앙에 있는 [>>] 버튼을 클릭하면 아래와 같이 우측에 Density라는 타이틀이 생성되면서 select 박스가 나오는데 확장해 보면 해상도별 생성 가능한 폴더 목록이 표시됩니다.

 

 

select option 중 원하는 해상도 폴더를 선택하고 [OK] 버튼을 클릭해 줍니다.  눈에 보이지는 않지만 drawable 폴더에 새로운 폴더가 생성이 되었습니다.

 

확인을 하러면 drawable에 파일을 복사해보는 수 밖에 없는데 파일을 하나 추가 하면

 

처음에 없던 새로 생성한 폴더가 선택할 수 있는 목록에 추가되어 나타납니다.

다른 해상도 폴더도 동일하게 생성해서 사용하면 됩니다.

 

- copy coding -

 

상태바를 삭제하는 기능은 SDK 버전에 따라 다른 코드를 사용해야 하기 때문에 소개하기가 매우 어렵습니다. 여기서는 코드를 소개하기 보다는 status bar를 삭제하는 종류를 소개하는데 중점을 두었습니다.

 

제가 테스트한 환경은 아래와 같습니다.

 

Android Studio version 4.2.1
 
compileSdkVersion 30

defaultConfig {
   
applicationId
"copycoding.tistory.statusbar"
   
minSdkVersion 19
   
targetSdkVersion 30
   
versionCode 1
   
versionName "1.0"

 

일단 textview를 하나 만들어서 실행을 해 봅니다.

 

<TextView
   
android:id="@+id/button"
   
android:layout_width="match_parent"
   
android:layout_height="321dp"
   
android:text="Hellow"
   
android:background="#CCCCCCCC"
   
android:textAlignment="center"
/>

 

 

1. Status bar 삭제

 

상태바의 영역을 완전히 삭제하는 방법 입니다.

 

1.1 xml 이용

상태바 영역을 xml을 이용하여 삭제하는 방법입니다.

 

<!-- Customize your theme here. -->
<item name="android:windowFullscreen">true</item>

 

상태바가 사라지고 Title bar 와 콘텐츠 영역이 위로 올라갑니다.

 

 

1.2 java 이용

 

이번에는 java 코드를 이용하여 상태바 영역을 삭제하는 코드 입니다.

 

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.
FLAG_FULLSCREEN);

 

또는 다음과 같은 방법을 이용할 수 있습니다.

 

View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);

 

 

2. Status bar 삭제/아이콘 유지

 

이번에는 상태바에 있는 아이콘들은 그대로 놓아두고 상태바 영역을 삭제하는 방법입니다.

 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    Window w = getWindow();
    w.setFlags(WindowManager.LayoutParams.
FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}

 

 

3. Status bar 사용

 

이번 예제는 상태바 영역을 삭제하지 않고 콘텐츠 영역을 확장하는 방법입니다.

표현이 정확하지 않겠지만 위에 있는 내용과 어떤 차이가 있는지 직접 보면 이해가 되실겁니다.

 

<item name="android:windowTranslucentStatus">true</item>

 

 

 

4. Source code 위치

 

xml : res > value > themes.xml
     파일에서 <!-- Customize your theme here. --> 
     이 코드 하단에 추가 합니다.

java : MainActivity.java > onCreate()
    파일에서 setContentView(R.layout.activity_main);
    이 코드 하단에 추가 합니다.

 

- copy coding -

 

 

테스트 환경

 

Android Studio version : 4.2.1

compileSdkVersion 30

defaultConfig {
   
applicationId
"copycoding.tistory.statusbar2"
   
minSdkVersion 16
   
targetSdkVersion 30
   
versionCode 1
   
versionName "1.0"

 

 

간단한 테스트용으로 앱을 만드는게 아니라면 title bar는 화면의 상당히 많은 부분을 차지하게 되어 화면 구성을 방해하게 됩니다.

Title bar를 숨기는 방법은 xmljava에서 간단하게 처리가 가능 합니다.

화면을 하나 생성을 하고 textview를 하나 추가해 줍니다.

 

<TextView
   
android:id="@+id/button"
   
android:layout_width="match_parent"
   
android:layout_height="321dp"
   
android:text="Hellow"
   
android:background="#CCCCCCCC"
/>

 

 

 

1. Java 코드로 삭제

 

java에서 삭제하기 위해 Acitvity.java를 열고 onCreate()에 코드를 추가 합니다.

여기서 추가하는 코드의 위치가 중요합니다. layout 이전에 추가를 합니다.

 

@Override
protected void onCreate(Bundle savedInstanceState) {
   
super.onCreate(savedInstanceState);

    requestWindowFeature(Window.
FEATURE_NO_TITLE);
   
getSupportActionBar().hide();

   
setContentView(R.layout.activity_main);

 

 

Title bar가 보이지 않게 되었습니다.

 

 

2. xml로 삭제

 

xml로 타이틀 바를 삭제 하려면 res > themes > themes.xml 파일을 오픈합니다.

아래와 같이 한줄을 추가해 줍니다.

 

<!-- Customize your theme here. -->
<item name="windowNoTitle">true</item>

 

이렇게 한줄만 추가해주면 타이틀 바가 삭제 됩니다.  결과는 동일하게 나옵니다.

 

 

 

3. 전체 코드

 

 

수정된 코드 소스만 올려 봅니다.

 

 

3.1 MainActivity.java

 

public class MainActivity extends AppCompatActivity {

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);

       
requestWindowFeature(Window.
FEATURE_NO_TITLE);
        getSupportActionBar().hide();
       
       
setContentView(R.layout.activity_main);
    }
}

 

 

3.2 themes.xml

 

<resources xmlns:tools="http://schemas.android.com/tools">
    
<!-- Base application theme. -->
   
<style name="Theme.Statusbar2" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
       
<!-- Primary brand color. -->
       
<item name="colorPrimary">@color/purple_500</item>
        <
item name="colorPrimaryVariant">@color/purple_700</item>
        <
item name="colorOnPrimary">@color/white</item>
       
<!-- Secondary brand color. -->
       
<item name="colorSecondary">@color/teal_200</item>
        <
item name="colorSecondaryVariant">@color/teal_700</item>
        <
item name="colorOnSecondary">@color/black</item>
       
<!-- Status bar color. -->
       
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>

       
<!-- Customize your theme here. -->
       
<item name="windowNoTitle">true</item>
    </
style>
</
resources>

 

- copy coding -


123456···15

+ Recent posts