我有一个 ViewSwitcher 布局,它用作 TableLayout 中的一个单元格。
ViewSwitcher 包含两个视图,我在第一个孩子上实现了 OnClickListener 以便在单击时切换视图。
问题是,当单击 TableRow 的一个单元格时,视图会切换,但同一行上的所有其他单元格都会神奇地调整大小。
- 示例 1:
视图显示:
当我单击左侧单元格时,它给出:
当我最终单击正确的单元格时,它会给出:
- 示例 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>
如果你还想要颜色,还有drawables:
边框.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>
选择.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>