2014-02-24 28 views
0

非常短的:我畫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> 

這3個形狀應該永遠是每個設備可能在一個正方形。這可能通過XML,如果不是如何以編程方式做到這一點?

澄清:所有3個ImageViews的高度應該等於1 ImageView的寬度。提前

+0

您將圖像的高度設置爲100dp,因此設置寬度也會將ImageView設置爲平方。你想讓它們填充整個屏幕/ parentView的寬度嗎? –

+0

圖像現在填充整個屏幕寬度。在xml中設置寬度只是爲了在我的設備上測試它的寬度,以確保它們佔據屏幕的整個寬度。但是,如果我在另一臺設備(具有非常大的屏幕的東西)上測試它,圖像將變成寬度很大的矩形,但只有100dp的高度。所以100dp應該等於1平方的寬度。 – ZackWhite

回答

-1

THX父佈局linearLayout1添加android:weightSum="3"

7

你不能輕易做ImageViews廣場。唯一的標準方法是設置精確的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); 
} 

所有重寫使用視圖的寬度爲正方形大小。

+0

這是要走的路 - 充氣機立即識別這個解決方案的正確尺寸!忘記所有其他的黑客使用可運行的設置高度/寬度後充氣 – ruptha