我有一个RelativeLayout
项目,其中包含一个图片及其右侧(从上到下)5 ListView
和一个按钮:
TextViews
图像的宽度是固定的,其高度是未知的,所以我想要的是图像的高度等于其他5个视图的高度(如上例所示)。
我尝试在 ------- textView
| | textView
| | textView
| | textView
| | textView
------- button
xml中这样做,但我似乎无法做到这一点。
我得到的最好的是在适配器的list_item
函数中设置视图的高度,但我正在为列表中的每个项目执行此操作,这看起来很浪费。
有没有办法在xml文件中设置它?
我可以在xml中将高度设置为“0dp”,并且只在代码中设置一次(而不是getView
中的每个项目)?
由于
答案 0 :(得分:0)
设置RelativeLayout的高度也是wrap_content应该做的工作,相同的图像高度
答案 1 :(得分:0)
这是一段对我有用的代码:
<强> MainActivity.java:强>
package com.example.simon.test;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class MainActivity extends Activity {
private final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final RelativeLayout rLayout = (RelativeLayout) findViewById(R.id.relativeLayout);
final ImageView imageView = (ImageView) findViewById(R.id.imageView);
// Delay the image, so textViews are created and ready for measure
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
imageView.setMaxHeight(rLayout.getMeasuredHeight());
imageView.setImageResource(R.drawable.image);
}
}, 100);
}
}
<强>布局/ activity_main.xml中:强>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeLayout"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".MainActivity">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:adjustViewBounds="true"
android:contentDescription="hello"/>
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello there"
android:layout_toRightOf="@id/imageView"/>
<TextView
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello there"
android:layout_below="@+id/tv1"
android:layout_toRightOf="@id/imageView"/>
<TextView
android:id="@+id/tv3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello there"
android:layout_below="@+id/tv2"
android:layout_toRightOf="@id/imageView"/>
<TextView
android:id="@+id/tv4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello there"
android:layout_below="@+id/tv3"
android:layout_toRightOf="@id/imageView"/>
<TextView
android:id="@+id/tv5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello there"
android:layout_below="@+id/tv4"
android:layout_toRightOf="@id/imageView"/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello there"
android:layout_below="@+id/tv5"
android:layout_toRightOf="@id/imageView"/>
</RelativeLayout>
请注意缩放图片的scaleCrop
和adjustViewBounds
,以便设置maxHeight。
另请注意,您需要花一些时间来创建RelativeLayout
的其他元素,以便对其进行衡量。
答案 2 :(得分:0)
由于在第二个活动中需要膨胀的项目,我决定在第一个活动中膨胀布局并将其高度设置为该活动的公共静态成员,以供第二个活动读取。 / p>
我最终等待布局完成充气,保存高度,并在显示之前将其可见性设置为GONE。
public static int listItemLayoutHeight;
...
protected void onCreate(Bundle savedInstanceState) {
final RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.dummyListItemLayout);
relativeLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
relativeLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
listItemLayoutHeight = relativeLayout.getHeight();
relativeLayout.setVisibility(View.GONE);
}
});
...
}
BTW,另一种选择可能是将此布局放在FrameLayout中,并用主布局覆盖它。
感谢您的帮助:)