如何使用固定宽高比视图为展开视图充气

fla*_*kes 7 c# java android android-layout xamarin

在我的应用程序中,我有一个滚动视图.在我的应用程序的生命周期中,我动态地向滚动视图添加新视图.我可以添加几乎没有问题的视图,但我不能正确的维度.这是我想要的布局的草图:

在此输入图像描述

在图像中,我有一个尺寸Width为的屏幕Height.它包含一个HorizontalScrollView(或者可能是一个,RecyclerView但我不知道如何使用这个),当添加视图时它会增长.我希望添加到视图中的每个项目的宽度等于屏幕高度的五分之一并具有匹配的高度.如果我对膨胀视图的宽度进行硬编码,我可以做到这一点,但是,我的视图在所有手机上的宽高比都不一样.

注意:我尝试过使用PercentRelativeLayout,但我无法使用它.不知道如何解决这个问题...任何想法?


关于赏金的注意事项:我会接受Java或C#(Xamarin)的答案!! 我的项目是在Xamarin,所以如果它适用于它,或者它可以很容易地适应在C#中工作会很好

Dav*_*jak 4

您不希望您的视图是屏幕高度的五分之一,您希望它是父视图高度的五分之一。或者更准确地说,您希望宽度是视图高度的五分之一。

不同之处在于,使用屏幕宽度/高度可能在您的设备上有效,但在其他设备上可能会崩溃。如果有人用分屏打开你的应用程序,你会怎么做?

然而,视图尺寸的定义,方法是相同的:如果您想要一个遵循某些规则的视图,您将必须创建自己的视图并相应地测量您的视图。

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  int availableHeight = MeasureSpec.getSize(heightMeasureSpec);
  int wantedWidth = availableHeight / 5;

  setMeasuredDimension(wantedWidth, availableHeight);
}
Run Code Online (Sandbox Code Playgroud)

基本上就是这样。MeasureSpec您可能想阅读有关一般视图和测量视图的正确文档。我还写了一篇关于自定义视图的博客文章,涵盖了一些基础知识。

然后,您只需将自定义视图添加到支持 ScrollView 的 LinearLayout 即可。

这是基本上可以工作的完整示例,您可能想要使用与框架布局不同的东西。

public class FifthWidthView extends FrameLayout {
  public FifthWidthView(Context context) {
    super(context);
  }

  public FifthWidthView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public FifthWidthView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
  }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
      int availableHeight = MeasureSpec.getSize(heightMeasureSpec);
      int wantedWidth = availableHeight / 5;

      setMeasuredDimension(wantedWidth, availableHeight);
    }
}
Run Code Online (Sandbox Code Playgroud)