ImageView没有根据Android屏幕进行调整?

时间:2014-10-31 03:49:44

标签: android android-layout

我正在开发Android应用程序。我在其中一个显示两个图像视图和文本视图的活动中使用了Listview。视图应如下所示,在大屏幕上看起来很好,但在小屏幕上占用大部分空间。

Nexus 4屏幕:但如果您看到以下ss中的图像,如果textview更大,图像也不能正确对齐。

enter image description here

在小屏幕图像上获取大部分空间。它看起来很糟糕如下:

enter image description here

我希望它在布局方面保持一致。

以下是我的布局xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:weightSum="100" >

    <com.wallie.imagview.SquareImageView
        android:id="@+id/categoryimage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="10" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="80"
        android:gravity="left"
        android:orientation="vertical"
        android:paddingLeft="10dp" >

        <TextView
            android:id="@+id/categorylistname"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:maxLines="1"
            android:textColor="#000000"
            android:textSize="20sp"
            android:typeface="sans" />

        <TextView
            android:id="@+id/categorylistcount"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#777777"
            android:textSize="16sp"
            android:typeface="sans" />
    </LinearLayout>

    <ImageView
        android:id="@+id/categoryseeall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="10"
        android:src="@drawable/see_all" />

</LinearLayout>

SquareImageView是我的自定义类,包含以下代码:

public class SquareImageView extends ImageView {
    public SquareImageView(Context context) {
        super(context);
    }

    public SquareImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SquareImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    }
}

非常感谢帮助。

进行代码更改后,在较小的屏幕中显示

enter image description here

3 个答案:

答案 0 :(得分:1)

请尝试这种方式,希望这有助于您解决问题。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center">

    <ImageView
        android:id="@+id/categoryimage"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.30"
        android:src="@drawable/ic_launcher"
        android:scaleType="fitXY"/>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.60"
        android:orientation="vertical"
        android:padding="5dp">

        <TextView
            android:id="@+id/categorylistname"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:maxLines="1"
            android:textColor="#ff0000"
            android:textSize="20sp"
            android:typeface="sans" />

        <TextView
            android:id="@+id/categorylistcount"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#777777"
            android:textSize="16sp"
            android:typeface="sans" />
    </LinearLayout>

    <ImageView
        android:id="@+id/categoryseeall"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:layout_weight="0.10"
        android:src="@drawable/ic_launcher" />

</LinearLayout>

答案 1 :(得分:0)

如果你想要android:layout_weight attr布局编辑10:80:10,那么 设置android:layout_width="0dp"

长表达:
layout_weight将使用没有内容宽度的空格 因此,如果容器为800dp且layout_width不是0dp,则首先ImageView正常布局(如imageview 400dp,文本300dp ...)然后再 单独的重量空间。
如果剩余空间为100dp,则将10:80:10分隔为ImageView,然后ImageView获得410dp。不好了!

是的,也许这次,wrap_content <com.wallie.imagview.SquareImageView android:id="@+id/categoryimage" android:layout_width="0dp" android:layout_height="match_parent" android:scaleType="fitCenter" <---- this android:src="@drawable/dummy_avatar" android:layout_weight="10"/> 的{​​{1}}太大而且重量attr没有任何分割到空间。

如果您的ImageView出现错误,请更改ImageView:

{{1}}

答案 2 :(得分:0)

将onMeasure方法更改为

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(heightMeasureSpec, heightMeasureSpec);
}

设置重量时将布局宽度设置为0dp:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:orientation="horizontal"
                  android:weightSum="100">

        <com.wallie.imagview.SquareImageView
            android:id="@+id/categoryimage"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:src="@drawable/dummy_avatar"
            android:layout_weight="10"/>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="80"
            android:gravity="left"
            android:orientation="vertical"
            android:paddingLeft="10dp">

            <TextView
                android:id="@+id/categorylistname"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ellipsize="end"
                android:maxLines="1"
                android:textColor="#000000"
                android:textSize="20sp"
                android:typeface="sans"/>

            <TextView
                android:id="@+id/categorylistcount"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#777777"
                android:textSize="16sp"
                android:typeface="sans"/>
        </LinearLayout>

        <ImageView
            android:id="@+id/categoryseeall"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="10"
            android:src="@drawable/see_all"/>

    </LinearLayout>