Централизация ProgressBar программно в Android

Я пытаюсь центрировать ProgressBar программно, используя следующее:

 ViewGroup layout = (ViewGroup) findViewById(android.R.id.content).getRootView(); progressBar = newProgressBar(SignInActivity.this,null,android.R.attr.progressBarStyleLarge); progressBar.setIndeterminate(true); progressBar.setVisibility(View.VISIBLE); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100,100); params.addRule(RelativeLayout.CENTER_IN_PARENT); layout.addView(progressBar,params); 

Настройка размера, похоже, работает нормально, но ProgressBar не центрируется в существующем макете (определяется xml с относительным расположением). Здесь что-то явно не так?

XML выглядит следующим образом:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".test" android:typeface="monospace"> </RelativeLayout> 

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

Благодарю.

Solutions Collecting From Web of "Централизация ProgressBar программно в Android"

Если вы хотите сделать это программно, вы можете сделать это, как показано ниже:

 RelativeLayout layout = new RelativeLayout(this); progressBar = new ProgressBar(SignInActivity.this,null,android.R.attr.progressBarStyleLarge); progressBar.setIndeterminate(true); progressBar.setVisibility(View.VISIBLE); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100,100); params.addRule(RelativeLayout.CENTER_IN_PARENT); layout.addView(progressBar,params); setContentView(layout); 

Я написал класс, основанный на ответе @ DharmarajRupakheti:

 public class ProgressBarHandler { private ProgressBar mProgressBar; private Context mContext; public ProgressBarHandler(Context context) { mContext = context; ViewGroup layout = (ViewGroup) ((Activity) context).findViewById(android.R.id.content).getRootView(); mProgressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleLarge); mProgressBar.setIndeterminate(true); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); RelativeLayout rl = new RelativeLayout(context); rl.setGravity(Gravity.CENTER); rl.addView(mProgressBar); layout.addView(rl, params); hide(); } public void show() { mProgressBar.setVisibility(View.VISIBLE); } public void hide() { mProgressBar.setVisibility(View.INVISIBLE); } } 

Применение:

 mProgressBarHandler = new ProgressBarHandler(this); // In onCreate mProgressBarHandler.show(); // To show the progress bar mProgressBarHandler.hide(); // To hide the progress bar 

Используйте свое кодирование в этом стиле, это дает желаемый результат.

 ViewGroup layout = (ViewGroup) findViewById(android.R.id.content).getRootView(); progressBar = new ProgressBar(thisActivity,null,android.R.attr.progressBarStyleLarge); progressBar.setIndeterminate(true); progressBar.setVisibility(View.VISIBLE); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT); RelativeLayout rl = new RelativeLayout(thisActivity); rl.setGravity(Gravity.CENTER); rl.addView(progressBar); layout.addView(rl,params); 

Вам не нужен XML. Вы можете создать представление по коду:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); ProgressBar pb = new ProgressBar(this, null, android.R.attr.progressBarStyleLarge); ViewGroup.LayoutParams params = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); pb.setLayoutParams(params); layout.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL); layout.addView(pb); setContentView(layout); }