Android如何让进度条(圆形)在按下按钮时覆盖全屏?

gos*_*ove 4 android android-progressbar

我尝试在单击提交按钮时显示进度栏。当数据加载完成时它将隐藏。但是,进度条没有覆盖全屏。相反,它被按钮覆盖。请参考截图,应该更容易理解我的意思。

在此输入图像描述

我想要实现的是屏幕截图的底部部分。

Main4Activity.java

public class Main4Activity extends AppCompatActivity {

ProgressBar progressBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main4);

    progressBar = (ProgressBar) findViewById(R.id.progressBar);
    progressBar.setVisibility(View.GONE);

    final EditText username=(EditText)findViewById(R.id.username);
    final EditText email=(EditText)findViewById(R.id.email);
    final EditText password=(EditText)findViewById(R.id.password);

    final Button submit=(Button)findViewById(R.id.submit);
    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            progressBar.setVisibility(View.VISIBLE);

            final String get_username=username.getText().toString();
            final String get_email=email.getText().toString();
            final String get_password=password.getText().toString();

            Response.Listener<String> response_listener=new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try{
                        JSONObject jsonObject=new JSONObject(response);
                        boolean result=jsonObject.getBoolean("register_result");
                        progressBar.setVisibility(View.GONE);
                        if(result){

                            AlertDialog.Builder builder=new AlertDialog.Builder(Main4Activity.this);

                            builder.setMessage("Registration Done!")
                                    .setNegativeButton("Back",null)
                                    .create()
                                    .show();

                        }else{

                            AlertDialog.Builder builder=new AlertDialog.Builder(Main4Activity.this);
                            builder.setMessage("User already existed! Please try different Email")
                                    .setNegativeButton("Back",null)
                                    .create()
                                    .show();
                        }

                    }catch(JSONException e){
                        e.printStackTrace();;

                    }
                }
            };
            register_request register_request=new register_request(get_username,get_email,get_password,response_listener);
            RequestQueue queue=Volley.newRequestQueue(Main4Activity.this);
            queue.add(register_request);
        }
    });

    TextView register=(TextView)findViewById(R.id.login);
    register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent=new Intent(Main4Activity.this,login_activity.class);
            Main4Activity.this.startActivity(intent);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

}

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.collection_tutorial.Main4Activity"
android:orientation="vertical">

<ProgressBar
    style="?android:attr/progressBarStyleLarge"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/progressBar"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:indeterminate="false"
    android:layout_gravity="center" />

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/password"
        android:layout_below="@+id/email"
        android:layout_centerHorizontal="true"
        android:hint="Password"
        android:layout_margin="10dp" />

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/username"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:hint="UserName / Restaurant Name"
        android:layout_margin="10dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Existing User? Please Login here->"
        android:id="@+id/login"
        android:layout_below="@+id/submit"
        android:layout_centerHorizontal="true"
        android:layout_margin="10dp" />

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Submit Registration"
        android:id="@+id/submit"
        android:layout_below="@+id/password"
        android:layout_centerHorizontal="true"
        android:layout_margin="10dp" />

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/email"
        android:layout_below="@+id/username"
        android:layout_centerHorizontal="true"
        android:hint="Email "
        android:layout_margin="10dp" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我尝试将进度条和 3 个 Edittext 和按钮放入相同的相对布局中,它也不起作用。有人可以帮忙吗?

mox*_*oxi 5

首先,我将为您的内部relativelayout分配一个id:

<RelativeLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:id="@+id/container"
  >
Run Code Online (Sandbox Code Playgroud)

现在我可以在代码中引用RelativeLayout,我将添加一个新字段:

ProgressBar progressBar;
RelativeLayout container;
Run Code Online (Sandbox Code Playgroud)

然后 onClick 我将隐藏您的容器:

  @Override public void onClick(View view) {

    progressBar.setVisibility(View.VISIBLE);
    container.setVisibility(View.GONE); ...
Run Code Online (Sandbox Code Playgroud)

并在任务完成后使其可见:

 @Override public void onResponse(String response) {
        try {
          JSONObject jsonObject = new JSONObject(response);
          boolean result = jsonObject.getBoolean("register_result");
          progressBar.setVisibility(View.GONE);
          container.setVisibility(View.VISIBLE);...
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。

但是,我不会推荐所有应用程序中的用户体验。还有其他机制来通知用户,请查看材料设计指南(如下)

进度和活动: https: //material.io/archive/guidelines/components/progress-activity.html# 进度指标: https: //material.io/components/progress-indicators

顺便说一句,我测试了代码,它的工作方式正如您提到的那样。这是代码的要点,但是如果您使用代码片段会更好,因为我重命名了几个变量:

https://gist.github.com/moxi/396b073f9df063dc3c943579c93f1be9

查看此 gif 上的结果: https ://giphy.com/gifs/uAAYE6j9hy6dy