• android如何阻止app_name在标题栏中闪现


    常见自定义titlebar的方法是在values文件夹中新建一个我们自己的titlebar主题,例如:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="TitlebarBackgroundStyle">
            <item name="android:background">@drawable/titlebar</item>
        </style>
        <style name="Theme.MyCustomTheme" parent="android:Theme">
            <item name="android:windowTitleBackgroundStyle">@style/TitlebarBackgroundStyle</item>
            <item name="android:windowTitleSize">45dp</item>
        </style>
    </resources>

    然后在manifest文件中为activity添加自定义主题, 

      <activity android:name=".MyTitleBar"
                      android:label="@string/app_name"
                      android:theme="@style/Theme.MyCustomTheme" //注意添加与此


    这样就基本上完成了自定义titlebar。
    声明无标题栏的方法更简单就是直接在activity中添加语句

    requestWindowFeature(Window.FEATURE_NO_TITLE); 

    但是无论是通过上面代码定义无标题栏的activity,还是通过自定义主题重写titlebar,app首次载入时,系统总是会闪现一下app_name,然后才会运行我们定义的titlebar行为。这是一个令人诡异的行为。那么怎么去除app_name呢?

    首先我们来看一下android运行app的基本原理:在系统运行一个application时,为了尽快响应用户,android首先会给用户 呈现一个app的“preview”窗口,这个界面甚至早于应用的实际进程。这个预览“preview”窗口中的信息就是从app的manifest文件 中获得的,所以一般app运行时总会显示一个具有app_name的titlebar,而不论我们在程序中如何定义我们的titlebar。所以解决的办 法来了。

    首先我们可以在app的manifest文件中,给我们的main activity添加无标题栏的主题

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

    声明我们的app根本不需要titlebar,这样app首次载入便不会闪现一下带有app_name的titlebar了。这比

    requestWindowFeature(Window.FEATURE_NO_TITLE);

    好使得多。但是问题来了,如果我还想要app呈现我自定义的标题栏怎么办呢?

    解决的办法是在需要自定义titlebar的activity中通过

    setTheme(android.R.style.Theme); 

    声明回标题栏。
    需要注意的是setTheme(android.R.style.Theme);语句需要放在oncreat()语句的最前面否则会报错的。例如:

    1. protected void onCreate(Bundle savedInstanceState) {  
    2.         // TODO Auto-generated method stub  
    3.         setTheme(R.style.MyCustomTheme);//注意这一句的位置  
    4.         super.onCreate(savedInstanceState);  
    5.         requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);        
    6.         setContentView(R.layout.progressbar_test);  
    7.         getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,      // 注意顺序  
    8.                 R.layout.title);  风之境地 java-javascript 蘑菇街女装

    这样运行期间系统就会直接运行我们定义的标题栏,而不是先短暂的呈现app_name,再呈现我们的标题栏特征。


  • 相关阅读:
    scrollTop
    ……
    放下
    值得纪念的一天
    php新手上路(六)
    image map
    文字多出用点代替
    js formatter
    感谢,今天刚申请了博客园,
    接口的作用
  • 原文地址:https://www.cnblogs.com/sky7034/p/2037499.html
Copyright © 2020-2023  润新知