7

アプリケーションで TableLayout を使用しています。これには、それぞれ 4 つの ImageView を含む 4 つの TableRows が含まれます。私が望む動作は、最短の寸法に合わせてレイアウトをスケーリングすることです。

ポートレートモードでは問題なく動作しますが、ランドスケープモードでは惨めに失敗します.

ドキュメントによると、これは TableRow の layout_height が常に WRAP_CONTENT に設定されているためです。個々のビューのサイズを設定できますが、ビューの layout_height を FILL_PARENT に設定すると、TableLayout はまったくレンダリングされません。

欠けている単純なものがあるように感じます。TableRows を使用して TableLayout を取得し、横向きモードで高さに合わせてスケーリングする方法はありますか?

XML レイアウト:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/table"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:shrinkColumns="*">
</TableLayout>

ジャワ:

public class Example extends Activity {

private TableLayout mTable;
private int[] mDrawableIds = {  R.drawable.draw01, R.drawable.draw02, R.drawable.draw03, R.drawable.draw04, R.drawable.draw05, R.drawable.draw06,   R.drawable.draw07, R.drawable.draw08, R.drawable.draw09, R.drawable.draw10, R.drawable.draw11, R.drawable.draw12, R.drawable.draw13, R.drawable.draw14, R.drawable.draw15, R.drawable.draw16 };

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mTable = (TableLayout)findViewById(R.id.table);
    for (int j=0; j<4; j++) {
        TableRow tr = new TableRow(this);
        tr.setLayoutParams(new ViewGroup.LayoutParams(  LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
           for (int i=0; i<4; i++) {
               ImageView iv = new ImageView(this);
               iv.setImageResource(mDrawableIds[j*4+i]);
               iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
               iv.setAdjustViewBounds(true);
               tr.addView(iv);
           }
        mTable.addView(tr);
    }
}
}
4

3 に答える 3

4

XMLレイアウトを次のように変更します。

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/table"
        android:layout_width="fill_parent"
        android:layout_height="160dp"
        android:shrinkColumns="*">
</TableLayout>

これにより、向きに関係なく、画面全体の高さを占めるようになります。密度に依存しないピクセルを参照してください

于 2009-12-29T20:54:25.553 に答える
4

私はこれを行う方法を理解しました。基本的に、思い通りに動かなかった部分は TableRows でした。横向きに変更したとき、最初の 2 つの TableRows はまったくサイズ変更されず、3 つ目は残りのスペースを消費していました。4 行目はまったく表示されませんでした。

TableRows の layout_weight を等しい値に設定する必要があることがわかりました。ただし、実行時にそれを行う方法がないため、row.xml という名前の次のレイアウト ファイルを作成しました。

<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/trow"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_weight="1">
</TableRow>

次に、LayoutInflater を使用して、必要なプロパティを使用して実行時に行を作成しました。

    mTable = (TableLayout)findViewById(R.id.table);
    LayoutInflater inflater = getLayoutInflater();

    for (int j=0; j<4; j++) {
        View row = inflater.inflate(R.layout.row, mTable,false);
        TableRow tr = (TableRow)row.findViewById(R.id.trow);
           for (int i=0; i<4; i++) {
               View image = inflater.inflate(R.layout.image, tr, false);
               ImageButton ib = (ImageButton)image.findViewById(R.id.image);
               ib.setAdjustViewBounds(true);
               ib.setImageResource(mCardIds[j*4+i]);
               tr.addView(ib);
           }
        mTable.addView(tr);
    }

現在、TableRows は回転時に適切にサイズ変更されています。いくつかの onClick 動作を追加することに決め、別の xml ファイルを介してこれらのボタンを構築しているため、ImageViews を ImageButtons に変更しましたが、これらの詳細はサイズ変更の問題に関連しているとは思いません。

于 2010-01-17T11:29:27.730 に答える
0

ここで受け入れられた解決策を試しましたが、うまくいきませんでした。機能したのは以下のとおりです。

TableRow tr = new TableRow(this);
TableLayout.LayoutParams pRowTop = new TableLayout.LayoutParams(
                TableLayout.LayoutParams.MATCH_PARENT,
                TableLayout.LayoutParams.WRAP_CONTENT);
pRowTop.weight = 1;
mTable.addView(tr, pRowTop);
于 2015-11-22T22:07:53.590 に答える