首页 > 解决方案 > 用户登录时以编程方式显示 ProgressBar

问题描述

我在 Android 中以编程方式在 Centering ProgressBar 中找到了这个类,它将以编程方式显示进度条,问题是它是一个 Xamarin Android Studio 示例,我正在尝试将其转换为 Visual Studio 2017 的 Xamarin。这是我已成功转换的代码我似乎找不到 Xamarin VS 2017 等效的那些行。

using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;

namespace OML_Android
{
    class ProgressBarHandler
    {
        private ProgressBar mProgressBar;
        private Context mContext;

        public ProgressBarHandler(Context context)
        {
            mContext = context;

            ViewGroup layout = (ViewGroup)((Activity)context).FindViewById(Android.Resource.Id.Content).RootView;

            mProgressBar = new ProgressBar(context, null, Android.Resource.Attribute.ProgressBarStyleLarge);

            // there is no setIndeterminate method for progressbar
            mProgressBar.setIndeterminate(true);

            // I cannot find an equivilent for LayoutParams
            RelativeLayout.LayoutParams params = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MatchParent, RelativeLayout.LayoutParams.MatchParent);

            RelativeLayout rl = new RelativeLayout(context);

            // No equivalent for Gravity.CENTER
            rl.SetGravity(Gravity.CENTER);
            rl.AddView(mProgressBar);

            layout.AddView(rl, params);

            hide();
        }

        public void show()
        {
            mProgressBar.Visibility = Android.Views.ViewStates.Visible;
        }

        public void hide()
        {
            mProgressBar.Visibility = Android.Views.ViewStates.Invisible;
        }
    }
}

一旦我将其转换并工作,我希望它覆盖我的登录视图,直到视图完成处理。

标签: xamarin.androidvisual-studio-2017

解决方案


我帮你把 Java 代码转换成 C#,有运行的 GIF。

在此处输入图像描述

有代码。

    class ProgressBarHandler
{
    private ProgressBar mProgressBar;
    private Context mContext;

    public ProgressBarHandler(Context context)
    {
        mContext = context;

        ViewGroup layout = (ViewGroup)((Activity)context).FindViewById(Android.Resource.Id.Content).RootView;

        mProgressBar = new ProgressBar(context, null, Android.Resource.Attribute.ProgressBarStyleLarge);

        // there is no setIndeterminate method for progressbar
      //  mProgressBar.SetIndeterminate(true);
        mProgressBar.Indeterminate = true;
        // I cannot find an equivilent for LayoutParams
        RelativeLayout.LayoutParams layoutparams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MatchParent, RelativeLayout.LayoutParams.MatchParent);

        RelativeLayout rl = new RelativeLayout(context);

        // No equivalent for Gravity.CENTER
        rl.SetGravity(GravityFlags.Center   );
        rl.AddView(mProgressBar);

        layout.AddView(rl, layoutparams);

        hide();
    }

    public void show()
    {
        mProgressBar.Visibility = Android.Views.ViewStates.Visible;
    }

    public void hide()
    {
        mProgressBar.Visibility = Android.Views.ViewStates.Invisible;
    }
}

您可以直接使用它,就像 Activity 中的以下代码一样。

var progress= new ProgressBarHandler(this);
progress.show();

推荐阅读