0

タイトルが中央に配置され、キャンセル ボタンが右に配置された相対レイアウトがあります。タイトルがキャンセルボタンと重なっているかどうかを確認したいのですが、重なっている場合は、重なっている量に基づいてタイトルを左にシフトします。

これは私のxmlがどのように見えるかです:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/com.app.mobile"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="@dimen/actionBarHeight"
    android:layout_alignParentTop="true"
    android:id="@+id/actionbar"
    android:background="#F8F8F8">

    <com.app.mobile.subview.CustomButton android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:id="@+id/cancel_btn"
        android:text="Cancel"
        app:typeface="fonts/HelveticaNeue"
        app:customStyle="Regular"
        android:textSize="@dimen/titleTextSize"
        android:textColor="#378BFB"
        android:background="@android:color/transparent"
        android:layout_centerVertical="true"
        android:layout_marginRight="10dp"
        android:layout_marginLeft="10dp"
        android:visibility="gone"/>

    <com.app.mobile.subview.CustomButton android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:id="@+id/share_btn"
        app:typeface="fonts/HelveticaNeue"
        app:customStyle="Regular"
        android:textColor="#378BFB"
        android:visibility="gone"/>

    <com.app.mobile.subview.CustomTextView
        android:id="@+id/title"
        android:gravity="center"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:typeface="fonts/HelveticaNeue"
        app:customStyle="Medium"
        android:textSize="@dimen/titleTextSize"
        android:textColor="#000"
        android:text="Test Title"/>
</RelativeLayout>

そして、私は以下のような位置を取得しようとしています

    float xPos =  screenTitle.getX();
    float titleEnd = xPos + screenTitle.getWidth();
    xPos = cancelButton.getX();

    if(titleEnd > xPos){
        Log.e("Title","Title overlaps cancel button");
    }

cancelButton.getX() は 0.0 を返していますが、タイトルは正しい値を返しています。

1.小さなタイトルでのレイアウトはこんな感じ

http://i.stack.imgur.com/3TFdg.jpg

4

1 に答える 1

1

getX() の値を取得しようとしている Java コードの場所によって異なります。

Android がレイアウト全体の描画をまだ完了していない場合、cancelButton は描画されておらず、X は 0.0 です。

onCreate() または onCreateView() で値を取得するのは、post と runnable を使用すると非常に簡単であることがわかりました

    cancelButton.post( new Runnable() {
    @Override
    public void run() {
            float x = cancelButton.getX();

        }
    });

これにより、値を使用する前にボタンが完全に描画されていることが保証されます

于 2013-10-22T19:45:47.613 に答える