为令人困惑的标题道歉。我的问题在下图中更好地解释了:
我需要将绿色按钮与图像顶部对齐,但图像位于另一个布局中。这可能吗?
如果需要,可以在代码中完成; XML不是必需的。我的目标是Android 2.2及更新版本。
编辑:
我目前的实现是简单地设置Button的MarginTop属性,但是当我需要更改LinearLayout内部文本的大小时这是不方便的,我计划根据屏幕大小来做。
我认为可以通过某种方式找到Image的Y坐标来解决,可能是通过添加TextViews的高度,然后将其设置为Button的MarginTop,但这听起来很麻烦。真的没有其他选择吗?
LinearLayout将被放置在一个ViewPager中(有多个视图,所有视图都在同一位置),这就是为什么我不能像preeya解释的那样去做。
答案 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个步骤更好解释。希望代码有助于开始使用!