Android 在 ThemeOverlay.AppCompat.Dark.ActionBar 中将 Toolbar/Widget 背景更改为黑色
Android Change Toolbar/Widget Background to Black in ThemeOverlay.AppCompat.Dark.ActionBar
您好,我刚刚设计了一个带有弹出菜单的自定义小部件。这意味着默认情况下我必须扩展 AppCompatActivity 并被迫使用
Theme.AppCompat.NoActionBar 或
ThemeOverlay.AppCompat.Dark 或
ThemeOverlay.AppCompat.Dark.ActionBar
问题是,我想让我用来替换操作栏的小部件为黑色,并使弹出菜单保持灰色,通过按设备操作菜单出现的菜单保持灰色。任何人都可以请 post 示例代码来描述如何做到这一点。在这个阶段告诉我如何做将无济于事,因为我已经尝试使用 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"
/>
据我所知,您不需要扩展 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>
我相信就是这样!...如果我错了请大家纠正我
您好,我刚刚设计了一个带有弹出菜单的自定义小部件。这意味着默认情况下我必须扩展 AppCompatActivity 并被迫使用 Theme.AppCompat.NoActionBar 或 ThemeOverlay.AppCompat.Dark 或 ThemeOverlay.AppCompat.Dark.ActionBar
问题是,我想让我用来替换操作栏的小部件为黑色,并使弹出菜单保持灰色,通过按设备操作菜单出现的菜单保持灰色。任何人都可以请 post 示例代码来描述如何做到这一点。在这个阶段告诉我如何做将无济于事,因为我已经尝试使用 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"
/>
据我所知,您不需要扩展 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>
我相信就是这样!...如果我错了请大家纠正我