我有什么:
android:configChanges="orientation|screenSize|keyboardHidden"
问题是什么:
我使用ViewA.getLocationOnScreen
获取视图屏幕上的位置。当我第一次打开对话框时,位置是正确的。旋转屏幕后,由于android:configChanges
视图以某种方式不更新它的位置,即使对话框在活动中正确居中,ViewA的getLocationOnScreen也会指向较旧的位置,之前轮换。
我尝试过的事情。
我覆盖了对话框的onConfigurationChanged
并尝试了这个:
ViewA.requestLayout
(不做任何事)ViewA.getViewTreeObserver().addOnGlobalLayoutListener
并在onGlobalLayout上将topMargin设置为1并再次调用requestLayout。 (这有效,但我不想在每次旋转屏幕时设置边距)我想知道的是如何强制重新定位对话框,使得getLocationOnScreen在旋转后返回正确的值
请注意,我不想更改android:configChanges
答案 0 :(得分:0)
要尝试解释一下,如果您有{!! Form::select('subkategori',$sktgr,['style'=>'width:100%','data-toggle'=>'select2']) !!}
android:configChanges="orientation
,则不会重新设置Activity
,这意味着View
将无法衡量,这就是旧职位的原因报告,也要求View
你需要在DialogFrament
的查看父母的电话上完整抽奖,以便为整个游戏DecorView
- 致电invalidate()
& ; requestLayout()
答案 1 :(得分:-1)
调用id | date | day difference
0 | 2015-05-02 00:00:00 | day 1
1 | 2015-05-05 00:00:00 | day 3
2 | 2015-05-22 00:00:00 | day 20
时,屏幕上的视图位置尚未更新。您需要在视图中添加onConfigurationChanged
以捕获您正在寻找的更新。请参阅下面的示例。
<强> TestDialogFragment.java 强>
OnLayoutChangeListener
<强> test_fragment.xml 强>
public class TestDialogFragment extends DialogFragment {
private static final String TAG = "TestDialogFragment";
View testView;
int[] testViewLocation = {0, 0};
public TestDialogFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.test_fragment, container);
testView = view.findViewById(R.id.test_view);
testView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
Log.d(TAG, "onLayoutChange");
testView.getLocationOnScreen(testViewLocation);
Log.d(TAG, String.format("%s %s", testViewLocation[0], testViewLocation[1]));
}
});
return view;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.d(TAG, "onConfigurationChanged");
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Log.d(TAG, "landscape");
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Log.d(TAG, "portrait");
}
testView.getLocationOnScreen(testViewLocation);
Log.d(TAG, String.format("%s %s", testViewLocation[0], testViewLocation[1]));
}
}
日志输出
<?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">
<View
android:id="@+id/test_view"
android:layout_height="50dp"
android:layout_width="match_parent"
android:layout_gravity="center"/>
</FrameLayout>