在ThemeOverlay.AppCompat.Dark.ActionBar中将Android更改工具栏/小部件背景变为黑色

时间:2016-04-07 07:38:52

标签: java styles android-widget themes customization

Action Bar Menu Must Stay Grey Popup Menu Must Stay Grey Widget with same background as app, need widget to be black

您好我刚设计了一个带弹出菜单的自定义小部件。这意味着默认情况下我必须扩展AppCompatActivity并被迫使用 Theme.AppCompat.NoActionBar或 ThemeOverlay.AppCompat.Dark或 ThemeOverlay.AppCompat.Dark.ActionBar

问题是,我想将我用来取代操作栏的小部件设置为黑色,并将弹出菜单保持灰色,并通过按设备操作菜单灰色显示菜单。任何人都可以发布示例代码,以及如何执行此操作的说明。在这个阶段告诉我如何不会帮助,因为我已经尝试使用java并更改主题中的主色和深色。我还尝试在styles.xml中添加多个自定义样式,最后我注释掉并最终删除。请参阅下面的代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingTop="0dp"
android:paddingBottom="0dp" tools:context=".MainActivity">
<android.support.v7.widget.Toolbar
    android:id="@+id/my_toolbar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#000"
    android:elevation="5dp"
    android:titleTextColor="#fff"
    android:layout_alignParentTop="true"
    android:title="@string/app_name"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
   />

package com.example.android.widget;

import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.ViewParent;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(myToolbar);
        myToolbar.setTitle("Widget");
        myToolbar.setTitleTextColor(0xFFFFFFFF);
        myToolbar.setBackgroundColor(Color.rgb(51, 51, 51));
        View titleView = getWindow().findViewById(android.R.id.title);
        if (titleView != null) {
            ViewParent parent = titleView.getParent();
            if (parent != null && (parent instanceof View)) {
                View parentView = (View)parent;
                parentView.setBackgroundColor(Color.rgb(51, 51, 51));
            }
        }
}

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    // Menu options to set and cancel the alarm.
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            // When the user clicks START ALARM, set the alarm.
            case R.id.start_action:

                return true;
            // When the user clicks CANCEL ALARM, cancel the alarm.
            case R.id.cancel_action:

                return true;
        }
        return false;
    }
}


<resources><!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:textColor">#fff</item>
    <item name="android:actionMenuTextColor">#fff</item>
    <item name="colorPrimary">@color/colorBackground</item>
    <item name="colorPrimaryDark">@color/black</item>
</style>

    xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity">
<item android:id="@+id/start_action"
    android:orderInCategory="100"
    android:title="@string/start_text"
    app:showAsAction="never"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    />
<item android:id="@+id/cancel_action"
    android:orderInCategory="100"
    android:title="@string/cancel_text"
    app:showAsAction="never"
    />

1 个答案:

答案 0 :(得分:1)

据我所知,您不需要扩展AppCompactActivity,因为您使用的是自定义工具栏。 我在上个月遇到了同样的问题,我解决它的方法是摆脱AppCompactActivity扩展并改为:

public class MainActivity extends Activity

要查看应用在样式和编码时的外观,您需要选择预览到AppNoTitleBarFullScreen。

同样在您的OnCreate()方法中,您需要添加以下内容:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.Your_Activity);
        ...
}

在您的样式XML文件中添加以下内容:

<style name="Theme.AppCompat.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.NoTitleBar.FullScreen">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item> 
</style>

我相信这就是它!...如果我错了,请任何人纠正我