2012-08-07 113 views
3

我正在嘗試爲Android應用創建2D遊戲引擎。我遵循this tutorial,這對於創建全屏顯示效果很好,但我不想那樣做。我想讓視圖佔用屏幕的前2/3(或其他),並用標準Android小部件(按鈕,文本輸入等)填充下半部分。我無法得到這個工作。我能得到的最好的是一個空白的白色屏幕。我嘗試了許多排列,包括使用外部LinerLayout,然後將自定義SurfaceView嵌入到嵌套的RelativeLayout中,並將Android小部件放置在嵌套的LinearLayout中,但它不起作用。更改Android自定義SurfaceView的大小

舉例來說,這將產生一個白色的屏幕,當我覺得它應該是50%SurfaceView,50%爲一個TextView:

activity_main.xml中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:baselineAligned="false" > 

<RelativeLayout 
    android:layout_width="0dip" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mapContainer" 
    > 
</RelativeLayout> 

<LinearLayout 
    android:layout_width="0dip" 
    android:layout_weight="1" 
    android:layout_height="0dp" 
    xmlns:android="http://schemas.android.com/apk/res/android" > 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:textColor="@color/white" 
     android:text="@string/test_str" /> 
</LinearLayout> 

</LinearLayout> 

MainActivity.java:

package com.removed.for.privacy; 

import com.removed.for.privacy; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.widget.LinearLayout; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

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

     RelativeLayout mapContainer = (RelativeLayout) findViewById(R.id.mapContainer); 

     JSMapView mapView = new JSMapView(this); 
     mapContainer.addView(mapView); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 

任何想法?

回答

7

通過大量的使用Google和半相關的問題來找出它。以下是我如何在縱向模式(100%寬度)和2/3寬度(100%高度)中填充2/3高度的示例。

在自定義表面視圖,重寫onLayout方法:

@Override 
public void onLayout(boolean changed, int left, int top, int right, int bottom) { 
    if (changed) { 
     (this).layout(0, 0, viewWidth, viewHeight); 
    } 
} 

在類的構造函數,添加以下代碼:

public YourCustomSurfaceView(Context context) { 
    super(context); 


    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    int rotation = display.getRotation(); 

    // If vertical, we fill 2/3 the height and all the width. If horizontal, 
    // fill the entire height and 2/3 the width 
    if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) { 
     screenWidth = display.getWidth(); 
     screenHeight = display.getHeight(); 
     viewHeight = 2 * (screenHeight/3); 
     viewWidth = screenWidth; 
    } else { 
     screenWidth = display.getWidth(); 
     screenHeight = display.getHeight(); 
     viewWidth = 2 * (screenWidth/3); 
     viewHeight = screenHeight; 
    } 
    // Enter rest of code here 
} 
-1

要更改SurfaceView的定製的高度和寬度用「android.view .ViewGroup.LayoutParams「 對於ViewGroup的不同子類,有一些LayoutParams的子類。例如,AbsoluteLayout有它自己的LayoutParams的子類,它添加了X和Y值。通過這個,你可以改變X和Y SurfaceView

變化的代碼surfaceview高度寬度是在這裏: http://agalaxycode.blogspot.in/2014/12/change-surfaceview-height-width.html

相關問題