我有一个Android应用程序的设计,它有大表图像(见下面的A,B屏幕) 这意味着我已经将A和B作为具有我需要的所有尺寸的图像(mdpi,hdpi,xhdpi):
我的问题是在A里面我需要放一个scrollview或一个项目列表,但我不希望它们比A图像大。 我目前的布局如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background">
<RelativeLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
// Some elements here
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
// Some elements here
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/A_background"/>
<ScrollView
android:id="@+id/scrollview"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/scrollview_container"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"/>
</ScrollView>
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/B_background"/>
</RelativeLayout>
</LinearLayout>
当我的滚动视图有很多项目时,A正在扩展,我需要A与之前的高度相同,因为图像变得模糊。
答案 0 :(得分:1)
在这些情况下,我通常最终编写一个自定义视图,使用MeasureSpec.UNSPECIFIED测量一个视图(在本例中为ImageView),另一个使用MeasureSpec.EXACTLY或MeasureSpec.AT_MOST测量另一个视图(在您的情况下为ScrollView)根据你的需要)。 一些事情:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
// measure view 1
View view1 = findViewById(R.id.view1);
view1.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(height, MeasureSpec.UNSPECIFIED));
int view1Height = view1.getMeasuredHeight();
// check measured height against MeasureSpec and adapt accordingly
int heightMsrSpec = MeasureSpec.getMode(heightMeasureSpec);
switch (heightMsrSpec) {
case MeasureSpec.AT_MOST: view1Height = Math.min(height, view1Height); break;
case MeasureSpec.EXACTLY: view1Height = height; break;
case MeasureSpec.UNSPECIFIED: break;
}
// measure view2
View view2 = findViewById(R.id.view2);
view2.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(view1Height, MeasureSpec.EXACTLY));
int view2Height = view2.getMeasuredHeight();
setMeasuredDimension(width, Math.min(view1Height, view2Height) + getPaddingTop() + getPaddingBottom());
}
答案 1 :(得分:0)
井A是图像的背景你确定这是正确的xml文件你不能在imageview里面添加scrollview而且它不在里面
你可以做的是创建不同的res / layout文件夹,比如
res/layout-small
res/layout-large
res/layout-xlarge
res/layout-sw600
res/layout-sw720
将您的布局文件放入其中,并给予A&amp; amp; B根据您拥有的图像。
这样它就不会拉伸,并且在每个屏幕尺寸上看起来都会更好。