Fix card view background color on API 21 & 22

This commit is contained in:
RikkaW 2022-06-01 19:42:08 +08:00 committed by John Wu
parent 3c93539e02
commit 6a2ae89846
2 changed files with 47 additions and 0 deletions

View File

@ -14,6 +14,7 @@ import com.google.android.material.snackbar.Snackbar
import com.topjohnwu.magisk.BR
import com.topjohnwu.magisk.core.Config
import com.topjohnwu.magisk.core.base.BaseActivity
import com.topjohnwu.magisk.widget.Pre23CardViewBackgroundColorFixLayoutInflaterListener
import rikka.insets.WindowInsetsHelper
import rikka.layoutinflater.view.LayoutInflaterFactory
@ -33,6 +34,11 @@ abstract class UIActivity<Binding : ViewDataBinding> : BaseActivity(), ViewModel
override fun onCreate(savedInstanceState: Bundle?) {
layoutInflater.factory2 = LayoutInflaterFactory(delegate)
.addOnViewCreatedListener(WindowInsetsHelper.LISTENER)
.apply {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
this.addOnViewCreatedListener(Pre23CardViewBackgroundColorFixLayoutInflaterListener.getInstance())
}
}
super.onCreate(savedInstanceState)

View File

@ -0,0 +1,41 @@
package com.topjohnwu.magisk.widget;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.ColorStateList;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.TintTypedArray;
import androidx.cardview.widget.CardView;
import rikka.layoutinflater.view.LayoutInflaterFactory;
public class Pre23CardViewBackgroundColorFixLayoutInflaterListener implements LayoutInflaterFactory.OnViewCreatedListener {
private final static Pre23CardViewBackgroundColorFixLayoutInflaterListener INSTANCE = new Pre23CardViewBackgroundColorFixLayoutInflaterListener();
public static Pre23CardViewBackgroundColorFixLayoutInflaterListener getInstance() {
return INSTANCE;
}
@SuppressLint("RestrictedApi")
@Override
public void onViewCreated(@NonNull View view, @Nullable View parent, @NonNull String name, @NonNull Context context, @NonNull AttributeSet attrs) {
if (!(view instanceof CardView)) {
return;
}
TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs, androidx.cardview.R.styleable.CardView);
if (a.hasValue(androidx.cardview.R.styleable.CardView_cardBackgroundColor)) {
ColorStateList colorStateList = a.getColorStateList(androidx.cardview.R.styleable.CardView_cardBackgroundColor);
if (colorStateList != null) {
((CardView) view).setCardBackgroundColor(colorStateList);
}
}
a.recycle();
}
}