TableLayout内のセルとして使用されるViewSwitcherレイアウトがあります。
ViewSwitcherには2つのビューが含まれており、クリック時にビューを切り替えるために、最初の子にOnClickListenerを実装しました。
問題は、TableRowの1つのセルをクリックするとビューが切り替わるが、同じ行の他のすべてのセルのサイズが魔法のように変更されることです。
- 例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);
}
}
レイアウト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>