Android Java应用返回主页面后颜色异常的修复求助
问题:返回主页面后背景色异常变更
我已完成带数据库连接的界面开发,登录后进入activity_main.xml聊天主页面。点击联系人可正常跳转至聊天详情页,但点击详情页的返回箭头回到主页面后,主页面背景色莫名改变。我从未设置过这个异常颜色,需要主页面始终保持默认白色,排查许久未找到原因,求解决方案。
问题截图说明
- 初始状态的activity_main页面
- 返回后主页面背景色变更的activity_main页面
- activity_chat_details页面
相关代码文件
themes.xml
<resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="Theme.ConnectProject" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> <!-- Primary brand color. --> <item name="colorPrimary">@color/cn_colorPrimary</item> <item name="colorPrimaryVariant">@color/black</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> </resources>
colors.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="purple_200">#FFBB86FC</color> <color name="purple_500">#FF6200EE</color> <color name="purple_700">#FF3700B3</color> <color name="teal_200">#FF03DAC5</color> <color name="teal_700">#FF018786</color> <color name="black">#FF000000</color> <color name="white">#FFFFFFFF</color> <color name="colorPrimary">#0b6156</color> <color name="colorPrimaryDark">#095049</color> <color name="colorAccent">#03DAC5</color> <color name="lightGrey">#EDEDED</color> <color name="whatsAppColor">#0b6156</color> <color name="red">#9F0B0B</color> <color name="status_background">#009688</color> <color name="chat_background">#8BC34A</color> <color name="fb_color">#3c5793</color> <color name="lightgreen">#e5ffcc</color> <color name="settingsIconColor">#0E8374</color> <color name="grayBackground">#BCBCBC</color> <color name="chatbackground">#AAAAAA</color> <color name="cn_secondary_variant">#3C6382</color> <color name="cn_colorPrimary">#30336B</color> <color name="cn_background">#2F3542</color> <color name="cn_chat_bg">#C3E6FF</color> <color name="cn_primary_gray">#9A9A9A</color> </resources>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:orientation="vertical" android:background="@color/white"> <com.google.android.material.tabs.TabLayout android:layout_width="match_parent" android:layout_height="60dp" android:background="@color/cn_colorPrimary" android:elevation="12dp" app:tabIndicator="@color/white" app:tabSelectedTextColor="@color/white" app:tabMaxWidth="0dp" app:tabGravity="fill" app:tabMode="fixed" app:tabTextColor="@color/white" android:id="@+id/tabLayout"/> <androidx.viewpager.widget.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/viewPager" /> </LinearLayout>
activity_chat_detail.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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=".ChatDetailActivity" android:background="@color/cn_chat_background"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/chatRecyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/linear" android:layout_below="@+id/toolbar" android:layout_marginBottom="3dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_alignParentBottom="true" android:id="@+id/linear"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/enterMessage" android:layout_marginStart="4dp" android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/bg_et_message" android:ems="10" android:hint="Enter your message.." android:inputType="textPersonName" android:padding="10dp"/> <ImageView android:layout_width="50dp" android:layout_height="50dp" android:id="@+id/sendMsg" android:layout_marginStart="4dp" android:layout_marginLeft="4dp" android:layout_marginEnd="4dp" android:layout_marginRight="4dp" android:layout_weight="0" app:srcCompat = "@drawable/sendnew"/> </LinearLayout> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" android:theme="?attr/actionBarTheme"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/backkArrow" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.476" app:srcCompat="@drawable/leftarrowwhite" /> <de.hdodenhof.circleimageview.CircleImageView android:id="@+id/profile_image" android:layout_width="45dp" android:layout_height="45dp" android:layout_marginStart="5dp" android:layout_marginLeft="5dp" android:padding="5dp" android:src="@drawable/avatar3" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@id/backkArrow" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/userName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="5dp" android:layout_marginEnd="5dp" android:text="Akthar Fravees" android:textSize="18sp" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@+id/profile_image" app:layout_constraintTop_toTopOf="parent" /> <ImageView android:id="@+id/imageView4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="15dp" android:layout_marginRight="15dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/imageView5" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/call" /> <ImageView android:id="@+id/imageView5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="15dp" android:layout_marginRight="15dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/imageView6" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/videocall" /> <ImageView android:id="@+id/imageView6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="15dp" android:layout_marginRight="15dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/menudot" /> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.appcompat.widget.Toolbar> </RelativeLayout>
解决方案
1. 修复ViewPager加载的Fragment背景
主页面的ViewPager对应的Fragment根布局可能未设置背景色,返回时Fragment复用导致背景继承其他页面颜色。给每个Fragment的根布局添加android:background="@color/white"。
2. 强制重置主页面背景
在MainActivity的onResume()方法中重新设置背景,确保返回时恢复白色:
@Override protected void onResume() { super.onResume(); findViewById(android.R.id.content).setBackgroundColor(getResources().getColor(R.color.white)); }
3. 关闭主题的昼夜自动切换
当前主题使用Theme.MaterialComponents.DayNight.DarkActionBar,可能系统自动切换深色模式导致背景变化。修改主题为固定浅色版本:
<style name="Theme.ConnectProject" parent="Theme.MaterialComponents.Light.DarkActionBar"> <!-- 保留原有属性不变 --> </style>
4. 确认返回逻辑正确性
检查ChatDetailActivity中返回按钮的点击事件,确保调用finish()销毁页面,而非启动新的MainActivity实例:
findViewById(R.id.backkArrow).setOnClickListener(v -> finish());
内容的提问来源于stack exchange,提问作者Akthar Farvees
相关产品推荐
相关产品推荐

