我有一个ViewSwitcher布局,用作TableLayout中的单元格。
ViewSwitcher包含两个视图,我在第一个子节点上实现了一个OnClickListener,以便在点击时切换视图。
问题是当单击TableRow的一个单元格时,视图会被切换,但同一行中的所有其他单元格都会神奇地调整大小。
视图显示:
当我点击左边的单元格时,它会给出:
当我最后点击右边的单元格时,它会给出:
视图显示:
当我点击右边的单元格时,它会给出:
当我最后点击左边的单元格时,它会给出:
我的截图质量不是很高,但可以看到未被点击的单元格被截断,好像它是从几个像素的父视图下移动的。
证据是底部没有显示绿色边框。
我已经截取了层次结构查看器的屏幕截图,例如这里的第1步:
所以你可以看到它被移动了几个像素位于其原始位置之下,这使得在表格行的顶部有一个空白区域,并且单元格的底部是不可见的。
我真的不知道发生了什么,如果你有想法或者你想尝试,这里是代码:
活动:
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);
}
}
布局content.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>
答案 0 :(得分:2)
我使用线性布局包围了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" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/cell_view"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="@drawable/select"
android:text="TextView" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<EditText
android:id="@+id/cell_edit"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:hint="EditText" />
</LinearLayout>
</ViewSwitcher>