2012-03-27 52 views
0

我有兩種佈局,其中一種是主佈局,其中包括我的自定義鍵盤佈局。當我隱藏包含的佈局時,主佈局會變形。Android:在相對佈局中查看和隱藏包含的佈局

我的主佈局xml如下。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/root_rl" 
android:layout_width="fill_parent" 
android:layout_height="match_parent" 
android:background="@drawable/gradient_header" > 

<LinearLayout 
    android:id="@+id/linHeader" 
    style="@style/linHeader" 
    android:layout_height="55dp" 
    android:baselineAligned="false" 
    android:weightSum="1" > 

    <LinearLayout 
     android:id="@+id/linLogo" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight=".60" 
     android:gravity="center_vertical" > 

     <TextView 
      android:id="@+id/tvOutletName" 
      style="@style/linHeader_text" 
      android:text="" > 
     </TextView> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight=".40" 
     android:gravity="right|center_vertical" > 

     <LinearLayout 
      android:id="@+id/btnAdvList" 
      style="@style/btnChart" 
      android:onClick="btnAdvList" > 
     </LinearLayout> 

     <LinearLayout 
      android:id="@+id/btnDownArrow" 
      style="@style/btnDownArrow" 
      android:onClick="btnCollapseExpand" > 
     </LinearLayout> 

     <LinearLayout 
      android:id="@+id/btnRightArrow" 
      style="@style/btnRightArrow" 
      android:onClick="btnDone" > 
     </LinearLayout> 
    </LinearLayout> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/linSearch" 
    style="@style/linSearch" 
    android:layout_below="@+id/linHeader" > 

    <EditText 
     android:id="@+id/etSearchText" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="8dp" 
     android:layout_marginRight="8dp" 
     android:layout_weight="1" 
     android:hint="@string/LblText_Search" /> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/linInfo" 
    style="@style/linInfo" 
    android:layout_below="@+id/linSearch" > 

    <Spinner 
     android:id="@+id/spinner1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" > 
    </Spinner> 

    <Spinner 
     android:id="@+id/spinner2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" > 
    </Spinner> 

    <Spinner 
     android:id="@+id/spinner3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" > 
    </Spinner> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/linTitle" 
    style="@style/lstTitle" 
    android:layout_below="@+id/linInfo" > 

    <TextView 
     android:id="@+id/tvItems" 
     style="@style/lstTitleText" 
     android:layout_width="0dp" 
     android:layout_weight="2" 
     android:text="@string/LblText_Items" > 
    </TextView> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/lsttitle_seperator" > 
    </ImageView> 

    <TextView 
     android:id="@+id/tvOrder" 
     style="@style/lstTitleText" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="@string/AdvList_Order" > 
    </TextView> 

    <ImageView 
     android:id="@+id/imageView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/lsttitle_seperator" > 
    </ImageView> 

    <TextView 
     android:id="@+id/tvTotal" 
     style="@style/lstTitleText_Right" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="@string/AdvList_Total" > 
    </TextView> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/linBody" 
    style="@style/linBody" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:layout_above="@+id/linKeypad" 
    android:layout_below="@+id/linTitle" 
    android:orientation="vertical" 
    android:weightSum="1" > 

    <ExpandableListView 
     android:id="@+id/expandableList" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:cacheColorHint="#00000000" 
     android:childDivider="#fff" 
     android:focusable="true" 
     android:groupIndicator="@android:color/transparent" > 
    </ExpandableListView> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/linKeypad" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/linFooter" > 

    <include 
     android:id="@+id/linearLayoutKeyPad" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     layout="@layout/custom_decimal_keypad" /> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/linFooter" 
    style="@style/linFooter" > 

    <TextView 
     android:id="@+id/tvOrdersTaken" 
     style="@style/linFooter_text" 
     android:layout_weight="1" > 
    </TextView> 

    <TextView 
     android:id="@+id/tvTotalValue" 
     style="@style/linFooter_text" 
     android:layout_weight="1" 
     android:gravity="right" > 
    </TextView> 
</LinearLayout> 

</RelativeLayout> 

和所包含的鍵盤佈局如下

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/linearLayoutKeyPad" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:background="#efefef" 
android:orientation="vertical" 
> 

<TableLayout 
    android:id="@+id/tableLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal" > 

    <TableRow 
     android:id="@+id/tableRow1" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:background="#999" 
     android:gravity="center_horizontal" > 

     <Button 
      android:id="@+id/btnKeyPad0" 
      android:layout_width="40dip" 
      android:onClick="btnKeyPad0" 
      android:text="0" > 
     </Button> 

     <Button 
      android:id="@+id/btnKeyPad1" 
      android:layout_width="40dip" 
      android:onClick="btnKeyPad1" 
      android:text="1" > 
     </Button> 

     <Button 
      android:id="@+id/btnKeyPad2" 
      android:layout_width="40dip" 
      android:onClick="btnKeyPad2" 
      android:text="2" > 
     </Button> 

     <Button 
      android:id="@+id/btnKeyPad3" 
      android:layout_width="40dip" 
      android:onClick="btnKeyPad3" 
      android:text="3" > 
     </Button> 

     <Button 
      android:id="@+id/btnKeyPad4" 
      android:layout_width="40dip" 
      android:onClick="btnKeyPad4" 
      android:text="4" > 
     </Button> 

     <ImageButton 
      android:id="@+id/btnKeyPadBackSpace" 
      android:layout_width="40dip" 
      android:onClick="btnKeyPadBackSpace" 
      android:src="@drawable/backspace" > 
     </ImageButton> 
    </TableRow> 
</TableLayout> 

<TableLayout 
    android:id="@+id/tableLayout2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal" > 

    <TableRow 
     android:id="@+id/tableRow2" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:background="#999" 
     android:gravity="center_horizontal" > 

     <Button 
      android:id="@+id/btnKeyPad5" 
      android:layout_width="40dip" 
      android:onClick="btnKeyPad5" 
      android:text="5" > 
     </Button> 

     <Button 
      android:id="@+id/btnKeyPad6" 
      android:layout_width="40dip" 
      android:onClick="btnKeyPad6" 
      android:text="6" > 
     </Button> 

     <Button 
      android:id="@+id/btnKeyPad7" 
      android:layout_width="40dip" 
      android:onClick="btnKeyPad7" 
      android:text="7" > 
     </Button> 

     <Button 
      android:id="@+id/btnKeyPad8" 
      android:layout_width="40dip" 
      android:onClick="btnKeyPad8" 
      android:text="8" > 
     </Button> 

     <Button 
      android:id="@+id/btnKeyPad9" 
      android:layout_width="40dip" 
      android:onClick="btnKeyPad9" 
      android:text="9" > 
     </Button> 

     <Button 
      android:id="@+id/btnKeyPadDecimal" 
      android:layout_width="40dip" 
      android:onClick="btnKeyPadDecimal" 
      android:text="." > 
     </Button> 


     <Button 
      android:id="@+id/btnKeyPadOk" 
      android:layout_width="43dip" 
      android:onClick="btnKeyPadOk" 
      android:text="@string/LblText_Ok" > 
     </Button> 
    </TableRow> 
</TableLayout> 

</LinearLayout> 

的擴張列表視圖排佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/linOrderTakingList" 
style="@style/lstRow" > 

<TextView 
    android:id="@+id/tvItemDesc" 
    style="@style/lstRowText" 
    android:layout_width="0dp" 
    android:layout_weight="2" > 
</TextView> 

<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/lsttitle_seperator" > 
</ImageView> 

<TextView 
    android:id="@+id/tvOrderQty" 
    style="@style/lstRowText" 
    android:layout_width="0dp" 
    android:layout_weight="1" > 
</TextView> 

<ImageView 
    android:id="@+id/imageView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/lsttitle_seperator" > 
</ImageView> 

<TextView 
    android:id="@+id/tvOrderValue" 
    style="@style/lstRowText_Right" 
    android:layout_width="0dp" 
    android:layout_weight="1" > 
</TextView> 

</LinearLayout> 

的擴張列表視圖子佈局是:

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/tableLayout1" 
style="@style/lstRow_Expanded_1" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" > 

<TableRow 
    android:id="@+id/tableRow1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 

    <Button 
     android:id="@+id/btnUnit" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="2" 
     android:text="@string/LblText_Unit" > 
    </Button> 

    <Button 
     android:id="@+id/btnCopy" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="2" 
     android:text="@string/MenuBtnText_Copy" > 
    </Button> 

    <TextView 
     android:id="@+id/tvQty" 
     style="@style/txtLable" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:gravity="right" 
     android:text="@string/AdvList_Qty" > 
    </TextView> 

    <TextView 
     android:id="@+id/tvQtyValue" 
     style="@android:style/Widget.EditText" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="2" > 

     <requestFocus /> 
    </TextView> 
</TableRow> 

<TableRow 
    android:id="@+id/tableRow2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <TextView 
     android:id="@+id/tvAvg" 
     style="@style/txtLable" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:text="@string/LblText_Avg" > 
    </TextView> 

    <TextView 
     android:id="@+id/tvLag" 
     style="@style/txtLable" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:text="@string/LblText_Lag" > 
    </TextView> 

    <TextView 
     android:id="@+id/tvUnitPr" 
     style="@style/txtLable" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:text="@string/LblText_Unit_Pr" > 
    </TextView> 

    <TextView 
     android:id="@+id/tvMrp" 
     style="@style/txtLable" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:text="@string/LblText_MRP" > 
    </TextView> 

    <TextView 
     android:id="@+id/tvSo" 
     style="@style/txtLable" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:text="@string/LblText_SO" > 
    </TextView> 
</TableRow> 

<TableRow 
    android:id="@+id/tableRow3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 

    <TextView 
     android:id="@+id/tvAvgValue" 
     style="@android:style/Widget.EditText" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 

    <TextView 
     android:id="@+id/tvLagValue" 
     style="@android:style/Widget.EditText" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 

    <TextView 
     android:id="@+id/tvUnitPrValue" 
     style="@android:style/Widget.EditText" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 

    <TextView 
     android:id="@+id/tvMrpValue" 
     style="@android:style/Widget.EditText" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 

    <TextView 
     android:id="@+id/tvSoValue" 
     style="@android:style/Widget.EditText" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 
</TableRow> 

</TableLayout> 

image 1

和扭曲的佈局,使鍵盤可見後截圖:佈局查看鍵盤之前的截圖

image 2

我也試圖刷新子視圖,無效該視圖以編程方式修改相對佈局。請幫我解決一些問題。如果我不把這個列表放在鍵盤上面,它不會扭曲,但是列表視圖隱藏在沒有用的鍵盤後面。我基本上需要使用鍵盤在列表視圖可見時將其向上推,當它消失時恢復正常。

+0

您可以簡單地在主視圖/佈局/活動中使用「相對佈局」,而不是使用如此多嵌套的「線性佈局」。具有諷刺意味的是,你的問題標題是** Android:以相對佈局查看和隱藏包含的佈局**,但這裏沒有顯示任何「相對佈局」代碼。請重新編輯。 – Ghost 2012-03-27 06:00:55

+0

當您隱藏佈局並檢查時,使用kepad.setVisibility(View.GONE)。 – user936414 2012-03-27 06:04:10

+0

對不起格式化,現在編輯了佈局。關於能見度,當我設置GONE和VISIBLE時,由於佈局被調整,我得到了失真。如果我只是簡單地使用INVISIBLE和VISIBLE,那麼就不會出現失真,但我不想讓emtpty空間被阻擋。我試圖將寬度和高度設置爲0,即使發生了相同的失真。 – Mal 2012-03-27 07:12:12

回答

1

由於失真發生在擴展視圖上,所以問題可能在於它的佈局。

我建議你在你的孩子佈局中擺脫TableLayout:它有時是不可預知的,沒有它就可能實現相同的結果(例如使用嵌套的LinearLayout's)。