在Android中打开操作栏时发生更改



我已经更改了操作栏的颜色和其他内容,以便以所需的颜色和文本打开,但当我打开应用程序时:应用程序以默认主题打开,并立即更改为给定主题。

这种情况发生在像Galaxy Nexus、Nexus 4这样的手机上,但在Nexus 5上没有。我不知道为什么会发生这种事?

在我的应用中设置ContentView之前,我已经设置了操作栏

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    
    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setDisplayShowHomeEnabled(true);
    getActionBar().setIcon(android.R.color.transparent);
    getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.actionBarColor)));
    
    setContentView(R.layout.activity_main);
 }

我使用以下内容获得主题:http://jgilfelt.github.io/android-actionbarstylegenerator/

我从上面得到的风格是这样的:

<style name="Theme.link" parent="@android:style/Theme.Holo">
    <item name="android:actionOverflowButtonStyle">@style/ThemeFor.OverFlow</item>
    <item name="android:actionBarItemBackground">@drawable/selectable_background_link</item>
    <item name="android:popupMenuStyle">@style/PopupMenu.link</item>
    <item name="android:dropDownListViewStyle">@style/DropDownListView.link</item>
    <item name="android:actionBarTabStyle">@style/ActionBarTabStyle.link</item>
    <item name="android:actionDropDownStyle">@style/DropDownNav.link</item>
    <item name="android:actionBarStyle">@style/ActionBar.Solid.link</item>
    <item name="android:actionModeBackground">@drawable/cab_background_top_link</item>
    <item name="android:actionModeSplitBackground">@drawable/cab_background_bottom_link</item>
    <item name="android:actionModeCloseButtonStyle">@style/ActionButton.CloseMode.link</item>
</style>
<style name="ActionBar.Solid.link" parent="@android:style/Widget.Holo.ActionBar.Solid">
    <item name="android:background">@drawable/ab_background_textured</item>
    <item name="android:backgroundStacked">@drawable/ab_stacked_solid_link</item>
    <item name="android:backgroundSplit">@drawable/ab_background_textured_link</item>
    <item name="android:progressBarStyle">@style/ProgressBar.link</item>
</style>
<style name="ActionBar.Transparent.link" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:background">@drawable/ab_transparent_link</item>
    <item name="android:progressBarStyle">@style/ProgressBar.link</item>
</style>
<style name="PopupMenu.link" parent="@android:style/Widget.Holo.ListPopupWindow">
    <item name="android:popupBackground">@drawable/menu_dropdown_panel_link</item>
</style>
<style name="DropDownListView.link" parent="@android:style/Widget.Holo.ListView.DropDown">
    <item name="android:listSelector">@drawable/selectable_background_link</item>
</style>
<style name="ActionBarTabStyle.link" parent="@android:style/Widget.Holo.ActionBar.TabView">
    <item name="android:background">@drawable/tab_indicator_ab_link</item>
</style>
<style name="DropDownNav.link" parent="@android:style/Widget.Holo.Spinner">
    <item name="android:background">@drawable/spinner_background_ab_link</item>
    <item name="android:popupBackground">@drawable/menu_dropdown_panel_link</item>
    <item name="android:dropDownSelector">@drawable/selectable_background_link</item>
</style>
<style name="ProgressBar.link" parent="@android:style/Widget.Holo.ProgressBar.Horizontal">
    <item name="android:progressDrawable">@drawable/progress_horizontal_link</item>
</style>
<style name="ActionButton.CloseMode.link" parent="@android:style/Widget.Holo.ActionButton.CloseMode">
    <item name="android:background">@drawable/btn_cab_done_link</item>
</style>
<!-- this style is only referenced in a Light.DarkActionBar based theme -->
<style name="Theme.link.Widget" parent="@android:style/Theme.Holo">
    <item name="android:popupMenuStyle">@style/PopupMenu.link</item>
    <item name="android:dropDownListViewStyle">@style/DropDownListView.link</item>
</style>

我称之为清单中的主题:

   <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.link" >
    <activity
        android:name=".Link_Main"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".Link_Support"
        android:label="@string/action_support"
        android:screenOrientation="portrait" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ylg.linking.Link_Main" />
    </activity>
</application>

有人能帮我修一下吗?

谢谢!

尝试将<item name="android:actionBarStyle">@style/Theme.link</item>添加到AndroidManifest.xml中的基本活动样式中。

我认为应该将ActionBar.Solid.linkandroid:background的值更改为@color/actionBarColor

之所以会发生这种情况,是因为当应用程序运行时,它会从styles.xml获取样式,这样您就可以看到默认样式,之后您将更改onCreate()中的activob栏,这样主题就会立即更改。为了解决这个问题,只使用下面的代码,使用styles.xml设置操作栏的图标和背景颜色。试试看。希望它有效。

<style name="AppBaseTheme" parent="@android:style/Theme.Holo.Light">
      ..... 
     <item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
<style name="MyActionBar"  arent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/actionBarColor</item>
    <item name="android:text">""</item>
    <item name="android:icon">@android:color/transparent</item>
</style> 

并删除以下代码。

getActionBar().setIcon(android.R.color.transparent);
getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.actionBarColor)));

最新更新