Android center view in FrameLayout doesn't work

前端 未结 5 1729
梦谈多话
梦谈多话 2021-02-04 22:47

I have a FrameLayout in which I have 2 controls: - a custom view which draws a image and some text on it - a textview with a text

I want to center both in the FrameLayo

相关标签:
5条回答
  • 2021-02-04 23:27

    We can align a view in center of the FrameLayout by setting the layout_gravity of the child view.

    In XML:

    android:layout_gravity="center"
    

    In Java code:

    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.gravity = Gravity.CENTER;
    

    Note: use FrameLayout.LayoutParams not the others existing LayoutParams

    0 讨论(0)
  • 2021-02-04 23:37

    Just follow this order

    You can center any number of child in a FrameLayout.

    <FrameLayout
        >
        <child1
            ....
            android:layout_gravity="center"
            .....
            />
        <Child2
            ....
            android:layout_gravity="center"
            />
    </FrameLayout>
    

    So the key is

    adding android:layout_gravity="center"in the child views.

    For example:

    I centered a CustomView and a TextView on a FrameLayout like this

    Code:

    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
        <com.airbnb.lottie.LottieAnimationView
            android:layout_width="180dp"
            android:layout_height="180dp"
            android:layout_gravity="center"
            app:lottie_fileName="red_scan.json"
            app:lottie_autoPlay="true"
            app:lottie_loop="true" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:textColor="#ffffff"
            android:textSize="10dp"
            android:textStyle="bold"
            android:padding="10dp"
            android:text="Networks Available: 1\n click to see all"
            android:gravity="center" />
    </FrameLayout>
    

    Result:

    0 讨论(0)
  • 2021-02-04 23:40

    Set 'center_horizontal' and 'center_vertical' or just 'center' of the layout_gravity attribute of the widget

        <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MovieActivity"
        android:id="@+id/mainContainerMovie"
        >
    
    
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#3a3f51b5"
           />
    
        <ProgressBar
            android:id="@+id/movieprogressbar"
            style="?android:attr/progressBarStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|center_horizontal" />
    </FrameLayout>
    
    0 讨论(0)
  • 2021-02-04 23:41

    To center a view in Framelayout, there are some available tricks. The simplest one I used for my Webview and Progressbar(very similar to your two object layout), I just added android:layout_gravity="center"

    Here is complete XML in case if someone else needs the same thing to do

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout 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=".WebviewPDFActivity"
        android:layout_gravity="center"
        >
        <WebView
            android:id="@+id/webView1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
    
            />
        <ProgressBar
            android:id="@+id/progress_circular"
            android:layout_width="250dp"
            android:layout_height="250dp"
            android:visibility="visible"
            android:layout_gravity="center"
            />
    
    
    </FrameLayout>
    

    Here is my output

    0 讨论(0)
  • 2021-02-04 23:46

    I'd suggest a RelativeLayout instead of a FrameLayout.

    Assuming that you want to have the TextView always below the ImageView I'd use following layout.

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/imageview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerInParent="true"
            android:src="@drawable/icon"
            android:visibility="visible"/>
        <TextView
            android:id="@+id/textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_below="@id/imageview"
            android:gravity="center"
            android:text="@string/hello"/>
    </RelativeLayout>
    

    Note that if you set the visibility of an element to gone then the space that element would consume is gone whereas when you use invisible instead the space it'd consume will be preserved.

    If you want to have the TextView on top of the ImageView then simply leave out the android:layout_alignParentTop or set it to false and on the TextView leave out the android:layout_below="@id/imageview" attribute. Like this.

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/imageview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="false"
            android:layout_centerInParent="true"
            android:src="@drawable/icon"
            android:visibility="visible"/>
        <TextView
            android:id="@+id/textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:gravity="center"
            android:text="@string/hello"/>
    </RelativeLayout>
    

    I hope this is what you were looking for.

    0 讨论(0)
提交回复
热议问题