Ich habe die DialogFragment
folgendeAktivität hinter DialogFragment akzeptiert noch berührt
public class DetailItemFragment extends AppCompatDialogFragment {
@BindView(R.id.task_detail_name)
AppCompatTextView taskDetailNameText;
@BindView(R.id.task_detail_description)
AppCompatTextView taskDetailDescriptionText;
@BindView(R.id.task_detail_priority)
AppCompatTextView taskDetailPriorityText;
@BindView(R.id.toolbar)
Toolbar toolbar;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCanceledOnTouchOutside(true); //doesn't work
dialog.setCancelable(true); //doesn't work
return dialog;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_detail_view, container, false);
ButterKnife.bind(this, view);
//Get the Json back and parse it as a Task
Bundle bundle = getArguments();
final String taskAsJson = bundle.getString("task");
Task task = new Gson().fromJson(taskAsJson, Task.class);
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.close);
}
setHasOptionsMenu(false);
taskDetailNameText.setText(task.getName());
taskDetailDescriptionText.setText(task.getDescription());
taskDetailPriorityText.setText(task.getPriority().toString());
return view;
}
ich das Fragment Transaktionen wie so
//Put the clicked item into a Bundle for the next fragment to consume
DialogFragment detailItemFragment = new DetailItemFragment();
Bundle args = new Bundle();
args.putString("task", new Gson().toJson(mTaskListAdapter.getItem(position)));
detailItemFragment.setArguments(args);
getActivity().getSupportFragmentManager().beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.add(R.id.task_detail_fragment_container, detailItemFragment)
.addToBackStack(null)
.commit();
Ich versuche folgendes zu erreichen: * Auf einer Tablette/Großbildschirm, dies wird als Dialog-Popup angezeigt * Auf einem Telefon wird es einen Vollbild-Dialog anzeigen (ziemlich versucht zu replizieren, wie Google Kalender Ereigniseröffnungsdetails behandelt)
Dies ist, was mein xlarge/activity_main.xml
sieht aus wie
<?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"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/task_detail_fragment_container"
android:layout_width="800dp"
android:layout_height="400dp"
android:layout_centerInParent="true"
android:elevation="16dp" />
<android.support.design.widget.AppBarLayout
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
style="@style/ToolbarStyle"
android:background="@color/colorPrimary"
app:title="@string/app_name"
app:titleTextColor="@color/white" />
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:id="@+id/task_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/header" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab_add"
android:layout_width="@dimen/fab_normal_size"
android:layout_height="@dimen/fab_normal_size"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_marginBottom="@dimen/fab_padding"
android:layout_marginEnd="@dimen/fab_padding"
android:src="@drawable/add_black"
app:elevation="@dimen/fab_elevation"
app:fabSize="normal"
app:layout_anchorGravity="bottom|right|end"
app:pressedTranslationZ="@dimen/fab_pressed_elevation" />
</RelativeLayout>
Sie werde ich eine FrameLayout
bemerken, die auf dem Bildschirm zum Laden der DetailItemFragment
in zentriert ist. Vielleicht ist das nicht der richtige Weg - aber ich möchte es aufgreifen, falls sich herausstellt, dass es das Problem ist.
Dies ist, was die fragment_detail_view.xml
Layout wie die Activity
im Hintergrund immer noch kann ich mit interagieren Berührungen auf einer Tablette, (dh
Wenn die DialogFragment
offen sieht
<android.support.design.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/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/task_detail_background"
android:clickable="true"
android:elevation="8dp"
tools:context="io.havoc.todo.view.fragments.DetailItemFragment">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="@dimen/toolbar_tall_height"
android:background="?attr/colorPrimary">
<android.support.v7.widget.AppCompatTextView
android:id="@+id/task_detail_name"
style="@style/TextAppearance.Widget.AppCompat.Toolbar.Title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start|bottom"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:gravity="start|bottom"
android:padding="8dp"
android:text="Task detail"
android:textColor="@color/white"
android:textSize="24sp" />
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginStart="86dp"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v7.widget.AppCompatTextView
style="@style/TextAppearance.AppCompat.Body2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_margin"
android:text="@string/hint_task_description"
android:textColor="@color/colorAccent" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/task_detail_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Description text"
android:textColor="@color/text_primary"
android:textSize="18sp" />
<android.support.v7.widget.AppCompatTextView
style="@style/TextAppearance.AppCompat.Body2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_margin"
android:text="@string/hint_task_priority"
android:textColor="@color/colorAccent" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/task_detail_priority"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Priority"
android:textColor="@color/text_primary"
android:textSize="18sp" />
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
Die Frage akzeptiert die Activity
, als ob der Dialog nicht einmal vorhanden wäre); Darüber hinaus habe ich keine Ahnung, wie man die DialogFragment
zu entlassen, wenn man außerhalb davon berührt. Ich habe folgendes versucht:
dialog.setCanceledOnTouchOutside(true);
(imonCreateDialog()
Methode)dialog.setCancelable(true);
(imonCreateDialog()
Methode)dialog.setCanceledOnTouchOutside(false);
(imonCreateDialog()
Methode)getDialog().setCanceledOnTouchOutside(true); setCancelable(true);
(führt zuNullPointerExceptions
- durchgeführt inonCreateView()
für dieDialogFragment
)
Ich habe all die anderen Fragen durchgelesen, die ich finden konnte und nichts hat für mich funktioniert - also mache ich eindeutig etwas falsch.
Ich schätze jede und alle Hilfe.
ich schon haben. Die Berührungen gehen nicht durch den Dialog - aber ich kann Elemente außerhalb des Dialogs berühren. – Nxt3
Ja. Ich bin mir nicht sicher, worauf Sie hinauswollen. Ich aktualisierte das op, um den Code für mein 'fragment_detail_view.xml' einzuschließen, und es ist bereits' anklickbar' – Nxt3
redigierte die Antwort – C0D3LIC1OU5