2

我有一个 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>
4

1 回答 1

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>
于 2013-01-16T00:37:03.187 回答