Android 当我从不同的活动中显示DialogFragment时,为什么我的DialogFragment样式是错误的?
使用带有自定义视图的DialogFragment时,我面临一种奇怪的行为 当我从一个活动的另一个对话框中显示对话框时,一切正常,但当我从另一个片段(和不同的活动)中显示对话框时,样式混乱,我看不到SearchView、RecyclerView项装饰器以及其中文本视图的文本 对话框的代码:Android 当我从不同的活动中显示DialogFragment时,为什么我的DialogFragment样式是错误的?,android,android-fragments,android-dialogfragment,android-styles,Android,Android Fragments,Android Dialogfragment,Android Styles,使用带有自定义视图的DialogFragment时,我面临一种奇怪的行为 当我从一个活动的另一个对话框中显示对话框时,一切正常,但当我从另一个片段(和不同的活动)中显示对话框时,样式混乱,我看不到SearchView、RecyclerView项装饰器以及其中文本视图的文本 对话框的代码: public class MyDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCr
public class MyDialogFragment extends DialogFragment
{
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.My_Dialog);
LayoutInflater inflater = LayoutInflater.from(getContext());
View view = inflater.inflate(R.layout.fragment_my, (ViewGroup) getActivity().findViewById(android.R.id.content), false);
builder.setView(view);
final SearchView searchView = (SearchView) view.findViewById(R.id.searchView);
final RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
HorizontalDividerDecoration.Builder dividerBuilder = new HorizontalDividerDecoration.Builder(getContext());
recyclerView.addItemDecoration(dividerBuilder.build());
// ...
builder.setNegativeButton(android.R.string.cancel, null);
final AlertDialog dialog = builder.create();
return dialog;
}
}
fragment_my.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">
<android.support.v7.widget.SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.v7.widget.SearchView>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/searchView"
android:scrollbarStyle="insideOverlay"
app:layoutManager="LinearLayoutManager"
tools:listitem="@layout/my_item"/>
</RelativeLayout>
ParentDialogFragment显示在ParentListFragment中
public class ParentListFragment extends Fragment
{
// ...
private void showSourceDialog(SourceEntity entity)
{
ParentDialogFragment dialog = ParentDialogFragment.newInstance(entity, new ParentDialogFragment.Callback()
{
// ...
});
dialog.show(getFragmentManager(), "parent_dialog");
}
}
ParentListFragment是ParentListWizardActivity的内容,它只加载片段并具有以下样式:
<!-- AndroidManifest.xml -->
<activity android:name=".activity.ParentListWizardActivity"
android:label="@string/title_activity_parent_list_wizard"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<!-- styles.xml -->
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primaryDark</item>
<item name="colorAccent">@color/secondary</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
MyWizardFragment由具有以下样式的活动WizardActivity注入:
<activity
android:name=".activity.WizardActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Intro">
</activity>
<style name="Theme.Intro" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
</style>
我不明白这是否与风格、片段管理器或任何其他东西有关
谢谢,我终于解决了我的问题
问题不在于AlertDialog,而在于自定义视图的样式,它显然不是从对话框继承的,而是您指定的
我替换了:
LayoutInflater inflater = LayoutInflater.from(getContext());
与:
像这样的回答:
现在一切都好了
<!-- AndroidManifest.xml -->
<activity android:name=".activity.ParentListWizardActivity"
android:label="@string/title_activity_parent_list_wizard"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<!-- styles.xml -->
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primaryDark</item>
<item name="colorAccent">@color/secondary</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
public class MyWizardFragment extends ParallaxSlideFragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_my_wizard, container, false);
actionButton = (Button) rootView.findViewById(R.id.actionButton);
actionButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
MyDialogFragment dialog = MyDialogFragment.newInstance(preferenceManager.getDefaultCode(), new MyDialogFragment.Listener()
{
@Override
public void select(MyBind item)
{
// ...
}
});
dialog.show(getFragmentManager(), "my_dialog");
}
});
return rootView;
}
}
<activity
android:name=".activity.WizardActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Intro">
</activity>
<style name="Theme.Intro" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
</style>
LayoutInflater inflater = LayoutInflater.from(getContext());
LayoutInflater inflater = LayoutInflater.from(new ContextThemeWrapper(getContext(), R.style.My_Dialog));