sourcecode

기존 사용자 정의 테마를 사용하여 XML에서 활동의 제목 표시줄을 숨기는 방법

codebag 2023. 6. 12. 21:22
반응형

기존 사용자 정의 테마를 사용하여 XML에서 활동의 제목 표시줄을 숨기는 방법

일부 활동에 대한 제목 표시줄을 숨기려고 합니다.문제는 제가 모든 활동에 스타일을 적용했기 때문에 단순히 테마를 설정할 수 없다는 것입니다.@android:style/Theme.NoTitleBar.

제목 표시줄 테마를 내 스타일의 상위 항목으로 사용하면 모든 활동에서 제목 표시줄이 제거됩니다.

제목 없는 스타일의 아이템을 어딘가에 설정할 수 있습니까?

에서 이 작업을 수행합니다.onCreate()방법.

//Remove title bar
this.requestWindowFeature(Window.FEATURE_NO_TITLE);

//Remove notification bar
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

//set content view AFTER ABOVE sequence (to avoid crash)
this.setContentView(R.layout.your_layout_name_here); 

this을 .Activity.

다음을 수정할 수 있습니다.AndroidManifest.xml:

<activity android:name=".MainActivity"
          android:label="@string/app_name"
          android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">

또는 사용android:theme="@android:style/Theme.Black.NoTitleBar"전체 화면 활동이 필요하지 않은 경우.

참고: 이전에 '기본' 보기를 사용한 적이 있는 경우 부모 클래스도 다음에서 변경해야 합니다.AppCompatActivityActivity.

저는 이제 다음과 같이 했습니다.

저는 제 일반적인 스타일에서 모든 것을 이어받은 스타일을 선언한 다음 Bar라는 타이틀을 비활성화했습니다.

<style name="generalnotitle" parent="general">
    <item name="android:windowNoTitle">true</item>
</style>

이제 이 스타일을 응용프로그램 전체 스타일을 덮어쓰고 다른 모든 스타일 정보를 상속하는 제목 표시줄을 숨기려는 모든 활동으로 설정할 수 있으므로 스타일 코드가 중복되지 않습니다.

활동에 하려면 특정활에스적용려열면기하을타동일열기▁toAndroidManifest.xml 다음 을 다음속추다니에 합니다.activity 태그, 태그,

<activity
    android:theme="@style/generalnotitle">

마음에 안 들어요this.requestWindowFeature(Window.FEATURE_NO_TITLE);제목 표시줄이 잠깐 나타났다가 사라지기 때문입니다.

저는 또한 그것을 좋아하지 않습니다.android:theme="@android:style/Theme.NoTitleBar"새로운 기기 사용자들이 익숙해진 3.0+ 홀로 변경 사항을 모두 잃었기 때문입니다.그래서 저는 이 해결책을 발견했습니다.

res/values 폴더에서 styles.xml이라는 파일을 만듭니다(아직 존재하지 않는 경우).해당 파일에 다음 코드를 입력합니다.

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.Default" parent="@android:style/Theme"></style>
    <style name="Theme.NoTitle" parent="@android:style/Theme.NoTitleBar"></style>
    <style name="Theme.FullScreen" parent="@android:style/Theme.NoTitleBar.Fullscreen"></style>
</resources>

다음으로 다른 styles.xml 파일로 res/values-v11을 만듭니다(다시 한 번 말하지만 이미 존재할 수도 있습니다).해당 파일에 다음 코드를 입력합니다.

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.Default" parent="@android:style/Theme.Holo"></style>
    <style name="Theme.NoTitle" parent="@android:style/Theme.Holo.NoActionBar"></style>
    <style name="Theme.FullScreen" parent="@android:style/Theme.Holo.NoActionBar.Fullscreen"></style>
</resources>

또한 4.0+를 대상으로 하는 경우 다른 styles.xml 파일(예, 이미 있을 수 있음)을 사용하여 res/values-v14 폴더를 만듭니다.해당 파일에 다음 코드를 입력합니다.

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.Default" parent="@android:style/Theme.Holo.Light"></style>
    <style name="Theme.NoTitle" parent="@android:style/Theme.Holo.Light.NoActionBar"></style>
    <style name="Theme.FullScreen" parent="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen"></style>
</resources>

마지막으로, 이러한 파일이 모두 생성된 상태에서 AndroidManifiest.xml 파일을 열고 코드를 추가할 수 있습니다.

android:theme="@style/Theme.NoTitle"

제목을 지정하지 않을 활동의 활동 태그 또는 전체 응용프로그램에 적용할 경우 응용프로그램 태그.

이제 사용자는 원하는 화면 레이아웃과 함께 장치 버전과 연결된 테마를 얻을 수 있습니다.

을 추: 값다으로로 android:theme="@style/Theme.FullScreen"알림 표시줄을 제거하는 것과 동시에 알림 표시줄도 제거합니다.

제목 표시줄은 개발자 Android 페이지에서 언급한 것과 같이 두 가지 방법으로 제거할 수 있습니다.

manifest.xml파일 이름:

  1. 다을추가다합에 다음을 합니다.application앱의 모든 활동에 대해 제거하려는 경우:

    <application android:theme="@android:style/Theme.Black.NoTitleBar">
    
  2. 또는 특정 활동의 경우:

    <activity android:theme="@android:style/Theme.Black.NoTitleBar">
    

정답은 Actionbar Activity를 확장하지 않고 Activity만 확장하는 것입니다.


여전히 작업 표시줄 활동을 사용하는 경우 이 작업이 작동하는 것처럼 보입니다.

@Override
protected void onCreate(Bundle savedInstanceState) {          
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide(); //<< this
    setContentView(R.layout.activity_main);
}

이것도 효과가 있는 것 같습니다.

styles.xml:

   <style name="AppBaseTheme" parent="Theme.AppCompat.Light" >
          <item name="android:windowNoTitle">true</item>   <!-- //this -->     
   </style>

스콧 빅스가 쓴 것처럼 할 수 있습니다.이런 종류의 작품테마가 없는 경우를 제외하고는 설정 메뉴의 배경이 투명합니다.

거스름돈만

public class MainActivity extends ActionBarActivity {

활동 또는 활동 조각으로

public class MainActivity extends Activity  {

하지만 저는 재료 디자인을 사용하여 충분히 좋게 만들 수 있고 액션 바를 제거하지 않을 수 있습니다: https://gist.github.com/shimondoodkin/86e56b3351b704a05e53

  1. 응용 프로그램 아이콘 설정
  2. 설계와 일치하도록 수행 표시줄의 색상을 설정합니다.
  3. 설정 메뉴에 아이콘 설정
  4. 아이콘 추가(위에 표시됨)

재료 설계 호환성 액션 바 스타일링의 예입니다.

내게 맞는 것:

1-in styles.xml:

 <style name="generalnotitle" parent="Theme.AppCompat.Light" >
          <item name="android:windowNoTitle">true</item>   <!-- //this -->     
   </style>

2- 주 활동 중

@Override
protected void onCreate(Bundle savedInstanceState) {          
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide(); //<< this
    setContentView(R.layout.activity_main);
}
  1. in 매니페스트 스타일 상속:

    <activity android:name=".MainActivity" android:theme="@style/generalnotitle">
    

사용하는 경우this.requestWindowFeature(Window.FEATURE_NO_TITLE)사용자는 활동이 시작될 때까지 애니메이션을 실행하는 동안 잠시 동안 제목 표시줄을 볼 수 있습니다.onCreate사용하는 경우@android:style/Theme.Black.NoTitleBar아래 그림과 같이 애니메이션 시작 중에는 제목 표시줄이 표시되지 않습니다.

<activity 
    android:name=".MainActivity" 
    android:label="My App"
    android:theme="@android:style/Theme.Black.NoTitleBar"
    android:screenOrientation="portrait">

위의 예는 분명히 당신의 기존 응용 프로그램 테마를 재정의할 것입니다. 만약 당신이 기존 테마를 가지고 있다면, 추가합니다.<item name="android:windowNoTitle">true</item> 게하게.

내가 모든 높은 투표 답변을 사용하려고 할 때 내 앱은 항상 충돌했습니다.("@filename:style"과 관련이 있다고 생각합니다.)

저에게 가장 좋은 해결책은 다음을 사용하는 것이었습니다.

android:theme="@style/Theme.AppCompat.NoActionBar"

더 이상 머리글/제목 표시줄이 없습니다.그냥 그것을 그 안에 둬라.<application>...</application>또는<activity>...</activity>전체 앱 또는 특정 활동 중에서 원하는 경우(싫어하는 경우에 따라 다릅니다.

아래와 같이 테마를 만듭니다.

 <!-- Variation on the Light theme that turns off the title -->
<style name="MyTheme" parent="android:style/Theme.Black">
    <item name="android:windowNoTitle">true</item>
</style>

더하다

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

AppTheme 내부(styles.xml)

그냥 사용하기getActionBar().hide();에서.onCreate()방법.

위해서AppCompat다음과 같은 해결책이 저에게 효과가 있었습니다.

표이 없새 추스 타테마에 수행 이 없는 styles.xml 트세를 합니다.parent="Theme.AppCompat.NoActionBar".

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">

    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimary</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowBackground">@color/colorPrimary</item>

</style>


이스플시화활동테일구스현다니합을타의 스플래시 화면 .androidManifest.xml

<activity
        android:name=".ActivityName"
        android:theme="@style/SplashTheme"> // apply splash them here 

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

결과는 다음과 같습니다.

여기에 이미지 설명 입력

당신은 그저 변화가 필요합니다.AppThemeStyle.xml의 스타일(정의를 바꿀 경우)DarkActionBar

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

로.NoActionBar

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

AndroidManifast.xml에 정의된 AppTheme

2020년에는 이것에 대한 답이 한 줄밖에 없다고 생각합니다.

styles.xml에 다음 행을 추가합니다.

<item name="windowNoTitle">true</item>

당신의onCreate메서드는 다음 스니펫을 사용합니다.

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);

이 코드를 Java 파일에서 사용할 수 있습니다.

보기를 설정하거나 로드하기 전에 이 줄을 추가합니다.

requestWindowFeature(Window.FEATURE_NO_TITLE); 
setContentView(R.layout.activity_main);

사용하는 테마에 대해 두 가지를 모두 추가합니다.

    <item name="windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>

style.xml 파일에 이 스타일 추가

 <style name="AppTheme.NoActionBar">
     <item name="windowActionBar">false</item>
     <item name="windowNoTitle">true</item>
 </style>

그런 다음 이 스타일 이름을 AndroidManifest.xml에 추가하여 아래와 같이 제목 표시줄을 보고 싶지 않은 특정 활동을 수행합니다.

<activity android:name=".youractivityname"
     android:theme="@style/AppTheme.NoActionBar">
</activity>

지원 위젯 툴바 v7을 사용하고 있습니다.그래서 제목을 삭제하거나 숨길 수 있게 하려면 이 내용을 작성해야 합니다.

Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);

//Remove¡ing title bar
getSupportActionBar().setDisplayShowTitleEnabled(false);

제목과 수행 표시줄을 모두 숨기기 위해 다음 작업을 수행했습니다.

매니페스트의 활동 태그:

android:theme="@style/AppTheme.NoActionBar"

Activity.java에서 ContentView를 설정하기 전에:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

예.,

//제목 표시줄 제거

Windows Feature(윈도우 기능)를 요청합니다.FEATURE_NO_TITLE);

//알림 표시줄 제거

이 .getWindow().setFlags(윈도우즈 관리자).레이아웃 매개 변수.FLAG_FULLSCREEN, WindowManager.레이아웃 매개 변수.플래그_풀스크린);

참고: 이 줄은 다음 이전에 유지해야 합니다.setContentView

저는 더 선호합니다:-

  • 앱테마(전체 앱테마)
  • 앱테마.수행 표시줄 없음(수행 표시줄 또는 도구 모음이 없는 테마)
  • 앱테마.수행 표시줄이 없습니다.전체 화면(수행 표시줄 및 상태 표시줄이 없는 테마)

다음과 같은 테마 스타일:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorDarkPrimary</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme.NoActionBar" parent="AppTheme">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.NoActionBar.FullScreen" parent="AppTheme.NoActionBar">
    <item name="android:windowFullscreen">true</item>
</style>

또한 Create 메서드에서 super.on(저장된 인스턴스 상태) 뒤에 아래 코드를 놓습니다.

super.onCreate(savedInstanceState)    
this.window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN)

또는 제목 표시줄을 숨기거나 표시하려는 경우:

private void toggleFullscreen(boolean fullscreen)
{
    WindowManager.LayoutParams attrs = getWindow().getAttributes();
    if (fullscreen)
    {
        attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
    }
    else
    {
        attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
    }
    getWindow().setAttributes(attrs);
}

제 경우, 안드로이드 스튜디오 2.1을 사용하고 있고 컴파일 SDK 버전이 6.0이면 manifest.xml 파일로 이동하여 다음 코드를 변경합니다.

코드는 다음과 같습니다.

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.NoActionBar">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

다음은 캡처 장면입니다(강조 코드 참조).여기에 이미지 설명 입력

이것은 나의 문제를 해결했습니다.

활동을 표시합니다.

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".SplashScreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

"AppTheme" 이름 아래 스타일:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme"
        parent="Theme.AppCompat.Light.NoActionBar">
        **<item name="windowActionBar">false</item>
        <item name="android:windowNoTitle">true</item>**
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

첫 번째 답은 양서류입니다.여기 제 설명이 있습니다: 추가:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

oncreate() 방식으로.

이전:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);

(SetContentView 바로 전이 아님) 이 작업을 수행하지 않으면 강제로 닫힙니다. +1 이 대답입니다.

저는 이 오류가 발생할 수 있는 두 가지 이유를 찾았습니다.

하나. Window 플래그는 이미 내부에 설정되어 있습니다.super.onCreate(savedInstanceState);이 경우 다음 명령 순서를 사용할 수 있습니다.

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);      

super.onCreate(savedInstanceState);

번째. 제목 표시줄 안에 뒤로/위로 단추가 있습니다. 즉, 현재 활동이 다른 활동의 계층적 하위 항목이며, 이 경우 내부에서 이 코드 행을 주석 처리하거나 제거할 수 있습니다.onCreate방법.

getActionBar().setDisplayHomeAsUpEnabled(true);

사용자 YaW와 Doug Paul이 말하는 것을 수행하는 경우 setContentView를 호출하기 전에 창 기능을 설정해야 합니다.그렇지 않으면 예외가 발생합니다.

이것이 전체 코드의 모습입니다.Android.view 가져오기를 확인합니다.창문.

package com.hoshan.tarik.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;

public class MainActivity extends Activity {

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

@style/테마를 추가합니다.AppCompat.Light.AndroidManifest.xml의 작업에 다음과 같은 액션 바가 없습니다.

<activity
        android:name=".activities.MainActivity"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar">
    </activity>

언급URL : https://stackoverflow.com/questions/2591036/how-to-hide-the-title-bar-for-an-activity-in-xml-with-existing-custom-theme

반응형