如何在基本主题的启动画面上使用ProgressBar?

时间:2019-05-29 11:43:38

标签: c# android xamarin.android

我想用Xamarin.Android应用程序中的ProgressBar替换ProgressDialog(已弃用)。

我有一个启动屏幕,它是一个简单的AppCompat活动:

[Activity(Theme = "@style/MainTheme.Splash", MainLauncher = true, NoHistory = true, Icon = "@drawable/favicon", ScreenOrientation = ScreenOrientation.Portrait)]
public partial class SplashActivity : AppCompatActivity
{
   ProgressDialog m_loginProgress;
}

具有以下主题:

<style name="MainTheme.Splash" parent ="Theme.AppCompat.Light">
    <item name="android:windowBackground">@drawable/splash_screen</item>
    <item name="android:windowNoTitle">true</item>
</style>

活动中的OnCreate:

protected override async void OnCreate(Android.OS.Bundle savedInstanceState)
{
   base.OnCreate(savedInstanceState);

   m_loginProgress = ProgressDialog.Show(this, Resources.GetString(Resource.String.connecting), Resources.GetString(Resource.String.please_wait), true);
   await SomeCallAsync().ContinueWith(() => m_loginProgress.Dismiss());
}

ProgressDialog就像“它正好起作用”。我的意思是:

  1. 对话框自动位于屏幕中心
  2. 它具有标题和文本。
  3. 用户互动被自动禁用(尽管不确定)
  4. Dismiss()将自动在UI线程上运行

现在我正尝试使用ProgressBar。

代码有点棘手:

  1. 初始屏幕的基本布局似乎是ContentFrameLayout类型
  2. 我不知道如何居中ProgressBar,因为我无法将规则添加到ContentFrameLayout.LayoutParams中。我至少需要一个RelativeLayout。
  3. 我不知道如何添加与进度条对齐的简单文本

这是我到目前为止的代码,当然它不起作用。

ContentFrameLayout layout = FindViewById<ContentFrameLayout>(Android.Resource.Id.Content);
var p1 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent);
p1.AddRule(LayoutRules.CenterInParent);
m_loginProgress = new ProgressBar(this, null, Android.Resource.Attribute.ProgressBarStyleLarge);

m_loginProgress.Id = View.GenerateViewId();
m_loginProgress.LayoutParameters = p1;

layout.AddView(m_loginProgress);
var p2 = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent);

TextView tv = new TextView(this);

tv.LayoutParameters = p2;
tv.Text = Resources.GetString(Resource.String.please_wait);

// Disable user interactions
Window.SetFlags(WindowManagerFlags.NotTouchable, WindowManagerFlags.NotTouchable);
// Show the progress bar
m_loginProgress.Visibility = ViewStates.Visible;

我想知道是否卡住了,应该为我的启动屏幕创建一个内容视图。 如果ProgressDialog有效,ProgressBar也应该有效吗?


编辑:天哪,我发现ProgressBar不是对话框!这只是旋转的圆圈。我到处都认为ProgressDialog可以被ProgressBar代替,但是显然这要复杂得多。

解决方案是使用TextView和ProgressBar作为子级来创建水平LinearLayout。然后将此线性布局添加为FrameLayout的子项

1 个答案:

答案 0 :(得分:0)

请尝试下面的链接来设置进度条,并使用color.xml中的colorAccent更改进度条的颜色:-

https://www.javatpoint.com/android-progressbar-example