我有一个imageview。我想让它的宽度为fill_parent。我想让它的高等于宽度。例如:
<ImageView
android:layout_width="fill_parent"
android:layout_height="whatever the width ends up being" />
在布局文件中,不需要创建自己的视图类,这样的事情可能吗?
谢谢
我有一个imageview。我想让它的宽度为fill_parent。我想让它的高等于宽度。例如:
<ImageView
android:layout_width="fill_parent"
android:layout_height="whatever the width ends up being" />
在布局文件中,不需要创建自己的视图类,这样的事情可能吗?
谢谢
当前回答
我不认为有任何方法可以在XML布局文件中这样做,我不认为android:scaleType属性会像你想要的那样工作。 唯一的方法是通过编程来实现。您可以将宽度设置为fill_parent,并且可以将屏幕宽度作为视图的高度,也可以使用View. getwidth()方法。
其他回答
这可以使用LayoutParams来动态设置视图高度,一旦你在运行时知道了视图宽度。你需要使用一个可运行线程,以便在运行时获得视图的宽度,否则你将试图在你知道视图的宽度之前设置高度,因为布局还没有绘制。
下面是我解决问题的例子:
final FrameLayout mFrame = (FrameLayout) findViewById(R.id.frame_id);
mFrame.post(new Runnable() {
@Override
public void run() {
RelativeLayout.LayoutParams mParams;
mParams = (RelativeLayout.LayoutParams) mFrame.getLayoutParams();
mParams.height = mFrame.getWidth();
mFrame.setLayoutParams(mParams);
mFrame.postInvalidate();
}
});
LayoutParams必须是你的视图所在的父视图的类型。我的FrameLayout在xml文件中的RelativeLayout中。
mFrame.postInvalidate();
调用强制视图重绘,而在一个单独的线程比UI线程
我不认为有任何方法可以在XML布局文件中这样做,我不认为android:scaleType属性会像你想要的那样工作。 唯一的方法是通过编程来实现。您可以将宽度设置为fill_parent,并且可以将屏幕宽度作为视图的高度,也可以使用View. getwidth()方法。
我确实喜欢这个-
layout.setMinimumHeight(layout.getWidth());
为了将ImageView设置为屏幕的一半,你需要为ImageView添加以下内容:
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:scaleType="fitXY"
android:adjustViewBounds="true"/>
然后将高度设置为宽度,需要在代码中完成。在你的GridView适配器的getView方法中,设置ImageView的高度等于它的测量宽度:
mImageView.getLayoutParams().height = mImageView.getMeasuredWidth();
也许这能回答你的问题:
<ImageView
android:id="@+id/cover_image"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:adjustViewBounds="true" />
对于这种特定的情况,您可以忽略scaleType属性。