2016-09-17 85 views
0

單擊提交按鈕時,我嘗試顯示一個ProgessBar。數據完成加載後會隱藏。但是,progressBar並未覆蓋整個屏幕。相反,它是由按鈕覆蓋。請參考截圖,它應該更容易理解我的意思。Android如何讓ProgressBar(圓圈)按下按鈕時覆蓋全屏幕?

enter image description here

我想達到什麼是屏幕截圖的底部。

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); 
     } 
    }); 
} 

}

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> 

我嘗試把進度和3 EDITTEXT和按鈕進入相同的Relativelayout,它也不起作用。任何人都可以幫忙

+1

怎麼樣[進度對話框](https://developer.android.com/reference/android/app/ProgressDialog.html)它不完全是你想要的,但它會出現在你的登錄屏幕上。爲了得到你想要的,你必須加載一個新的佈局,只需一個進度條就可以了。 –

+0

@GaryBak我已經考慮過了,但是效果並不好,因爲我想將這個效果應用到整個項目中。如果每次點擊按鈕,它都會顯示進行中的對話框,它看起來很奇怪。 – gosulove

+1

當您更改進度欄的可見性時,將屏幕上的其他組件設置爲View.GONE。 –

回答

2

首先我會分配一個ID,你內心的RelativeLayout:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/container" 
    > 

有了,現在我可以在代碼中RelativeLayout的參考,我將添加一個新的領域:

ProgressBar progressBar; 
RelativeLayout container; 

隨後的onClick我會隱藏自己的容器:

@Override public void onClick(View view) { 

    progressBar.setVisibility(View.VISIBLE); 
    container.setVisibility(View.GONE); ... 

並使其可見當你的任務完成:

@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);... 

希望它有幫助。

但是,我不會建議所有應用程序的用戶體驗。還有其他的機制來通知用戶,請檢查材料的設計準則:

https://material.google.com/components/progress-activity.html

順便說一句,我測試的代碼和它的作品你提到你期待的方式。下面是與代碼中的要點,但是它的更好,如果你使用的片段,因爲我改名了幾個變量:

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

見本GIF結果: https://giphy.com/gifs/uAAYE6j9hy6dy

+0

真棒!它完美地工作 – gosulove