2017-01-10 15 views
0

3行のテーブルを表示しようとしています。最初の2つは画像で、3つ目はデータです。私は45%、45%、10%のテーブル行の重みでそれらを設定しようとしました...しかし、それは決して起こりません、それはいつも約47%、47%、6%のどこかで出ます。Android:異なるサイズのテーブルの同じ画像 - デバッグしないときのみ

しかし、それは私が把握できない振る舞いに比べて小さいです。

画像とデータは非同期であるため、「実行可能」を使用してデータが入力されます。 問題は、が更新されるたびに、最初のイメージが大きくなってになります。そして第2のイメージは小さくなっていく。 しかし、ここではキッカーがあります。ブレークポイントを設定してデバッグするために一時停止すると、私が望むのとまったく同じように動作します。サイズは変わらず、行の高さは変わりません。

だから、それは言った、ここに私のレイアウトXMLは次のとおりです。

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:paddingLeft="0dp" 
android:paddingRight="0dp" 
android:paddingTop="0dp" 
android:paddingBottom="0dp" 
android:layout_weight="1" 
android:id="@+id/mainscreen"> 
android:background="#00ff00" 
<TableRow 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:id="@+id/img1box" 
    android:layout_weight="45" 
    android:gravity="center_vertical|center_horizontal"> 

    <ImageView 
     android:contentDescription="image1" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:id="@+id/img1" 
     android:src="@drawable/icon"/> 
</TableRow> 

<TableRow 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:id="@+id/img2box" 
    android:layout_weight="45" 
    android:gravity="center_vertical|center_horizontal"> 

    <ImageView 
     android:contentDescription="image2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/img2" 
     android:src="@drawable/icon" /> 
</TableRow> 

    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="10" 
     android:id="@+id/dataholder" 
     android:gravity="center_vertical|center_horizontal"> 

     <TextView 
      android:id="@+id/statusbox" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="" 
      android:textColor="#000000" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:layout_gravity="center"/> 
    </TableRow> 
</TableLayout> 

私は、このような0dp(または0PX)、fill_parent、match_parent、wrap_content、ウェブ検索からのダース他の構成などの設定を試してみました。データは/画像が掲載されている場合に発生

とコードスニペットは、(のonCreate()で発生し、正常に動作しますfindViewById()、のようなものを行う部品を取り外し、プラスいくつかの機密変数の名前を変更):

final Runnable HandleImage1Ready = new Runnable() { 
    @Override 
    public void run() { 
     int height, width; 
     float xfactor, yfactor; 
     height = m_Image1Box.getHeight(); // This is the TableRow 
     width = m_Image1Box.getWidth(); 
    // Compute the reduction factor, but it's 
    // always by height right now, so we just use that 
     Bitmap image = BitmapFactory.decodeByteArray(m_img1, 0, m_img1.length); 
     yfactor = height/(float) image.getHeight(); 
     xfactor = width/(float) image.getWidth(); 
     // create a new bitmap, I even try reducing the "height" 
     // to prevent the table row from growing... doesn't help 
     Bitmap scaled = Bitmap.createScaledBitmap(image, (int) (image.getWidth() * yfactor), height, true); 
     m_Image1.setImageBitmap(scaled); 
     CompleteProcessing(); 
    } 

}; 

final Runnable HandleImage2Ready = new Runnable() { 
    @Override 
    public void run() { 
     int height, width; 
     float xfactor, yfactor; 
     height = m_Image2Box.getHeight(); // This is the TableRow 
     width = m_Image2Box.getWidth(); 
     // EVEN TRY USING THE SAME IMAGE ON ROW 2... 
     //Bitmap image = BitmapFactory.decodeByteArray(m_img2, 0, m_img2.length); 
     Bitmap image = BitmapFactory.decodeByteArray(m_img1, 0, m_img1.length); 
     yfactor = height/(float) image.getHeight(); 
     xfactor = width/(float) image.getWidth(); 
     Bitmap scaled = Bitmap.createScaledBitmap(image, (int) (image.getWidth() * yfactor), height, true); 
     m_Image2.setImageBitmap(scaled); 
     CompleteProcessing(); 
    } 
}; 
final Runnable HandleMicrReady = new Runnable() { 
    @Override 
    public void run() { 
     int height, width; 
    // Just to debug these, and see how this row changes 
     height = m_statusBox.getHeight(); 
     width = m_statusBox.getWidth(); 
     m_statusBox.setText(m_data); 
     CompleteProcessing(); 
    } 
}; 

繰り返し...上記の関数のいずれかにブレークポイントを設定して実行を再開すると、新しい画像を投稿するたびに、両方の画像が同じサイズになります。それは私が起こりたいものです。

ただし、ブレークポイントを設定しないと、新しいイメージがポストされるたびに、一番上のテーブルの行が大きくなります。トップイメージがテーブル(スクリーン)の50%を超え、下部のイメージとテーブル行のデータが小さくなっています。

本質的に

誰かが問題のために見ているとき、あなたが取る車の中でガラガラのように、それはそれをしない、ので、私はAndroidのメーカーは私を笑っていると信じて...

(私は含ま"アンドロイドスタジオ"タグは、ASデバッガで一時停止すると消えてしまうので)。

アドバイスありがとうございます。

-Scotty

答えて

1

表のレイアウトは非常に厳しく、それらの上に置かれた重みを取るしていないようです。例えば。 ImageViewTableRowに追加すると、srcの有無にかかわらず、既に少し異なってレンダリングされます。私はまた、大きさの異なる2枚の画像でこれを確認しました。大きな画像のある行は、小さな画像の行を完全に追い越します。

解決策はTableLayoutを使用しないことです。 GridViewのようなものを使用したくない場合は、LinearLayoutを使用することをおすすめします。あなたはまったく同じ方法でそれを使うことができます。ご提供レイアウトのだから、

enter image description here

:あなただけTableRow(水平一種)やTableLayout(縦一種)

ここで視覚的に比較だ区別をするのではなく、そのandroid:orientation="horizontal|vertical"属性を指定する必要がありますXMLは、これはなる:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:paddingLeft="0dp" 
android:paddingRight="0dp" 
android:paddingTop="0dp" 
android:paddingBottom="0dp" 
android:weightSum="100" 
android:background="#00ff00" 
android:id="@+id/mainscreen"> 
<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:id="@+id/img1box" 
    android:layout_weight="45" 
    android:gravity="center_vertical|center_horizontal"> 

    <ImageView 
     android:contentDescription="image1" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:id="@+id/img1" 
     android:src="@drawable/icon"/> 
</LinearLayout> 

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:id="@+id/img2box" 
    android:layout_weight="45" 
    android:gravity="center_vertical|center_horizontal"> 

    <ImageView 
     android:contentDescription="image2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/img2" 
     android:src="@drawable/icon" /> 
</LinearLayout> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="10" 
     android:id="@+id/dataholder" 
     android:gravity="center_vertical|center_horizontal"> 

     <TextView 
      android:id="@+id/statusbox" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="" 
      android:textColor="#000000" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:layout_gravity="center"/> 
    </LinearLayout> 
</LinearLayout> 
+0

これがうまく働きました。また、ビットマップを拡大縮小する必要もなくなりました。画像は、LinearLayout IDの高さに自動的に調整されているようです。ありがとう。 – SpacemanScott

関連する問題