1

为令人困惑的标题道歉。下图更好地解释了我的问题:在此处输入图像描述

我需要绿色按钮与图像的顶部对齐,但图像在另一个布局内。这可能吗?

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

编辑:

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

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

LinearLayout 将被放置在 ViewPager 内(具有多个视图,所有视图都具有相同位置的图像),这就是为什么我不能按照 preeya 解释的方式进行操作。

4

2 回答 2

1

你可以使用线性布局来显示图像和按钮,如下所示:

   <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>
于 2013-01-13T17:52:59.027 回答
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();

        }
    }); 
}

这种方法最适合我,但如果您遇到问题 -这里有一些替代方案。当您使用 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个步骤更好地解释。希望代码有助于入门!

于 2013-01-14T11:49:04.517 回答