2

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>
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 に答える