我有一个片段,其中 TextView 从文件夹中获取它的宽度:
values
和values-port
。
当方向发生变化时,这些值会发生变化,但片段的用户界面不会产生任何影响。
实际上它实际上是从values-port
和
如果设备处于横向模式:onConfigurationChanged()将调用新方向作为横向。
如果设备处于纵向模式:未调用onConfigurationChanged()。
当我改变方向时,肯定会调用onConfigurationChanged()
。
所以,
为什么它始终以纵向模式开始?
如何处理UI元素的尺寸更改效果。
我在片段中尝试了类似的东西:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
getView().requestLayout();
}
但是没有用。
我的 TextView 的宽度始终为values-port
文件夹。
编辑:似乎多余,但这是代码:
<activity
android:name=".FeedActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="portrait" >
</activity>
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
我知道我可以从清单中删除android:screenOrientation="portrait"
而不是活动中的setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
,但想知道此代码的行为。
答案 0 :(得分:3)
FeedActivity
具有固定的方向,在您的清单中由属性android:screenOrientation
指定。因此,当您旋转设备时,它将不执行任何操作。即使它会,你也会覆盖android:configChanges
。这是the docs所说的:
列出活动将自行处理的配置更改。在运行时发生配置更改时,默认情况下会关闭并重新启动活动,但声明具有此属性的配置将阻止活动重新启动。相反,活动仍在运行,并调用其
onConfigurationChanged()
方法。
您的清单告诉系统FeedActivity
将自己处理方向,screenSize和键盘配置更改。唉,你真的没那样做。
既然你说你在Fragment
加载XML
,我会认为它看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:layout_width="@dimen/frag_width"
android:layout_height="match_parent"
android:tag="your_tag_here"
class="path.to.your.Fragment"/>
</FrameLayout>
要获得您期望的行为,您应该使用
更新清单<activity
android:name=".FeedActivity"
android:configChanges="screenSize|keyboardHidden"/>
更新
如果您坚持使用Fragment
方法更改onConfigurationChanged
宽度,则可能会有效:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
final View view = getView();
if (null != view) {
view.getLayoutParams().width = getResources().getDimensionPixelSize(R.dimen.width);
}
}
我会建议不要这样做。
答案 1 :(得分:0)
您可以简单地将具有不同代码的片段放置在“布局 - 土地”中。夹。 当屏幕方向更改为横向时,将从此文件夹中调用所有布局和片段。 因此,您可以复制片段,对横向模式进行必要的更改,并将其放入“布局 - 土地”中。夹。 这应该可以解决问题。