활동이 작성되기 전에 수행 표시줄을 숨기고 다시 표시하는 방법은 무엇입니까?
허니콤 앱에 스플래시 화면을 구현해야 합니다.Create의 활동에서 이 코드를 사용하여 스플래시를 표시합니다.
setContentView(R.layout.splash);
getActionBar().hide();
이 코드는 잠시 후 기본 UI를 표시합니다.
setContentView(R.layout.main);
getActionBar().show();
그러나 onCreate가 호출되고 스플래시가 표시되기 전에 수행 표시줄이 표시되는 시간이 적습니다.
수행 표시줄을 보이지 않게 하려면 어떻게 해야 합니까?
수행 표시줄이 없는 활동에 테마를 적용하려고 했습니다.
<item name="android:windowActionBar">false</item>
하지만 이 경우 getActionBar()는 항상 null을 반환하고 다시 표시할 방법을 찾지 못했습니다.
정android:windowActionBar="false"
처럼 정로액 바션무를키지만시력, 말것입다니한당이신화말▁truly다▁the것니▁then입▁disables,.getActionBar();
반환합니다.이 문제는 다음을 통해 해결됩니다.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getActionBar().hide();
setContentView(R.layout.splash); // be sure you call this AFTER requestFeature
이렇게 하면 수행 표시줄이 생성되고 표시되기 전에 즉시 숨겨집니다.
하지만 지금 또 다른 문제가 있습니다.를 넣은 에.windowActionBar="false"
테마에서 활동은 수행 표시줄 대신 일반 창 제목을 그립니다.
만약 우리가 일부를 사용하여 이것을 피하려고 한다면,*.NoTitleBar
주식 테마 또는 우리가 넣으려고 노력합니다.<item name="android:windowNoTitle">true</item>
우리만의 테마에서는, 그것은 작동하지 않을 것입니다.
그 이유는 수행 표시줄이 창 제목에 따라 달라지기 때문입니다. 즉, 수행 표시줄은 변환된 창 제목입니다.
따라서 활동 테마 xml에 한 가지를 더 추가하는 것이 유용합니다.
<item name="android:windowActionBar">false</item>
<item name="android:windowTitleSize">0dp</item>
이렇게 하면 높이가 0인 창 제목이 거의 보이지 않게 됩니다.
당신의 경우, 스플래시 화면을 표시한 후에 간단히 전화를 걸 수 있습니다.
setContentView(R.layout.main);
getActionBar().show();
그리고 당신은 끝났습니다.수행 표시줄이 깜박이거나 창 제목이 표시되지 않고 활동이 시작됩니다.
추가 기능: 수행 표시줄을 여러 번 표시하거나 숨길 경우 첫 번째 표시가 애니메이션화되지 않은 것을 알 수 있습니다.그때부터 보여주기와 숨기기가 애니메이션화됩니다.첫 번째 상영에서도 애니메이션을 사용하려면 다음을 사용할 수 있습니다.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_ACTION_BAR);
// delaying the hiding of the ActionBar
Handler h = new Handler();
h.post(new Runnable() {
@Override
public void run() {
getActionBar().hide();
}
});
다음과 같은 이점을 얻을 수 있습니다.
protected void onPostResume() {
super.onPostResume();
getActionBar().hide();
그러나 이것이 활동의 첫 번째 표시인지 확인하려면 추가 논리가 필요할 수 있습니다.
이 아이디어는 액션 바의 숨김을 조금 늦추는 것입니다.어떤 면에서는 수행 표시줄이 표시되도록 허용하지만 즉시 숨깁니다.따라서 우리는 첫 번째 비애니메이션 쇼를 넘어서 다음 쇼는 두 번째 쇼로 간주되어 애니메이션이 될 것입니다.
작업 지연으로 인해 작업 표시줄이 숨겨지기 전에 표시될 가능성이 있습니다.사실은 이렇습니다.대부분의 경우 아무것도 표시되지 않지만 가끔 작업 표시줄이 잠시 깜박이는 것을 볼 수 있습니다.
어쨌든 이것은 좋은 해결책이 아니기 때문에 어떠한 제안도 환영합니다.
v7 지원 작업 표시줄 사용자의 경우 코드는 다음과 같습니다.
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();
.class 파일의 이 단순 코드를 사용하여 수행 표시줄 숨기기
getSupportActionBar().hide();
수행 표시줄 잠금을 사용하는 경우 테마를 사용합니다.셜록.활동에 수행 표시줄 테마 없음
<activity
android:name=".SplashScreenActivity"
android:theme="@style/Theme.Sherlock.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
두 스타일 작성:
<style name="AppThemeNoBar" parent="Theme.AppCompat.Light">
<item name="android:windowNoTitle">true</item>
</style>
<style name="AppThemeBar" parent="Theme.AppCompat.Light">
<item name="android:windowNoTitle">false</item>
</style>
AppThemeNoBar를 응용프로그램 테마로 설정하고 AppThemeBar를 ActionBar를 표시할 활동으로 설정합니다.두 가지 스타일을 사용하면 보기를 로드하는 동안 수행 표시줄을 볼 수 없습니다.
Android 링크 선택: 로드를 보는 동안 수행 표시줄 숨기기
안녕하세요 저는 2가지 테마를 사용하여 간단한 해결책을 가지고 있습니다.
화면 테마 시작(매니페스트에 추가):
<style name="SplashTheme" parent="@android:style/Theme.Holo.NoActionBar"> <item name="android:windowBackground">@color/red</item> </style>
일반 테마(세트별로 활동에 추가)테마(R.style).테마):
<style name="Theme" parent="@style/Theme.Holo"> <item name="android:windowBackground">@color/blue</item> </style>
SDK 10을 지원하려면:
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Theme);
super.onCreate(savedInstanceState);
...........
...........
}
Android 2.2에서 Action Bar를 숨기려고 했지만, 이 솔루션들 중 어느 것도 작동하지 않았습니다.모든 것은 충돌로 끝납니다.DDMS LOG를 확인해보니 '테마'를 사용하라는 내용이었습니다.AppCompat'이(가 있습니다.마침내 나는 그 문제를 변경함으로써 해결했습니다.android:theme="@android:style/Theme.Holo.Light.NoActionBar"
안으로android:theme="@style/Theme.AppCompat.NoActionBar"
작동은 했지만 인터페이스는 어두웠습니다.
그 다음에 나는 노력했습니다.android:theme="@style/Theme.AppCompat.Light.NoActionBar"
그리고 마침내 내가 원하는 것을 얻었습니다.
그 후 개발자 사이트에서 'AppCompat'에 대해 검색해보니 이렇게 되었습니다.
Android 2.2를 위한 솔루션은 다음과 같습니다.
<activity
android:name=".MainActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
그리고 언제나처럼 영어를 못해서 미안합니다.
저에게 가장 좋은 결과는 ThemeNoTitleBar로 콘텐츠를 런처로 사용하지 않고 활동을 만든 것입니다.그런 다음 이 활동은 다른 활동으로 직접 전화합니다.
물론 내용을 스플래시 활동에 추가할 수 있지만, 저의 경우에는 애플리케이션을 직접 보여드리고 싶었습니다.
매니페스트:
<activity
android:name="com.package.SplashActivity"
android:theme="@android:style/Theme.Black.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
활동:
public class SplashActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//start StartActivity
Intent intent = new Intent(this, StartActivity.class);
startActivity(intent);
finish();
}
}
하나를 사용하는 경우Activity
스플래시 화면이 포함되어 있습니다. 사용할 경우 이 작업을 수행할 수 있습니다.SherlockActionBar
getSupportActionBar().hide();
시작 화면이 끝나면...을 사용하여 다시 표시할 수 있습니다.
getSupportActionBar().show();
네이티브와 동일해야 합니다.ActionBar
안드로이드의
@클레릭스 솔루션은 작동합니다.그러나 이것은 구글, 플레이 스토어, 토크와 같은 일부 구글 네이티브 앱에도 문제가 있는 것으로 보입니다.스카이프와 같은 다른 큰 앱들도 있습니다.
편집: 아래 솔루션은 api < 4.0의 액션 바 셔록에 대한 문제를 내게 주었고, 그 이유는 설정되었습니다.테마는 프리 아이스크림 샌드위치로 작동하지 않습니다.
응용프로그램 또는 활동 태그 내의 매니페스트에 다음을 추가합니다.
android:theme="@style/Theme.NoActionBar"
그리고 당신의 주요 활동에서:
// Set theme
setTheme(R.style.YOUR_THEME);
getSupportActionBar().setTitle(R.string.title);
// Start regular onCreate()
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
간단명료한
requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
2015년 AppCompat 테마가 포함된 지원 v7 라이브러리를 사용하여 활동에 대해 이 테마를 설정합니다.
<style name="AppTheme.AppStyled" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimaryDark">@color/md_indigo_100</item>
<item name="colorPrimary">@color/md_indigo_500</item>
<item name="colorAccent">@color/md_red_500</item>
<item name="android:textColorPrimary">@color/md_white_1000</item>
<item name="android:textColor">@color/md_purple_500</item>
<item name="android:textStyle">bold</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</style>
위해서Splashscreen
은 은이라사합야니다용해을인당에 사용해야 .manifest
사하지않을 사용하지 .getActionBar()
<item name="android:windowActionBar">false</item>
그리고 한번 스플래시 시Activity
메인으로 마무리 되었습니다.Activity
또는 하지 않음
<item name="android:windowActionBar">true</item>
이것을 사용해 보세요, 저에게 효과가 있습니다.
아래는 활동의 제목 표시줄을 제거합니다.
requestWindowFeature(Window.FEATURE_NO_TITLE);
아래에서는 활동을 전체 화면으로 전환하는 알림 표시줄을 제거합니다.
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
(아래의 전체 예) 참고:이러한 메소드는 활동의 내용 보기를 설정하기 전에 호출되었습니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Sets Application to full screen by removing action bar
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
// without this check, we would create a new fragment at each orientation change!
if (null == savedInstanceState)
createFragment();
}
이것은 편리할지도 모릅니다.
이것을 당신의 매니페스트에 추가합니다.
android:theme="@android:style/Theme.Light.NoTitleBar"
건배.
사용 가능한 옵션을 모두 읽은 후에 찾을 수 있는 가장 좋은 방법은 ActionBar 없이 메인 테마를 설정한 다음 모든 활동의 상위에 있는 코드에서 MyTheme를 설정하는 것입니다.
매니페스트:
<application
...
android:theme="@android:style/Theme.Holo.Light.NoActionBar"
...>
기본 활동:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.GreenHoloTheme);
}
이렇게 하면 응용 프로그램이 시작될 때 ActionBar를 피할 수 있습니다!
이미 게시된 해결책은 첫 번째 .show() 호출이 나를 위해 ActionBar를 애니메이션화하지 않았다는 부작용과 함께 제공되었습니다.또 다른 좋은 해결책을 얻었는데, 그것은 다음과 같습니다.
투명한 그림 그리기 도구를 만듭니다.
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#00000000" /> </shape>
실제 수행 표시줄 배경을 수행 표시줄에 설정한 보이지 않는 사용자 정의 보기로 설정합니다.
getSupportActionBar().setCustomView(R.layout.actionbar_custom_layout); getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE);
만들기의 작업 표시줄에 투명 배경을 설정합니다.
getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.background_transparent));
중요:Create에서 수행 표시줄을 바로 숨기지 말고 나중에 레이아웃 작성이 완료된 경우와 같이 작업 표시줄을 숨깁니다.
getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
getSupportActionBar().hide();
}
});
첫 번째 .show() 호출 전에 사용자 정의 보기를 표시합니다.
_actionbarRoot.setVisibility(View.VISIBLE); getSupportActionBar().show();
지원 라이브러리를 사용하고 있어서 null인 경우 대신getActionBar()
에 해야 합니다.getSupportActionBar()
.
이것을 onCreate 기능의 Main Activity에 추가하기만 하면 됩니다.
val actionBar = supportActionBar?.apply { hide() }
스플래시 화면을 별도의 활동에 넣고 기본 활동에서 사용합니다.onCreate
은 다음과 같은 이유로 작동합니다.이는 문서에 따르면 다음과 같은 이유로 작동합니다.
특수한 경우로, 활동의 초기 onCreate(Bundle savedInstanceState)/onResume()에서 requestCode >= 0으로 startActivityForResult()를 호출하면 시작된 활동에서 결과가 반환될 때까지 창이 표시되지 않습니다.이는 다른 활동으로 리디렉션할 때 깜박임이 보이지 않도록 하기 위한 것입니다.
당신은 아마도 다음과 같은 주장을 하는 경우에만 이것을 해야 합니다.onCreate
이라null
(구성 변경으로 인해 다시 시작하는 것이 아니라 활동을 새로 시작하는 것을 의미합니다.)
나는 여전히 null 포인터에 오류가 있었고 마침내 내가 먼저 getWindow().requestFeature()를 호출한 다음 super.onCreate()를 호출했을 때 도움이 되었습니다.
public void onCreate(Bundle savedInstanceState) {
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
super.onCreate(savedInstanceState);
getActionBar().show();
style.xml에 이것을 추가하기만 하면 됩니다.
<item name="android:windowNoTitle">true</item>
사실, 당신은 간단히 스플래시를 설정할 수 있습니다.Activity
와 함께NoActionBar
그리고 당신의 메인을 설정합니다.activity
액션 바와 함께.
이렇게 하는 가장 좋은 방법은 첫 번째 활동을 빈 활동으로 만들고 내용을 넣고 시간이 지나면 다른 활동을 시작하는 것입니다.이렇게 하면 수행 표시줄이나 다른 작업 없이 첫 번째 작업을 시작 화면으로 만들 수 있습니다.여기 나의 첫번째 활동입니다.
package com.superoriginal.rootashadnasim.syllabus;
import android.content.Intent;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class first_screen extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first_screen);
final Handler h=new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent=new Intent(getApplicationContext(),DrawerChooseBranchMainActivity.class);
startActivity(intent);
}
},2000);
}
}
그런 다음 모든 활동을 첫 번째 활동으로 지정할 수 있습니다. 화면에 수행 표시줄이 없으면 스타일에 수행 표시줄을 추가하십시오.
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
Android 스튜디오는 전체 화면에 대한 빌드 템플릿을 제공합니다. Android 스튜디오를 사용하는 경우 아래 단계에 따라 전체 화면 활동을 구현할 수 있습니다.
완료. Android 스튜디오가 당신의 작업을 완료했습니다. 이제 전체 화면에 대한 코드를 확인할 수 있습니다.
이것이 내가 사용한 가장 좋은 방법입니다. 자바 파일로 이동, 다음.onCreate
:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Take instance of Action Bar
// using getSupportActionBar and
// if it is not Null
// then call hide function
if (getSupportActionBar() != null) {
getSupportActionBar().hide();
}
}
저는 링크를 게시하는 것이 최선의 방법이 아니라는 것을 알고 있지만, 저는 당신이 구글에서 직접 다음 문서를 읽는 것을 강력히 추천합니다.이것은 당신의 시스템 UI(액션바, 내비게이션바 등)를 제어하는 방법에 대한 공식 안드로이드 문서입니다.유감스럽게도 정보가 너무 많아서 직접 게시할 수 없지만, 이 글을 읽고 나면 어떤 버전으로 개발하든 기능을 표시하고 숨기는 방법을 정확히 이해할 수 있을 것입니다. 매우 간단합니다!
링크가 변경될 경우, 교육 중인 공식 안드로이드 설명서에서 확인할 수 있습니다 -> 시작하기 -> 사용자 인터페이스 모범 사례 -> 시스템 UI 관리
https://developer.android.com/training/system-ui/index.html
다음을 사용할 수 있습니다.
getSupportActionBar().hide();
만약 그것이 작동하지 않는다면, 이것을 시도해 보세요.
getActionBar().hide();
만약 위가 작동하지 않는다면 이렇게 해보세요:
디렉토리 = res/values/style.xml에서 style.xml -> 속성이 있습니다.parent
로 변경.parent="Theme.AppCompat.Light.DarkActionBar"
만약 모든 것이 작동하지 않는다면, 저는 더 이상 모릅니다. 하지만 저에게는 효과가 있습니다.
언급URL : https://stackoverflow.com/questions/8500283/how-to-hide-action-bar-before-activity-is-created-and-then-show-it-again
'programing' 카테고리의 다른 글
현재 웹 페이지 스크롤 위치를 가져오고 설정하는 방법은 무엇입니까? (0) | 2023.08.22 |
---|---|
페이지 로드 시 ID로 애니메이션 스크롤 (0) | 2023.08.22 |
Spring Data REST - PUT 요청이 v.2.5.7 이후 제대로 작동하지 않음 (0) | 2023.08.22 |
유형 오류: #은(는) 주목할 만한 항목입니다. (0) | 2023.08.22 |
"with open(...)"과 "sys.stdout" 둘 다 잘 다루는 방법은? (0) | 2023.08.22 |