2014-12-19 85 views
0

所以我已經閱讀了很多關於這裏的問題以及嘗試了很多東西來試圖讓這個工作。我要麼誤解我讀過的所有例子,要麼正在看錯誤的東西。平鋪一個相對的佈局/圖像視圖

我想要做的是在包含圖像視圖的相對佈局內設置相對佈局。我希望能夠使相對佈局匹配imageview的大小(我希望根據特定的屏幕大小縮放)以保持常量的方形大小。這個視圖也包含按鈕。當我運行下面的代碼時,我得到了一個用於圖像視圖的正方形,但按鈕顯示在屏幕的頂部。所以在我看來,imageview正確地縮小到一個正方形,但佈局本身仍然匹配整個屏幕大小。我已成立了一個XML文件,如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/main_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

<RelativeLayout 
    android:id="@+id/layout_two" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 

    > 

    <ImageView 
    android:id="@+id/image_view" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:src="@drawable/bg" /> 

    <Button 
     android:id="@+id/button_one" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/button_one" /> 

    .... 

    </RelativeLayout> 


</RelativeLayout> 

的Java代碼如下:

public class MainActivity extends ActionBarActivity { 

RelativeLayout layoutTwo, mainLayout; 

Button buttonOne, buttonTwo, buttonThree, buttonFour, buttonFive; 
Button buttonSix, buttonSeven, buttonEight, buttonNine; 

ImageView scalingBackground; 

int screenWidth, screenHeight, finalSquare; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mainLayout = (RelativeLayout) findViewById(R.id.main_layout); 
    layoutTwo = (RelativeLayout) findViewById(R.id.layout_two); 
    scalingBackground = (ImageView) findViewById(R.id.image_view); 

    initializeButtons(); 

    squareBackground(); 

} 


private void squareBackground() { 

    screenWidth = mainLayout.getLayoutParams().width; 

    scalingBackground.getLayoutParams().height = screenWidth; 
    scalingBackground.getLayoutParams().width = screenWidth; 
    layoutTwo.getLayoutParams().height = screenWidth; 
    layoutTwo.getLayoutParams().width = screenWidth; 

} 

不太清楚什麼怎麼回事,我會在正確的方向欣賞踢。謝謝

+0

圖像bg是否總是正方形? – 2014-12-19 03:51:45

+0

是的,我總是希望bg是一個正方形,但我希望它根據屏幕大小更改大小 – user3803709 2014-12-19 13:11:38

回答

0

您可以使用高度和寬度相同的自定義圖像視圖。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/main_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

<RelativeLayout 
    android:id="@+id/layout_two" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 

    > 

    <com.packagename.SquareImageView 
    android:id="@+id/image_view" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:src="@drawable/bg" /> 

    <Button 
     android:id="@+id/button_one" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/button_one" /> 

    .... 

    </RelativeLayout> 


</RelativeLayout> 

爲自定義圖像視圖創建一個類。

public class SquareImageView extends ImageView { 
    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

    int width = getMeasuredWidth(); 
    setMeasuredDimension(width, width); 
    } 
}