将按钮与另一个布局中的图像对齐

时间:2013-01-13 17:14:37

标签: android relativelayout

为令人困惑的标题道歉。我的问题在下图中更好地解释了:enter image description here

我需要将绿色按钮与图像顶部对齐,但图像位于另一个布局中。这可能吗?

如果需要,可以在代码中完成; XML不是必需的。我的目标是Android 2.2及更新版本。

编辑:

我目前的实现是简单地设置Button的MarginTop属性,但是当我需要更改LinearLayout内部文本的大小时这是不方便的,我计划根据屏幕大小来做。

我认为可以通过某种方式找到Image的Y坐标来解决,可能是通过添加TextViews的高度,然后将其设置为Button的MarginTop,但这听起来很麻烦。真的没有其他选择吗?

LinearLayout将被放置在一个ViewPager中(有多个视图,所有视图都在同一位置),这就是为什么我不能像preeya解释的那样去做。

2 个答案:

答案 0 :(得分:1)

你可以使用linearlayout来显示图像&按钮如下:

   <RelativeLayout 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"
   >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
          android:id="@+id/longText"
          android:gravity="center"
        android:text="Some very long text" />
       <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:id="@+id/subtitle"
        android:layout_below="@+id/longText"
        android:text="subtitle" />
        <Button
               android:id="@+id/button1"
               android:layout_width="wrap_content"
                 android:layout_below="@+id/subtitle"   
                android:layout_toLeftOf="@+id/subtitle"
               android:layout_height="wrap_content"
               android:text="button" />


       <LinearLayout 
          android:layout_width="match_parent"
             android:layout_height="match_parent"
              android:layout_toRightOf="@+id/button1"
         android:layout_below="@+id/subtitle"   
         android:orientation="horizontal"
           >


           <ImageView
               android:id="@+id/imageView2"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content"
               android:src="@drawable/ic_launcher" />

       </LinearLayout>

</RelativeLayout>

答案 1 :(得分:1)

它可能但比将按钮包含在同一布局中更复杂。如果你绝对不想这样做,你就不能使用XML(总是更快)。您必须在代码中执行3个步骤:

1。)等到视图开始

private void waitForViewToBeDrawn(){
    // get your layout
    final RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.mainLayout);
    ViewTreeObserver vto = mainLayout.getViewTreeObserver();
    // add a listener
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        public void onGlobalLayout() {
            // you also want to remove that listener
            mainLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            // go on to next step
            getPositionOfImageView();

        }
    }); 
}

这种方法最适合我,但如果你有麻烦 - here是一些替代方案。 当您使用API​​级别11及更高版本时,还有[更多解决方案] [2] ...

2.。获取imageView的顶部位置

    private void getPositionOfImageView(){                
        ImageView imageView = (ImageView) findViewById(R.id.imageView);
        // Top position view relative to parent (Button and ImageView have same parent)
        int topCoordinate = imageView.getTop();
        adjustButton(topCoordinate);
    }

3。)添加或调整按钮以与图像对齐

    public void adjustButton(int topCoordinate){
        Button button = (Button) findViewById(R.id.button);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        params.topMargin = topCoordinate;
        button.setLayoutParams(params);
    }

使用API​​ 11 button.setTop(topCoordinate)

可以更顺畅地完成此步骤

当然你可以缩短所有这些并把它放在一个单一的方法中,只是认为3个步骤更好解释。希望代码有助于开始使用!