Android (安卓)为什么主题的风格只是部分适用?
我想知道为什么主题的风格只是部分应用 我将基本主题设置为Android (安卓)为什么主题的风格只是部分适用?,android,toolbar,android-theme,android-statusbar,Android,Toolbar,Android Theme,Android Statusbar,我想知道为什么主题的风格只是部分应用 我将基本主题设置为NoActionBar 我使用CoordinatorLayout、AppBarLayout和toolbar在Main.xml中创建了一个新工具栏 我还为此工具栏定义了新的主题样式,并更改了stauts bar颜色并应用了此主题 但它不起作用。但是,当我更改BaseTheme中定义的标记栏颜色时 它工作得很好。我很困惑 我清楚地应用了我定义的主题样式。但是BaseTheme的状态栏颜色仍然适用 当我更改工具栏颜色时,它应用得很好 我不知道原因
NoActionBar
我使用CoordinatorLayout
、AppBarLayout
和toolbar
在Main.xml
中创建了一个新工具栏
我还为此工具栏定义了新的主题样式,并更改了stauts bar
颜色并应用了此主题
但它不起作用。但是,当我更改BaseTheme
中定义的标记栏颜色时
它工作得很好。我很困惑
我清楚地应用了我定义的主题样式。但是BaseTheme的状态栏颜色仍然适用
当我更改工具栏
颜色时,它应用得很好
我不知道原因
“我的自定义工具栏”是否受“清单主题”的影响
请告诉我原因
Main.xml
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp"
android:theme="@style/Theme.AppBarOverlay">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:titleTextColor="@color/black"
app:titleMarginStart="30dp"
android:paddingRight="30dp"
android:theme="@style/Theme.PopupOverlay"/>
</com.google.android.material.appbar.AppBarLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
themes.xml
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.WriteWeight" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
<style name="Theme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" >
<item name="colorPrimary">@color/light_green</item>
<item name="android:statusBarColor" tools:targetApi="l">@color/light_green_dark</item> <!-- not apply -->
<!-- <item name="colorPrimaryVariant">@color/light_green_dark</item> ///////////////// not apply -->
<!-- <item name="colorPrimaryDark">@color/light_green_dark</item> ///////////////// not apply -->
</style>
<style name="Theme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light">
<item name="colorPrimary">@color/light_green</item>
<item name="colorPrimaryVariant">@color/light_green_dark</item>
<item name="colorPrimaryDark">@color/light_green_dark</item>
</style>
</resources>
@颜色/紫色500
@颜色/紫色\u 700
@颜色/白色
@颜色/青色200
@颜色/青绿色700
@颜色/黑色
?attr/colorPrimaryVariant
@颜色/浅绿色
@颜色/浅色\绿色\深色
@颜色/浅绿色
@颜色/浅色\绿色\深色
@颜色/浅色\绿色\深色
Manifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.writeweight">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.WriteWeight">
<activity android:name=".data.DailyRecordDetailActivity"></activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
MainActivity.java
public class MainActivity extends AppCompatActivity {
RecyclerView rcv_dailyRecord;
Toolbar toolbar;
LinearLayoutManager layoutManager;
DailyRecordAdapter dailyRecordAdapter;
ArrayList<DailyRecordModel> dailRecordItems;
final static String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rcv_dailyRecord = findViewById(R.id.rcv_dailyrecord);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// getSupportActionBar().setDisplayShowTitleEnabled(false);
// toolbar.setTitle("목 록");
public类MainActivity扩展了AppCompatActivity{
RecyclerView rcv_dailyRecord;
工具栏;
直线布局经理布局经理;
DailyRecordAdapter DailyRecordAdapter;
ArrayList dailRecordItems;
最终静态字符串标记=“MainActivity”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rcv_dailyRecord=findViewById(R.id.rcv_dailyRecord);
toolbar=findviewbyd(R.id.toolbar);
设置支持操作栏(工具栏);
//getSupportActionBar().setDisplayShowTitleEnabled(false);
//工具栏。设置标题(“목 록");
您在styles.xml中创建了一个自定义的主题.AppBarOverlay
样式。现在,除非您将此样式应用于某个视图/小部件,否则此样式将毫无用处
第一点:
将样式应用于特定视图不会影响其他视图/小部件
查看布局以查看将此样式设置为哪个视图:这是AppBarLayout
小部件
AppBarLayout
区域不包括状态栏区域,这是因为状态栏是android系统组件,而不是活动小部件(不是活动的一部分)。因此,当将此样式应用于AppBarLayout
时,它只能将此样式的属性应用于此AppBarLayout
视图在屏幕上占据的区域
第二点:
每个视图/小部件都有某些属性可以影响其样式;不仅有可应用于任何视图的公共属性,还有特定于某些视图的其他独特属性。将样式属性应用于无法使用它们的视图不会对这些视图产生影响,或者它们可能会产生意外行为基于这些观点
在示例中应用这两点:
您使用了可应用于系统/状态栏的android:statusBarColor
属性,并将其添加到应用于AppBarLayout
的样式中;因此此样式只能应用于AppBarLayout
周围区域,即不应用于状态栏本身(第1点),而且AppBarLayout
不会使用它,因为它不会影响其布局中的任何内容,因为它不是可以影响AppBarLayout
的属性的一部分(第2点)
状态栏是一个系统组件,而不是应用程序/活动组件/小部件,因此更改它必须在应用程序的全局主题中,或者您可以通过编程方式进行更改
你可以查看更多信息。你能告诉我如何在你的行为(java/kotlin)中设置动作栏吗?你是说在代码中?你从应用程序的主题中删除了动作栏。你已经用java设置了吗?我刚刚修改了文字。请看代码。我已经使用设置支持动作栏(工具栏)设置了工具栏
@ybyb是的,你是对的。它是AppBarLayout
包括它的任何内部视图。就像在你的例子中,工具栏
…我指的是它的周围框架,即它的宽度/高度,如果这不是描述性的,很抱歉……但是请确保内部视图属性覆盖它们的父视图..即工具B中的属性ar
覆盖其父级AppBarLayout
中相同/相似的属性。例如,如果使用android:background=“@android:color/black"
在工具栏中
,您将看到的整体颜色是工具栏
黑色,而不是样式中设置的AppBarLayout
颜色非常感谢。我理解了。但是,我还不明白一件事。在您的回答中,在计算机中应用示例中的两个点:
,我没有取消了解第2点
(来自和也是~AppBarLayout)。您能更容易地解释它吗?抱歉..我的意思是AppBarLayout
具有可能影响其外观和行为的属性集…如果您添加属性(该属性不是该属性集的一部分)对于AppBarLayout
,此属性可能对AppBarLayout
的外观没有影响,或者可能会有意外行为(因为此特定属性与AppBarLayout
属性集无关……在您的示例中,您将android:statusBarColor