Android 总是有可靠的方向

Android 总是有可靠的方向,android,view,orientation,Android,View,Orientation,基本上,我的目标是将一些自定义的视图大小精确设置为纵向方向屏幕的1/3,以及横向屏幕的1/6 我想到的第一个想法是简单地计算一些mSize变量,并将其设置为OnMeasure中的视图,如下所示: mSize = (AContext.getScreenSize().x / (orientation == Configuration.ORIENTATION_PORTRAIT ? 3 : 6) @Override protected void onMeasure(int widthMe

基本上,我的目标是将一些自定义的
视图
大小精确设置为
纵向
方向屏幕的1/3,以及
横向
屏幕的1/6

我想到的第一个想法是简单地计算一些
mSize
变量,并将其设置为
OnMeasure
中的
视图,如下所示:

  mSize = (AContext.getScreenSize().x / (orientation == Configuration.ORIENTATION_PORTRAIT  ? 3 : 6)

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
      super.onMeasure(mSize|MeasureSpec.EXACTLY, mSize|MeasureSpec.EXACTLY);
  }
在我旋转屏幕之前,它工作得很好。问题是,当屏幕旋转时,
视图
初始化和大小调整在之前被调用,
方向
值实际上会发生变化,因此结果是,如果首先以
纵向
方向打开,它会变为横向
的三分之一,反之亦然

我知道我可以做如下事情:

android:configChanges="orientation|screenSize"
在我的
活动的
AndroidManifest
中,覆盖
onConfigurationChanged
以处理旋转和更改
mSize
值,但是,它禁用在
纵向
横向
布局
之间的自动选择(来自
.xml
充气
上的文件)。所以我最终得到了两个方向相同的
xml
文件

有没有办法使
context.getResources().getConfiguration().orientation
中的
方向值保持一致

或者我需要使用
onConfigurationChange
进行一些变通,以启用布局选择功能?(我不想在代码中执行此操作)

还是有更好的方法来实现我的目标,而我只是从一开始就做错了


请帮帮我。

首先我要说的是,在这种情况下不要使用
android:configChanges=“orientation | screenSize”
。在自定义视图中这样做毫无意义

其次,我认为主要的错误是你获取3或6个值的方式。因为使用XML可以更简单地实现这一点

res/values/integers.xml
   <integer name="view_fraction">3</integer>
res/values-land/integers.xml
   <integer name="view_fraction">6</integer>
此外,我还将提供一些其他建议来改进您的视图大小计算,建议您只使用Google提供的代码,而不是尝试重新编码。使用android.support.percent中的类

如果您的自定义视图从
FrameLayout
RelativeLayout
扩展,我建议您改为从其对应的百分比和扩展

如果自定义视图未从其中一个扩展,则可以按照其页面上的指南使用其帮助程序


通过这种方式,您可以轻松地在XML布局上直观地分配视图大小的百分比

@maxim,谢谢您的回复,但是我不太明白它能帮到我什么。对于一些注释:我需要视图是任何屏幕的1/3和1/6,这取决于方向。在这里可以吗?因为我在屏幕上看到的只是大小的dp值你有没有试过使用TreeViewer?关于百分比:这有点棘手,你看,我的这个视图是RecyclerView的一个项目,而且,我可以将我的RecyclerView放入PercentageLayout并设置大小,但它只是视图的高度,宽度应该是相同的,这是一个ImageView,它应该根据屏幕方向适时调整加载图像的大小,因此对于宽度,我需要覆盖OnMeasure并提供我的代码,我希望您理解,我现在将尝试使用参考资料提供建议,并将提供有关其如何工作的信息,感谢您的回复
int val = context.getResources().getInteger(R.integer.view_fraction)