bugfix: BottomSheet Context

This commit is contained in:
cgspine
2020-05-12 15:59:29 +08:00
parent 3c691d0d05
commit 420cc37196
5 changed files with 34 additions and 5 deletions
@@ -52,6 +52,13 @@ public class QMUISkinLayoutInflaterFactory implements LayoutInflater.Factory2 {
mOriginLayoutInflater = originLayoutInflater;
}
public QMUISkinLayoutInflaterFactory cloneForLayoutInflaterIfNeeded(LayoutInflater layoutInflater){
if(mOriginLayoutInflater.getContext() == layoutInflater.getContext()){
return this;
}
return new QMUISkinLayoutInflaterFactory(mActivityWeakReference.get(), layoutInflater);
}
@Override
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
Activity activity = mActivityWeakReference.get();
@@ -64,7 +71,7 @@ public class QMUISkinLayoutInflaterFactory implements LayoutInflater.Factory2 {
try{
if (!name.contains(".")) {
if(sSuccessClassNamePrefixMap.containsKey(name)){
view = LayoutInflater.from(context)
view = mOriginLayoutInflater
.createView(name, sSuccessClassNamePrefixMap.get(name), attrs);
}else{
for (String prefix : sClassPrefixList) {
@@ -76,7 +83,7 @@ public class QMUISkinLayoutInflaterFactory implements LayoutInflater.Factory2 {
}
}
}else{
view = mOriginLayoutInflater.createView(name, null, attrs);
view = mOriginLayoutInflater.cloneInContext(context).createView(name, null, attrs);
}
}catch (ClassNotFoundException ignore){
@@ -18,13 +18,16 @@ package com.qmuiteam.qmui.widget.dialog;
import android.content.Context;
import android.content.res.TypedArray;
import android.view.LayoutInflater;
import android.view.Window;
import com.qmuiteam.qmui.skin.QMUISkinLayoutInflaterFactory;
import com.qmuiteam.qmui.skin.QMUISkinManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatDialog;
import androidx.core.view.LayoutInflaterCompat;
public class QMUIBaseDialog extends AppCompatDialog {
boolean cancelable = true;
@@ -55,6 +58,18 @@ public class QMUIBaseDialog extends AppCompatDialog {
}
}
@NonNull
@Override
public LayoutInflater getLayoutInflater() {
LayoutInflater layoutInflater = super.getLayoutInflater();
LayoutInflater.Factory2 factory2 = layoutInflater.getFactory2();
if(factory2 instanceof QMUISkinLayoutInflaterFactory){
LayoutInflaterCompat.setFactory2(layoutInflater,
((QMUISkinLayoutInflaterFactory)factory2).cloneForLayoutInflaterIfNeeded(layoutInflater));
}
return layoutInflater;
}
@Override
protected void onStop() {
super.onStop();
@@ -22,6 +22,7 @@ import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.text.Layout;
import android.util.Pair;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -34,6 +35,7 @@ import android.widget.LinearLayout;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.qmuiteam.qmui.R;
import com.qmuiteam.qmui.layout.QMUIPriorityLinearLayout;
import com.qmuiteam.qmui.skin.QMUISkinLayoutInflaterFactory;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -44,6 +46,7 @@ import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.view.LayoutInflaterCompat;
import androidx.core.view.ViewCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -75,7 +78,7 @@ public class QMUIBottomSheet extends QMUIBaseDialog {
public QMUIBottomSheet(Context context, int style) {
super(context, style);
ViewGroup container = (ViewGroup) View.inflate(context, R.layout.qmui_bottom_sheet_dialog, null);
ViewGroup container = (ViewGroup) getLayoutInflater().inflate(R.layout.qmui_bottom_sheet_dialog, null);
mRootView = container.findViewById(R.id.bottom_sheet);
mBehavior = new QMUIBottomSheetBehavior<>();
mBehavior.setHideable(cancelable);
@@ -174,7 +174,7 @@ public class QMUITipDialog extends QMUIBaseDialog {
} else if (mCurrentIconType == ICON_TYPE_SUCCESS ||
mCurrentIconType == ICON_TYPE_FAIL ||
mCurrentIconType == ICON_TYPE_INFO) {
ImageView imageView = new AppCompatImageView(mContext);
ImageView imageView = new AppCompatImageView(dialogContext);
builder.clear();
Drawable drawable;
@@ -198,7 +198,7 @@ public class QMUITipDialog extends QMUIBaseDialog {
}
if (mTipWord != null && mTipWord.length() > 0) {
TextView tipView = new QMUISpanTouchFixTextView(mContext);
TextView tipView = new QMUISpanTouchFixTextView(dialogContext);
tipView.setEllipsize(TextUtils.TruncateAt.END);
tipView.setGravity(Gravity.CENTER);
tipView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
@@ -222,6 +222,8 @@ public class QMUITipDialog extends QMUIBaseDialog {
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}
protected LinearLayout.LayoutParams onCreateTextLayoutParams(Context context, @IconType int iconType) {
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
@@ -19,6 +19,7 @@ package com.qmuiteam.qmuidemo.fragment.components;
import android.view.LayoutInflater;
import android.view.View;
import com.qmuiteam.qmui.skin.QMUISkinManager;
import com.qmuiteam.qmui.widget.QMUIEmptyView;
import com.qmuiteam.qmui.widget.QMUITopBarLayout;
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet;
@@ -78,6 +79,7 @@ public class QDEmptyViewFragment extends BaseFragment {
private void showBottomSheetList() {
new QMUIBottomSheet.BottomListSheetBuilder(getActivity())
.setSkinManager(QMUISkinManager.defaultInstance(getContext()))
.addItem(getResources().getString(R.string.emptyView_mode_title_double_text))
.addItem(getResources().getString(R.string.emptyView_mode_title_single_text))
.addItem(getResources().getString(R.string.emptyView_mode_title_loading))