簡體   English   中英

RelativeLayout Gravity沒有應用?

[英]RelativeLayout Gravity not applied?

我有一個具有以下布局的活動:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/testlayoutOverlays"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/testlayoutMain"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <RelativeLayout
        android:id="@+id/testlayout_bottom"
        android:layout_width="fill_parent"
        android:layout_height="62dp"
        android:background="#122334" >

        <ImageView
            android:id="@+id/testbtnBlock"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_alignParentLeft="true"
            android:layout_gravity="left|center_vertical"
            android:contentDescription="Test1"
            android:padding="@dimen/padding_medium"
            android:src="@drawable/btnblock" />

        <TextView
            android:id="@+id/testtxtZoomPan"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/testbtnX"
            android:layout_toRightOf="@+id/testbtnBlock"
            android:gravity="center_horizontal"
            android:text="@string/txtZoomPan"
            android:textColor="#FFFFFF" />

        <ImageView
            android:id="@+id/testbtnX"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_alignParentRight="true"
            android:layout_gravity="right|center_vertical"
            android:contentDescription="Test2"
            android:padding="@dimen/padding_medium"
            android:src="@drawable/btnx" />
    </RelativeLayout>

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/testlayoutPuzzleInfo"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:orientation="horizontal" >

        <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/testlayoutChronoErrors"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <Chronometer
                android:id="@+id/testchronometer"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="0"
                android:format="@string/chronometer_initial_format"
                android:gravity="center" />

            <LinearLayout
                xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:id="@+id/testlayoutErrors"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal" >

                <ImageView
                    android:layout_width="1px"
                    android:layout_height="20dp" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

</RelativeLayout>

和以下代碼:

package minmaxdev.android.picrossanywhere;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.support.v4.app.NavUtils;

public class TestActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);

    // Capture our button from layout
    ImageView button = (ImageView) findViewById(R.id.testbtnBlock);
    // Register the onClick listener with the implementation above
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            RelativeLayout rv = (RelativeLayout) findViewById(R.id.testlayoutOverlays);
            rv.setGravity(Gravity.CENTER);

            Button btnRetry = new Button(TestActivity.this);
            btnRetry.setId(R.id.btnRetry);
            btnRetry.setBackgroundResource(R.drawable.btnselector);
            RelativeLayout.LayoutParams prmBtn = new RelativeLayout.LayoutParams(Util.DPsToPixels(200, getResources()), Util.DPsToPixels(40, getResources()));
            prmBtn.setMargins(0, 120, 0, 0);
            btnRetry.setLayoutParams(prmBtn);
            // btnRetry.setGravity(Gravity.CENTER_HORIZONTAL);
            btnRetry.setText("Retry");
            btnRetry.setOnClickListener(new ImageView.OnClickListener() {
                public void onClick(View v) {
                    Intent intent = getIntent();
                    finish();
                    startActivity(intent);
                }
            });
            rv.addView(btnRetry);
        }

    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_test, menu);
    return true;
}
}

我想知道:為什么我的動態創建的Button(名為btnRetry )沒有出現在屏幕的中心,因為我將父RelativeLayout引力設置為rv.setGravity(Gravity.CENTER)中心?

非常感謝您的寶貴時間

答案很簡單。 Gravity適用於使用該內容的視圖的內容layout_gravity。 來源基本上是: https//stackoverflow.com/a/3482757/180538

嘗試將LayoutParamsaddRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);一起使用addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);

回答你的重力理解:你說得對,但我想文檔中的這些信息很重要:

請注意,由於RelativeLayout認為每個子項相對於彼此的定位很重要,因此設置重力會影響所有子項在父項中作為單個單元的定位。 兒童相對定位后會發生這種情況。

我目前無法測試你的布局,但我的猜測是應用重力的時間不會產生預期的結果。

我個人只會在LinearLayouts中使用gravity,而在RelativeLayouts中使用centerInParent

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM