您好我刚设计了一个带弹出菜单的自定义小部件。这意味着默认情况下我必须扩展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"
/>
答案 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>
我相信这就是它!...如果我错了,请任何人纠正我