kirktoon1882
kirktoon1882

Reputation: 1231

In Android get center of Relative Layout on API 10

I'm trying to find the center coordinates of a RelativeLayout that for the moment, is empty. I need to find the center before I can put anything into the Relative Layout. The Relative Layout is not the whole screen, so I can't use metrics to find the screen dimensions. Since my minimum API is 10, I can't use rLayout.getX() or rLayout.getY(). So what I've tried is:

int xScreenInt = gBoard_RL.getWidth()/2;
int yScreenInt = gBoard_RL.getHeight()/2;

int xInt = gBoard_RL.getLeft() + xScreenInt;
int yInt = gBoard_RL.getTop() + yScreenInt;

and all I get is 0,0. Does anyone have an any ideas how I can get this done? Here's my layout and the Activity so far:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/gb1_root_RL"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
tools:context=".GB1" >

<RelativeLayout
    android:id="@+id/gb1_topInfo_RL"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:background="@drawable/blu_grade_bg"
    android:orientation="vertical"
    android:paddingBottom="15dp" >

    <TextView
        android:id="@+id/gb1_scValue_TV"
        style="@style/mainScoreValueStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/gb1_score_TV"
        android:layout_marginLeft="10dp" />

    <TextView
        android:id="@+id/gb1_timeValue_TV"
        style="@style/mainTimeValueStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/gb1_time_TV"
        android:layout_marginRight="10dp" />
</RelativeLayout>

<RelativeLayout
    android:id="@+id/gb1_gf_RL"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/gb1_topInfo_RL"
    android:padding="10dp" >
</RelativeLayout>

the Relative Layout I need to find the center of is: android:id="@+id/gb1_gf_RL"

public class GB1 extends Activity {
TextView GScore_TV;

RelativeLayout gBoard_RL;
int xScreenInt, yScreenInt, xInt, yInt;
String xStr, yStr;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    overridePendingTransition(R.anim.cutin, R.anim.cutout);
    setContentView(R.layout.gb_layout);
    GScore_TV = (TextView) findViewById(R.id.G1_scoreValue_TV);
    gBoard_RL = (RelativeLayout) findViewById(R.id.gb1_gf_RL);


    gBoard_RL.setBackgroundColor(Color.MAGENTA);

    xScreenInt = gBoard_RL.getWidth()/2;
    yScreenInt = gBoard_RL.getHeight()/2;

    xInt = gBoard_RL.getLeft() + xScreenInt;
    yInt = gBoard_RL.getTop() + yScreenInt;

    xStr = String.valueOf(xInt);
    yStr = String.valueOf(yInt);
    GScore_TV.setText(xStr + ", " + yStr);
}

}

Upvotes: 0

Views: 301

Answers (2)

Squeazer
Squeazer

Reputation: 1254

Try putting your code in a onGlobalLayout listener:

myRelativelayout.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        this.layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        //Your code here
     }
});

EDIT: Since, as @xorgate pointed out, the layout isnt drawn yet in the onCreate method. The onGlobalLayout method will be called when the layout is drawn and calculations such as yours should be done in there.

Upvotes: 1

xorgate
xorgate

Reputation: 2264

onCreate is called before a layout pass is done. All Views will have no size yet.

Try setting a global layout listener, and do the positioning code there.

Upvotes: 0

Related Questions