应用程序在反压后恢复时,布局元素的背景颜色会发生变化

时间:2019-02-10 10:38:26

标签: java android android-layout android-fragments

我的活动有两个片段。活动仅包含TabLayout(2tabs),其中这两个片段填充了tabs主体。

当我第一次启动该应用程序时,一切正常,所有颜色均已从colors.xml正确加载。当我按下backpress按钮(在2个仿真器和真实设备(API,从23到28)中尝试过)时,我重新打开该应用,活动标签的颜色为(#222222),颜色为(#222222)片段中所有其他元素的颜色更改为原色,在我的情况下为colorAccent: @color/green。并且此green颜色正常加载。应用程序中的其他颜色完全不变,它们保持定义不变。

我花了6个小时来调试这个问题,我不知道为什么其他颜色会保持原样。

我已经尝试并添加了一个新的活动,该活动从单击fragment的按钮开始,并将此活动background color设置为与{{1 }}设为#222222

此活动的背景始终为colors.xml,即使我在活动标签页按钮为<color name="darkg">#222222</color>颜色的情况下正常启动(不恢复)应用程序后也是如此。

这是我从父母的活动开始做香的方式:

green

我试图删除一些我认为可能导致此问题的依赖项,我已经清理了很多次项目,使缓存无效并重新启动了android studio,但没有任何帮助。

Android 5.0支持我的应用程序,我尝试在使用API​​ 23的模拟器上对其进行测试,选项卡的颜色在那里没有变化,只有片段中的其他元素保持不变。另一方面,我在具有API 28和真实设备API 28的模拟器上进行了测试,并且片段中的其他元素也将选项卡按钮更改为绿色,并且活动始终为绿色。

我还要提到的是,在我的片段中,我设置了darkg并且设置了@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_inside); fm = getSupportFragmentManager(); // Create the adapter that will return a fragment for each of the three // primary sections of the activity. mSectionsPagerAdapter = new SectionsPagerAdapter(fm); // Set up the ViewPager with the sections adapter. mViewPager = findViewById(R.id.container); mViewPager.setAdapter(mSectionsPagerAdapter); TabLayout tabLayout = findViewById(R.id.tabs); mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager)); } public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position){ case 0: return watchList; case 1: return exbook; default: return null; } }` 这样的背景颜色(它是在recyclerview中设置的,并且该颜色始终有效,永远不会变成绿色:

alternate rows

活动的XML文件,其中有Adapter.class

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    //holder.textViewPos.setText("#" + (position + 1));
    holder.swipeLayout.setOffset(itemsOffset[position]);
    //((RecyclerView.LayoutParams) holder.itemView.getLayoutParams()).height = 300;
    if(position %2 == 1)
    {
        holder.itemView.setBackgroundColor(Color.parseColor("#222222"));

        //  holder.imageView.setBackgroundColor(Color.parseColor("#FFFFFF"));
    }
    else
    {
        holder.itemView.setBackgroundColor(Color.parseColor("#2B2B2B"));
        //  holder.imageView.setBackgroundColor(Color.parseColor("#FFFAF8FD"));
    }
}

片段XML:

TabLayout

当我单击按钮<androidx.coordinatorlayout.widget.CoordinatorLayout 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:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context=".InsideActivity"> <com.google.android.material.appbar.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="@dimen/appbar_padding_top" android:background="#fff"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/imageView2" android:layout_width="match_parent" android:layout_height="52dp" android:layout_marginTop="8dp" android:layout_marginBottom="15dp" android:layout_weight="1" app:layout_constraintVertical_bias="1.0" app:srcCompat="@drawable/logo" /> </androidx.constraintlayout.widget.ConstraintLayout> <com.google.android.material.tabs.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="65dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:tabBackground="@drawable/tab_color_selector" app:tabIndicator="@color/darkg"> <com.google.android.material.tabs.TabItem android:id="@+id/tabItem" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Watchlist" /> <com.google.android.material.tabs.TabItem android:id="@+id/tabItem2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Exbook" /> </com.google.android.material.tabs.TabLayout> </com.google.android.material.appbar.AppBarLayout> <com.me.appka.NonSwipeableViewPager android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> </com.me.appka.NonSwipeableViewPager> 时在Fragment中启动的活动XML:

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<Button
    android:id="@+id/addToWatchlist"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/darkg"
    android:fontFamily="sans-serif"
    android:gravity="center_vertical"
    android:includeFontPadding="true"
    android:onClick="onClickAddNewPerson"
    android:text="ADD NEW"
    android:textAlignment="center"
    android:textColor="@color/details_text"
    android:textSize="20dp" />

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_below="@id/addToWatchlist"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
</RelativeLayout>

更新:

我已经更详细地检查了LogCat,发现有几行写着addToWatchlist,所以我再次遍历了代码,没有任何可能导致过多工作的东西,但是我还检查了资源,尤其是可绘制对象和将2个文件(png)的大小减小了,从<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=".AddToWatchlistActivity" android:background="@color/darkg"> <TextView android:id="@+id/watchlistTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="sans-serif" android:text="Add new person to you Watchlist" android:textAlignment="center" android:textColor="@android:color/white" android:textSize="18dp" app:layout_constraintBottom_toTopOf="@+id/profile_image" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> 减小到大约Choreographer(abc): Skipped xx frames! The application may be doing too much work on its main thread.,并且1MB消失了,并且变色行为也有所改变。

当我之前按下后退按钮并返回应用程序时,深灰色选项卡+按钮变为绿色。现在,当我按下后退按钮后立即返回应用程序时,选项卡颜色保持灰色,只有片段中的按钮变为绿色。当我退出应用程序并一次又一次地足够快地返回时,它会保持这种状态,但是如果我等了2秒钟然后又回到应用程序中,则选项卡的颜色也会从灰色变为绿色。

这太奇怪了,我不知道出什么问题了。

1 个答案:

答案 0 :(得分:0)

我自己解决了这个问题。

我一步一步地遍历了XML中的TabLayout,现在可以了。我没有分析我做过的事情,但这是有效的XML TabLayout

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 
    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"
    android:orientation="vertical"
    tools:context=".InsideActivity">

<com.google.android.material.appbar.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent">

<ImageView
    android:id="@+id/logo"
    android:layout_width="match_parent"
    android:layout_height="74dp"
    android:contentDescription="Title"
    android:padding="8dp"
    app:srcCompat="@drawable/logo" />

<com.google.android.material.tabs.TabLayout
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="65dp"
    android:background="@color/darkg"
    app:tabSelectedTextColor="@android:color/white"
    app:tabTextColor="@android:color/black">

    <com.google.android.material.tabs.TabItem
        android:id="@+id/tabItem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Watchlist" />

    <com.google.android.material.tabs.TabItem
        android:id="@+id/tabItem2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ExBook" />
</com.google.android.material.tabs.TabLayout>
</com.google.android.material.appbar.AppBarLayout>

<com.fre.book.NonSwipeableViewPager
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>