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)