Существует ли DisplayActionSheet в Xamarin.Android?

Я новичок в мобильной разработке. Я пытаюсь написать приложение как в Xamarin iOS, так и в Xamarin Android. После поиска в течение нескольких дней я продолжаю обнаруживать, что DisplayActionSheet является частью Xamarin Forms, но я не могу найти эквивалент в Xamarin Android. DisplayActionSheet не существует? Есть ли что-то еще, что я могу использовать, чтобы получить тот же внешний вид и эффект?

Благодарю вас!

Обновление: вот мой прогресс... Я пытаюсь создать диалоговое окно, похожее на изображение здесь: https://www.google.com/search?q=displayactionsheet+image&rlz=1C1GGRV_enUS752US754&tbm=isch&source=iu&ictx=1&fir=EWVc1vOm1JJrhM%253A%252CYaPWhxv5zFphhM%252C_&usg=__v_-JK4lHAj8k50h5iknuPLPc8PM%3D&sa=X&ved=0ahUKEwjbz66zzZHaAhUKY6wKHXyxB64Q9QEIKTAA#imgrc=EWVc1vOm1JJrhM: So far, I can get the image to slide up and the кнопки, чтобы реагировать правильно, но одна вещь, которую мне не хватает, — это поведение, когда пользователь щелкает за пределами диалогового окна. Я хочу, чтобы его уволили, но ничего не происходит. Спасибо за помощь!

Вот мой код:

//MyActivity.cs

public class MyActivity : Activity
{
    FrameLayout _fragmentContainer;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.MyView);
        var listView = FindViewById<ListView>(Resource.Id.myView);
        listView.Adapter = new EmailSettingsAdapter(this);
        TextView action = FindViewById<TextView>(Resource.Id.actionText);

        _fragmentContainer = FindViewById<FrameLayout>(Resource.Id.frameContainer);

        action.Click += click;
    }

    private void click(object sender, EventArgs e)
    {
        FragmentTransaction transaction =     FragmentManager.BeginTransaction();
        MonthlyStmtFragment fragment = new MonthlyStmtFragment();
        transaction.Add(_fragmentContainer.Id, fragment, "Fragment");
        transaction.Commit();
        _fragmentContainer.TranslationY = 1800;
        _fragmentContainer.Animate().TranslationYBy(-600).SetDuration(500);
    }
}

//MyFragment.cs
public class MyFragment : DialogFragment
{
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        View view = inflater.Inflate(Resource.Layout.FragmentLayout, container, false);

        TextView text1 = view.FindViewById<TextView>(Resource.Id.text1);
        text1.Click += delegate {
            Dismiss();
            Toast.MakeText(Activity, "selected", ToastLength.Short).Show();
        };

        TextView cancel = view.FindViewById<TextView>(Resource.Id.cancelText);
        cancel.Click += delegate {
            Dismiss();
            Toast.MakeText(Activity, "cancel", ToastLength.Short).Show();
        };

        return view;
    }

//FragmentLayout.axml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent">
<TextView
    android:text="Title Here"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/titleView1"
    android:gravity="center_horizontal"
    android:background="#fff5f5f5"
    android:textSize="8dp"
    android:textColor="#ff9e9e9e"
    android:padding="10dp" />
<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:id="@+id/view1"
    android:background="#ffbdbdbd" />
<TextView
    android:text="Text 1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/text1"
    android:background="#fff5f5f5"
    android:gravity="center_horizontal"
    android:textColor="#ff1e88e5"
    android:padding="10dp"
    android:textSize="10dp" />
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/cancelText"
    android:background="#fff5f5f5"
    android:textSize="10dp"
    android:text="Cancel"
    android:textColor="#ff1e88e5"
    android:padding="10dp"
    android:gravity="center_horizontal"
    android:layout_marginTop="10dp" />
</LinearLayout>

person Monica    schedule 26.03.2018    source источник
comment
Вы ищете что-то подобное?   -  person FreakyAli    schedule 26.03.2018
comment
Больше похоже на это docs.microsoft.com /en-us/xamarin/xamarin-forms/app-fundamentals/. Первое изображение в разделе «Руководство пользователей по задачам»   -  person Monica    schedule 26.03.2018
comment
Я ответил, посмотрите, если это то, что вы ищете, пожалуйста, отметьте как правильный ответ, чтобы другие тоже могли его найти.   -  person FreakyAli    schedule 26.03.2018
comment
Я обновил свой ответ и хочу знать, хотите ли вы отображать диалоговое окно таким же образом.   -  person FreakyAli    schedule 30.03.2018


Ответы (1)


То, что вы ищете, это класс AlertDialog в Android:

Подкласс Dialog, который может отображать одну, две или три кнопки.

Ниже приведено подробное руководство, с которым вы можете работать, чтобы достичь этого:

https://www.c-sharpcorner.com/blogs/how-to-show-alert-dialog-in-android-using-xamarin

http://stacktips.com/tutorials/xamarin/alertdialog-and-dialogfragment-example-in-xamarin-android

Для настройки этого вы можете использовать следующее:

http://www.appliedcodelog.com/2015/11/custom-alertdialog-example-in.html

Удачи, счастливого кодирования!

 class DialogFragmentExitPopUp : DialogFragment
{
    public static Activity mActivity;
    public DialogFragmentExitPopUp NewInstance(Activity activity,Bundle bundle)
    {
        var fragment = new DialogFragmentExitPopUp();
        fragment.Arguments = bundle;
        DialogFragmentExitPopUp.mActivity = activity;
        return fragment;
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle SavedInstanceState)
    {
        View view = inflater.Inflate(Resource.Layout.ExitPopUp, container, false);
        Button ButtonYes = view.FindViewById<Button>(Resource.Id.ExitYes);
        Button ButtonNo = view.FindViewById<Button>(Resource.Id.ExitNo);
        ButtonYes.SetTextColor(Color.ParseColor("#2466A3"));
        ButtonNo.SetTextColor(Color.ParseColor("#2466A3"));
        ButtonYes.SetBackgroundColor(Color.White);
        ButtonNo.SetBackgroundColor(Color.White);
        Dialog.Window.RequestFeature(WindowFeatures.NoTitle);
        Dialog.SetCanceledOnTouchOutside(false);

        return view;
    }

}

Вы не вызываете конструктор, который вызывает проблему, инициализируя его, как я показал, как вы это сделаете.

И это код для вызова фактического диалога:

 FragmentTransaction fragmentTransaction = FragmentManager.BeginTransaction();
        Fragment fragmentPrev = FragmentManager.FindFragmentByTag("dialog");
        if (fragmentPrev != null)
            fragmentTransaction.Remove(fragmentPrev);

        fragmentTransaction.AddToBackStack(null);
        //create and show the dialog
        DialogFragmentExitPopUp dialogFragment = new DialogFragmentExitPopUp().NewInstance(this, null);
        dialogFragment.Show(fragmentTransaction, "dialog");
person FreakyAli    schedule 26.03.2018
comment
Спасибо @G.hakim. Я пытаюсь заставить диалоговое окно появляться в нижней части экрана, надеюсь, я смогу использовать ваши предложения, чтобы заставить его работать. Я посмотрю его утром. - person Monica; 26.03.2018
comment
Конечно, если вам нужна помощь, вы можете спросить здесь - person FreakyAli; 26.03.2018
comment
Я смог получить желаемый вид, используя FrameLayout в качестве контейнера фрагментов (в моей деятельности). Затем создал DialogFragment, который добавляется в контейнер. Я использую анимацию, чтобы сдвинуть контейнер фрагментов снизу вверх. Моя единственная проблема сейчас в том, что я не могу понять, как это сделать Dialog.SetCanceledOnTouchOutside(true), когда у меня есть эта строка в моем коде fragment.cs, я получаю исключение, говорящее, что Dialog is нулевой. - person Monica; 28.03.2018
comment
Любые другие идеи? @Г.хаким - person Monica; 28.03.2018
comment
Хорошо, если у вас есть teamviewer, я могу вам помочь! @Моника, если нет, вы можете обновить свой код здесь, и я могу проверить его. - person FreakyAli; 29.03.2018
comment
Начну с другого вопроса. - person Monica; 29.03.2018
comment
Было бы лучше, если бы вы просто обновили свою реализацию здесь, начиная новый поток, нет смысла - person FreakyAli; 29.03.2018
comment
комментарии не позволяют форматировать код, по крайней мере, я не могу заставить его работать, все смешивается. - person Monica; 29.03.2018
comment
Не обновляйте свой вопрос, там должна быть опция, если вы внимательно посмотрите на проверку редактирования. - person FreakyAli; 29.03.2018
comment
Я посмотрел на ваш код, но из-за этого фрагмент всплывает (я пробовал), а не скользит вверх, как я собираюсь сделать. Чтобы заставить его скользить вверх, мне нужно использовать контейнер, который затем заставляет меня не использовать dialogFragment.Show. Есть ли другой способ оживить диалог? Я исследовал в течение недели, пока не нашел ничего, что работает. @Г.хаким - person Monica; 30.03.2018
comment
Спасибо @G.hakim, ваша ссылка указала мне правильное направление, хотя это был Android, а не Xamarin.Android. Я использовал DialogFragment.Show, а затем добавил анимацию окна, переопределив OnActivityCreated. Наконец-то он работает так, как я хотел. - person Monica; 30.03.2018
comment
Что ж, тогда я рад, что это работает так, как вы хотели, чтобы оно работало, удачи вам в будущем. @Monica Также вы должны отредактировать мой ответ и разместить то, что вы сделали, для других пользователей, которые ищут что-то подобное. - person FreakyAli; 31.03.2018