android:更改高度以匹配宽度

时间:2014-02-24 14:54:57

标签: android xml shapes

非常简短:我已经绘制了3个形状,xml跨越设备的整个宽度:

<LinearLayout
    android:id="@+id/linearLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/menu_ebook"
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_weight="1"
        android:background="@color/menuBlue"
        android:clickable="true"
        android:contentDescription="@string/menu_ebook"
        android:soundEffectsEnabled="false" />

    <ImageView
        android:id="@+id/menu_library"
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_marginLeft="1dp"
        android:layout_marginRight="1dp"
        android:layout_weight="1"
        android:background="@color/menuBlue"
        android:clickable="true"
        android:contentDescription="@string/menu_ebook"
        android:soundEffectsEnabled="false" />

    <ImageView
        android:id="@+id/menu_faq"
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_weight="1"
        android:background="@color/menuBlue"
        android:clickable="true"
        android:contentDescription="@string/menu_ebook"
        android:soundEffectsEnabled="false" />

</LinearLayout>

这三种形状应始终在每个设备上都是正方形。这是否可以通过xml,如果不是如何以编程方式执行此操作?

澄清:所有3个ImageView的高度应该等于1个ImageView的宽度。

提前谢谢

2 个答案:

答案 0 :(得分:7)

你不能轻易做到ImageViews广场。唯一的标准方法是设置exact width = height = some_value。如果您知道方形边长,则可以将此值应用于imageViews。

如果你真的想让一些视图成为正方形,你应该创建自定义视图并覆盖onMeasure方法。您可以运行标准测量功能,然后使用setMeasuredDimension设置相等的维度。

E.g。如果它是一个ViewGroup:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // simple implementation, this can be done better )
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int squareSize = getMeasuredWidth(); // square size
    int measureSpec = MeasureSpec.makeMeasureSpec(squareSize, MeasureSpec.EXACTLY);
    super.onMeasure(measureSpec, measureSpec); // we should remeasure childrens to fit square
}

或者喜欢这个,如果它的观点:

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

All Overrides将视图的宽度用作方形大小。

答案 1 :(得分:-1)

在父版面android:weightSum="3"中添加linearLayout1