我希望在屏幕旋转时禁用SwipeRefreshLayout
模式中的landscape
,SwipeRefreshLayout
必须自动停用。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
getSupportActionBar().hide();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
refresh.setEnabled(false);
refresh.setRefreshing(false);
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
getSupportActionBar().show();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
refresh.setEnabled(true);
}
}
refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
videoData("video");
refresh.setRefreshing(true);
(new Handler()).postDelayed(new Runnable() {
@Override
public void run() {
refresh.setRefreshing(false);
}
}, 5000);
}
});
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listCoordinate"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#b2100f0f">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<utils.VideoRecyclerview
android:id="@+id/videoRecyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:footerDividersEnabled="false"
android:gravity="center_vertical" />
</android.support.v4.widget.SwipeRefreshLayout>
</FrameLayout>
</android.support.design.widget.CoordinatorLayout>
答案 0 :(得分:0)
那是我的主要内容,我并不是说这是最好的方法,但它可能有用......
在您SwipeRefreshLayout
处执行此操作的内容中,您可以询问设备是否位于Landscape
中,您可以这样做:
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
//Landscape mode
}
即使
if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
所以我猜如果方向是横向的,你可以返回false。
然后尝试这样:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig == Configuration.ORIENTATION_LANDSCAPE){
yourSwipeLayoutRefresh.setEnabled(false);
yourSwipeLayoutRefresh.setRefreshing(false);
}
}
注意:如果您的SwipeLayoutRefresh
不在同一个班级,您可以将其设为静态,然后您可以访问它,但始终询问它是否为空
答案 1 :(得分:0)
要禁用'SwiperefreshLayout',您必须在横向模式中禁用它:
禁用
swipeRefreshLayout.setEnabled(false);
启用:
swipeRefreshLayout.setEnabled(true);
现在要查找设备的方向,您可以使用以下条件:
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
//Do some stuff
}
您可能需要在orientationn更改时检测事件,因为您可以覆盖此方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//Do stuff here
}
如果它已经刷新,那么当你改变方向时它会保持刷新,所以你必须像这样检查:把这个代码放在你重写的方法中。
if (swipeRefreshLayout.isRefreshing()) {
swipeRefreshLayout.setRefreshing(false);
}
答案 2 :(得分:0)
试试这个:
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
int orientation = newConfig.orientation;
if (orientation == Configuration.ORIENTATION_LANDSCAPE)
refreshLayout.setEnabled(false)
}