TableLayout中的Imagebutton太大了

时间:2017-06-19 19:27:46

标签: c# android xamarin layout imageview

我有一个Scrollview,里面有一个Tablelayout。 Tablelayout在xml中定义如下:

<TableLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/tablelayout"/>

tablelayout的行及其视图以编程方式添加,如下所示:

private void createFeedLayout(int menuId, int newestOrBest, int count, int startId) {

TableLayout tbl = (TableLayout)FindViewById(Resource.Id.tablelayout);
List<Helpers.Objects.Picture> pictures = getPictures(menuId, newestOrBest, startId, count);
TableRow row = new TableRow(this);

tbl.AddView(row);
row.SetBackgroundResource(Resource.Drawable.background_whitebar_challengeopen);

foreach (Helpers.Objects.Picture picture in pictures)
{
    if (counter == PICTURESINAROW) 
    {
        row = new TableRow(this);
        row.SetGravity(GravityFlags.Left);
        row.SetBackgroundResource(Resource.Drawable.background_whitebar_challengeopen);
        tbl.AddView(row);
        counter = 0;
    }

    Bitmap bmp_picture = PhotoHelpers.DecodePhotoFromBase64(picture.photo);
    bmp_picture = PhotoHelpers.ResizeImage(bmp_picture, (Resources.DisplayMetrics.WidthPixels / PICTURESINAROW) - SPACEBETWEENPICS, 
                                                       (Resources.DisplayMetrics.WidthPixels / PICTURESINAROW) - SPACEBETWEENPICS, false); 

    ImageButton button = new ImageButton(this);
    button.Id = i;
    button.Click += openImage;
    button.SetImageBitmap(bmp_picture);
    button.SetBackgroundColor(Color.Red);
    button.SetAdjustViewBounds(true);

    row.AddView(button);
    counter++;
    i++;
    }
}   

}

代码在Tablerow中添加3张图片,然后创建一个新行。预期的结果将是3张图片,它们直接位于屏幕的左边缘,彼此相邻。

但我得到的是这样的东西:

(只有红色背景的部分很重要)

Result image

这里我很困惑。我在每个按钮上添加了SetAdjustViewBounds(true);,并认为这会导致按钮与图片一样大。因此SetBackgroundColor(Color.Red);根本不重要。但似乎按钮周围有一个大框架。

有人知道可能导致此行为的原因吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

如果您希望图像按钮包装内容,则需要设置LayoutParameters。试试这个:

button.LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent);

答案 1 :(得分:0)

好的,我让它上班了。问题是TableLayout本身。屏幕中间的圆形图片也是该布局的一部分。 “红色”区域中的TableRows以某种方式调整了这些先前TableRows的列宽。

因此,我创建了一个新的TableLayout,并为底部的图片添加了TableRows。

我确定有更好的解决方案,但至少它现在有效。