android横竖屏幕更改后,按钮第一次点击无效,第二次点击才能响应

东土也 2017-10-08 05:57:46
这是我横竖屏幕切换的代码
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
int orientation = getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) { //转为竖屏了。

//lineLayout.removeAllViews();
root.removeAllViews();
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
scrollView.addView(lineLayout);
root.addView(scrollView, params);
//显示状态栏
this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
mediaSurface.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);

//设置view的布局,宽高之类
ViewGroup.LayoutParams surfaceViewLayoutParams = mediaSurface.getLayoutParams();
surfaceViewLayoutParams.height = (int) (ScreenUtils.getWight(this) * 9.0f / 16);
surfaceViewLayoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
//webView.setVisibility(View.VISIBLE);

} else if (orientation == Configuration.ORIENTATION_LANDSCAPE) { //转到横屏了。
//隐藏状态栏
//webView.setVisibility(View.GONE);
scrollView.removeAllViews();
root.removeAllViews();
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
root.addView(lineLayout, params);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
mediaSurface.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
ViewGroup.LayoutParams surfaceViewLayoutParams = mediaSurface.getLayoutParams();
surfaceViewLayoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
surfaceViewLayoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
//mediaSurface.setLayoutParams(surfaceViewLayoutParams);
//设置view的布局,宽高
//mediaSurface.setLayoutParams(surfaceViewLayoutParams);
}
}


布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="afterDescendants"
android:id="@+id/root">

<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/scroll_view">
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/line_layout">
<include
android:id="@+id/media_include"
layout="@layout/media_iclude"/>
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent">

</WebView>
</LinearLayout>
</ScrollView>
</LinearLayout>


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<SurfaceView
android:id="@+id/media_surface"
android:layout_width="match_parent"
android:layout_height="200dp" />

<Button
android:id="@+id/paly"
android:layout_alignBottom="@id/media_surface"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:text="播放"/>

<SeekBar
android:id="@+id/progress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/media_surface"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="5dp"/>

<Button
android:id="@+id/full_screen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="全屏"/>

<Button
android:id="@+id/vertical_screen"
android:layout_alignRight="@id/media_surface"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="竖屏"/>

</RelativeLayout>

其中竖屏转横屏后 按钮第一次都失效了
...全文
1156 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxx355200 2018-02-07
  • 打赏
  • 举报
回复
加一个状态标志,默认为false,点击过后为true,切屏后又变为false。
liu464809 2018-02-06
  • 打赏
  • 举报
回复
mediaSurface.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN);

是这个设置的问题 。 不要问我为什么,我也不知道
东土也 2017-10-10
  • 打赏
  • 举报
回复
引用 5 楼 xj396282771 的回复:
那你自己再多调试一下吧
好吧,谢了,网上也没找到好的解决办法
Jing丶無雙 2017-10-10
  • 打赏
  • 举报
回复
那你自己再多调试一下吧
东土也 2017-10-10
  • 打赏
  • 举报
回复
引用 3 楼 xj396282771 的回复:
那我觉得是切换时缺失了焦点,我的做法和你不太一样。代码如下:
	

		mapSwitchBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				int orientation = getResources().getConfiguration().orientation;
				if (orientation == Configuration.ORIENTATION_LANDSCAPE) { // 切换到列表模式
					changeToPortraitMode();
				} else {
					changeToLandscapeMode();
				}
			}
		});






/** 切换到竖屏模式 */
	protected void changeToPortraitMode() {
		isLandscape = false;
		// if (flirOneView.isShowing()) {
		// setRequestedOrientation(
		// ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
		flirOneView.setRotation(0);
		isReverse = false;
		flirOneView.setScreenChange(true);
		// }
		// else {
		// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
		// }
		mapLayout.setVisibility(View.GONE);
		drawMapImg.setVisibility(View.GONE);
		wholeNetBtn.setVisibility(View.GONE);
		mapSwitchBtn.setText(R.string.main_btn_mapswitch_on);
		if (playBackFragment.isVisible()) {
			playBackToScan();
		}
		playBackBtn.setVisibility(View.GONE);
		stickchart.setDisplayAddorSub(true);
		closeCompass();
	}

	/** 切换到横屏模式 */
	protected void changeToLandscapeMode() {
		isLandscape = true;
		// ViewGroup parent = (ViewGroup) mapLayout.getParent();
		// if (parent != null) {
		// parent.removeView(mapLayout);
		// }
		// frameLayout.addView(mapLayout);
		stickchart.setDisplayAddorSub(false);
		drawMapImg.setVisibility(View.VISIBLE);
		playBackBtn.setVisibility(View.VISIBLE);
		wholeNetBtn.setVisibility(View.VISIBLE);
		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
		flirOneView.setRotation(270);
		flirOneView.setScreenChange(false);
		mapLayout.setVisibility(View.VISIBLE);
		mapSwitchBtn.setText(R.string.main_btn_mapswitch_close);
		drawMapImg.postDelayed(new Runnable() {

			@Override
			public void run() {
				drawMapImg.refreshViewSize(0, 0);
			}
		}, 500);

	}
我的布局里面有一个scroolView,靠隐藏来实现全屏不可能,只能靠动态的添加布局,我首先是把布局全部移除,然后吧ScrollView里的组建添加到根布局里面。你的方法对我不太试用哟
Jing丶無雙 2017-10-09
  • 打赏
  • 举报
回复
你看下你的按妞点击事件成功了么,是不是本来点击事件响应了。 但是你的一些别的代码(比如boolean类型的判断)阻碍了你需要执行的代码
Jing丶無雙 2017-10-09
  • 打赏
  • 举报
回复
那我觉得是切换时缺失了焦点,我的做法和你不太一样。代码如下:
	

		mapSwitchBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				int orientation = getResources().getConfiguration().orientation;
				if (orientation == Configuration.ORIENTATION_LANDSCAPE) { // 切换到列表模式
					changeToPortraitMode();
				} else {
					changeToLandscapeMode();
				}
			}
		});






/** 切换到竖屏模式 */
	protected void changeToPortraitMode() {
		isLandscape = false;
		// if (flirOneView.isShowing()) {
		// setRequestedOrientation(
		// ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
		flirOneView.setRotation(0);
		isReverse = false;
		flirOneView.setScreenChange(true);
		// }
		// else {
		// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
		// }
		mapLayout.setVisibility(View.GONE);
		drawMapImg.setVisibility(View.GONE);
		wholeNetBtn.setVisibility(View.GONE);
		mapSwitchBtn.setText(R.string.main_btn_mapswitch_on);
		if (playBackFragment.isVisible()) {
			playBackToScan();
		}
		playBackBtn.setVisibility(View.GONE);
		stickchart.setDisplayAddorSub(true);
		closeCompass();
	}

	/** 切换到横屏模式 */
	protected void changeToLandscapeMode() {
		isLandscape = true;
		// ViewGroup parent = (ViewGroup) mapLayout.getParent();
		// if (parent != null) {
		// parent.removeView(mapLayout);
		// }
		// frameLayout.addView(mapLayout);
		stickchart.setDisplayAddorSub(false);
		drawMapImg.setVisibility(View.VISIBLE);
		playBackBtn.setVisibility(View.VISIBLE);
		wholeNetBtn.setVisibility(View.VISIBLE);
		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
		flirOneView.setRotation(270);
		flirOneView.setScreenChange(false);
		mapLayout.setVisibility(View.VISIBLE);
		mapSwitchBtn.setText(R.string.main_btn_mapswitch_close);
		drawMapImg.postDelayed(new Runnable() {

			@Override
			public void run() {
				drawMapImg.refreshViewSize(0, 0);
			}
		}, 500);

	}
东土也 2017-10-09
  • 打赏
  • 举报
回复
引用 1 楼 xj396282771 的回复:
你看下你的按妞点击事件成功了么,是不是本来点击事件响应了。 但是你的一些别的代码(比如boolean类型的判断)阻碍了你需要执行的代码
我这边打过断点了,没有用,这边等了一段时间在点击也没有用,之有点击过一次,在点击,界面上的空间才会响应onclick事件

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧