2017-07-05 112 views
0

我有一個簡單的線性佈局,並希望將屏幕分成兩個大小相等的部分。適合父級佈局的大小

在上面的那個,我想要放一個SurfaceView,它的大小和它的父母一樣大,即屏幕的一半。不幸的是,它總是需要全部屏幕或沒有(取決於配置)。 這是爲什麼,我該如何改變它?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:weightSum="2" 
    android:orientation="vertical"> 

    <LinearLayout android:id="@+id/layoutUpperDaw" 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:background="#192832"> 

     <com.example.MySurvfaceView 
      android:id="@+id/id_mySurfaceView" 
      android:layout_width="match_parent" 

      android:layout_height="0pt" 
      android:layout_weight="1" 

      OR 

      android:layout_height="match_parent" 

      > 

     </com.example.MySurvfaceView> 

    </LinearLayout> 

    <LinearLayout android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:background="#193222"> 

     ... 
    </LinearLayout> 
</LinearLayout> 

回答

1

當您提供weight時,您必須將高度或重量設置爲0dp,如下所示。

<LinearLayout android:id="@+id/layoutUpperDaw" 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="#192832"> 

<com.example.MySurvfaceView 
      android:id="@+id/id_mySurfaceView" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      > 

更新:回答以上是關於重用法正確,確保無論是HIGHT或寬度是在您使用重量所有地方0dp。

你並不需要嵌套的LinearLayout。以下應該工作。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 


     <com.example.MySurvfaceView 
      android:id="@+id/id_mySurfaceView" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      > 

     </com.example.MySurvfaceView> 



    <LinearLayout android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="#193222"> 


    </LinearLayout> 
</LinearLayout> 
+0

不適用於我。那麼'MySurfaceView'不可見。 – user1225905

+0

@ user1225905查看已更新的答案 – Sharj

+0

好的,沒有第一個嵌套內部'LinearLayout'的方法可行,但我不確定是否有LinearLayout背後的邏輯。當我在'MySurvfaceView'周圍添加'weight = 1'和'height = 0'的'LinearLayout'時,它不起作用。 – user1225905

0

編程:

  1. 尋父佈局。

    GridLayout的GridLayout的=(GridLayout的)findViewById(R.id.gridLayout);`

  2. 獲取測量的高度和父的寬度。

    int height = gridLayout.measuredHeight();

    int width = gridLayout.measuredWidth();

3.Calculate子視圖的高度和width.For例如兩個子每次取在父高度的50%但考慮父的全寬度:

int childHeight = height/2; 
int childWidth = width; 

4.Get的instanceof取決於的LayoutParams父類型。

GridLayout.LayoutParams params = new GridLayout.LayoutParams(); 

5.設置佈局參數的高度和寬度。

params.width = childWidth; 
params.height = childHeight; 

6.Create子視圖,設置佈局PARAMS。

ImageView imageview = new ImageView(); 
imageview.setLayoutParams(params); 

7.添加子查看父項。

gridLayout.addView(ImageView);