我有一個ViewSwitcher佈局,用作TableLayout中的單元格。TableLayout中的Android ViewSwitcher單元奇蹟般地移動和隱藏
ViewSwitcher包含兩個視圖,我在第一個孩子上實現了一個OnClickListener,以便在點擊上切換視圖。
問題是,當單擊TableRow中的一個單元格時,切換視圖,但是同一行上的所有其他單元格都被神奇地調整大小。
- 實施例1:
該視圖顯示:
當我點擊左單元它給出:
當我最後點擊o n中的右單元它給出:
- 實施例2:
該視圖顯示:
當我點擊右單元它給出:
而當我終於點擊左側單元它給:
我的屏幕截圖素質不是很高,但可以看到,尚未單擊單元格被截斷,如果它在父視圖下從幾個像素向下移動。
證明是綠色邊框不顯示在底部。
我已經採取了層次觀衆的截圖例如1步2瀏覽:
- 上與薄紅色邊框背景的大矩形是錶行。
- 左邊有白色邊框的矩形是被點擊的單元格(ViewSwitcher)。
- 具有強烈紅色邊框的紅色矩形是混亂的單元格(ViewSwitcher)。
所以你可以看到它已經被移動了幾個像素在原來的位置之下,這使得它在表格行的頂部有一個空白區域,並且單元格的底部不可見。
我真的不知道發生了什麼事情,所以如果你有一個想法,或者如果你想嘗試一下,這裏是代碼:
活動:
package my.app;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.ViewSwitcher;
public class SampleActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
LayoutInflater mInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
TableLayout table = (TableLayout) mInflater.inflate(R.layout.content, null);
TableRow row = new TableRow(this);
ViewSwitcher cell1 = (ViewSwitcher) mInflater.inflate(R.layout.cell, null);
cell1.findViewById(R.id.cell_view).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
((ViewSwitcher) v.getParent()).showNext();
}
});
row.addView(cell1);
ViewSwitcher cell2 = (ViewSwitcher) mInflater.inflate(R.layout.cell, null);
cell2.findViewById(R.id.cell_view).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
((ViewSwitcher) v.getParent()).showNext();
}
});
row.addView(cell2);
table.addView(row);
setContentView(table);
}
}
佈局的內容。 XML:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TableLayout>
佈局cell.xml:
<?xml version="1.0" encoding="utf-8"?>
<ViewSwitcher xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cell"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="@drawable/cellborder"
android:padding="1px"
>
<TextView
android:id="@+id/cell_view"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="@drawable/select"
android:text="TextView" />
<EditText
android:id="@+id/cell_edit"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:hint="EditText" />
</ViewSwitcher>
而繪項目,如果你也想的顏色:
border.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape= "rectangle"
>
<solid android:color="#FFFFFFFF"/>
<stroke android:width="1dp" android:color="@android:color/holo_green_light"/>
</shape>
select.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" >
<shape>
<gradient
android:startColor="@android:color/white"
android:endColor="@android:color/white"/>
</shape>
</item>
<item android:state_focused="true" android:state_pressed="true">
<shape>
<gradient
android:startColor="@android:color/holo_blue_light"
android:endColor="@android:color/holo_blue_dark"/>
</shape>
</item>
<item android:state_pressed="true">
<shape>
<gradient
android:startColor="@android:color/holo_green_light"
android:endColor="@android:color/holo_green_dark"/>
</shape>
</item>
<item>
<shape>
<gradient
android:startColor="@android:color/holo_orange_light"
android:endColor="@android:color/holo_orange_dark"/>
</shape>
</item>
</selector>
工程就像一個魅力謝謝!任何想法爲什麼這個線性佈局固定它? – Arnaud
我的假設是視圖不是封裝在一個容器周圍,因此將不受限制地移動。線性佈局確保它保持在定義的範圍內。 – GKproggy