Kush Patel
Kush Patel

Reputation: 1251

Display ProgressBar in middle of Screen in android

Here is my layout for Activity. And I want to display android.widget.ProgressBar in the middle of the screen dynamically.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/myCoordinator"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/appBarLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <include layout="@layout/toolbar" />

        </android.support.design.widget.AppBarLayout>


        <FrameLayout
            android:id="@+id/frameContainer"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

        <RelativeLayout
            android:id="@+id/rlSearchToolContainer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:background="@color/colorPrimary"
            android:gravity="bottom"
            android:layout_gravity="bottom"
            android:visibility="gone">

            <LinearLayout
                android:id="@+id/llSearchComponentContainer"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom"
                android:background="@color/colorPrimary"
                android:layout_toLeftOf="@+id/btnDone"
                android:gravity="bottom"
                android:orientation="horizontal"></LinearLayout>
            <Button
                android:id="@+id/btnDone"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:text="Done"/>
        </RelativeLayout>
    </android.support.design.widget.CoordinatorLayout>


    <FrameLayout
        android:id="@+id/frameLeftSlide"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="start" />

</android.support.v4.widget.DrawerLayout>

Now In that FrameLayout (id = frameContainer) I replace a Fragment that is BaseFragment.(fragment_base.xml)

MainActivity.java

class MainActivity extends AppCompatActivity{

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

        BaseFragment mFileListFragment = new BaseFragment();
        FragmentManager manager = getSupportFragmentManager();
         FragmentTransaction transaction = manager.beginTransaction();
        transaction.replace(R.id.frameContainer, mFileListFragment);
        transaction.commit();

        }
}

fragment_base.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/frameContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"/>

</LinearLayout>

BaseFragment.java

public class BaseFragment extends Fragment{
private View mView;

     @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        if (mView == null) {
            mView = inflater.inflate(R.layout.fragment_phone_file_base, null);
            setLayoutViews(mView);

        }
        return mView;
    }

       public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        FileListFragment mFileListFragment = new FileListFragment();
        FragmentManager manager = getChildFragmentManager();
         FragmentTransaction transaction = manager.beginTransaction();
        transaction.replace(R.id.frameContainer, mFileListFragment);
        transaction.commit();


        }

}

Now In FrameLayout(id = frameContainer) of that BaseFragment I open child fragment that is FileListFragment. (fragment_file_list.xml)

fragment_file_list.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/rvFileList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="visible"/>

</RelativeLayout>

FileListFragment.java

public class FileListFragment extends Fragment{
    private View mView;

         @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            if (mView == null) {
                mView = inflater.inflate(R.layout.fragment_file_list, null);
                setLayoutViews(mView);

            }
            return mView;
        }

            @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);

            // Here there is a server call which retrieves File Data from server. When I send server request I start progressBar and after response I hide progressBar programatically.

            ProgressBar mProgressBar = new ProgressBar(activity);
            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
                    FrameLayout.LayoutParams.WRAP_CONTENT);
            params.gravity = Gravity.CENTER;
            mProgressBar.setLayoutParams(params);
            mProgressBar.getIndeterminateDrawable().setColorFilter(activity.getResources().getColor(R.color.colorPrimary), PorterDuff.Mode.MULTIPLY);

            FrameLayout listFrame = getParentFragment().getView().findViewById(R.id.frameContainer);
            if(listFrame != null) {
                listFrame.addView(mProgressBar);
            }

            }

    }

But it doesn't show progressBar in middle of the screen. It displays below of middle of screen like image attached below.

enter image description here

Upvotes: 0

Views: 1886

Answers (3)

Nidhi Pandya
Nidhi Pandya

Reputation: 198

Try it using Relativelayout, use Relativelayout as container of progressbar and use centerinparent attribute to center the progressbar in the middle of screen :

RelativeLayout layout = new RelativeLayout(this);
progressBar = new ProgressBar(this);
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);

Upvotes: 0

IntelliJ Amiya
IntelliJ Amiya

Reputation: 75798

You can try with android:layout_gravity

Standard gravity constant that a child supplies to its parent.

You can align a view in center of the Framelayout by setting the layout_gravity of the child view .

android:layout_gravity="center"

Place the object in the center of its container in both the vertical and horizontal axis, not changing its size .

Upvotes: 1

SHIVANI GARG
SHIVANI GARG

Reputation: 89

This is because you adding progressbar in center of framelayout, try this

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/myCoordinator"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ProgressBar
        android:id="@+id/progressBar2"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <include layout="@layout/toolbar" />

    </android.support.design.widget.AppBarLayout>


    <FrameLayout
        android:id="@+id/frameContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <RelativeLayout
        android:id="@+id/rlSearchToolContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@color/colorPrimary"
        android:gravity="bottom"
        android:layout_gravity="bottom"
        android:visibility="gone">

        <LinearLayout
            android:id="@+id/llSearchComponentContainer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:background="@color/colorPrimary"
            android:layout_toLeftOf="@+id/btnDone"
            android:gravity="bottom"
            android:orientation="horizontal"></LinearLayout>
        <Button
            android:id="@+id/btnDone"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="Done"/>
    </RelativeLayout>
</android.support.design.widget.CoordinatorLayout>


<FrameLayout
    android:id="@+id/frameLeftSlide"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="start" />

Upvotes: 0

Related Questions