【问题标题】:Change background color has no effect once screen has been rotated旋转屏幕后更改背景颜色无效
【发布时间】:2012-08-17 00:42:35
【问题描述】:

我是 Android 新手,现在我面临一个奇怪的问题,简而言之,问题是

“屏幕旋转后,接收 TCP 消息然后更改 GUI 的背景颜色无效。”

我要归档的内容:

在安卓设备上运行一个APP,通过TCP连接到PC。 PC 可以向 APP 发送一个字符串,然后 APP 会根据收到的字符串做一些事情。 在这种情况下,通过 TCP 将字符串“将背景颜色更改为红色(手机振动)/黑色”发送到 APP,因此 Android 用户将看到振动的致盲效果。

有什么问题:

我可以归档我想要的。但是一旦屏幕旋转了,颜色就不能改变了,只剩下震动了。

我的尝试:

我在APP上放了一个按钮,它会手动触发颜色变化事件(有振动)。即使我旋转屏幕也能正常工作。

进一步测试表明,改变背景颜色和TCP读取触发的动画等UI操作消失了,但铃声和振动保持不变。

我将视频上传到 Youtube http://youtu.be/n0gxXzzf-bo

下面是java代码,按钮和TCP调用同一个方法:ChangeColor()

public void ChangeColor(){
    Thread t= new Thread(new ChangeColorTest());        
    t.start();
}
public class ChangeColorTest  implements Runnable{


    public void run() {             
            try {
                    for(int i=0;i<3;i++){

                    mBlinkHandler.sendEmptyMessageDelayed(1, 0);                    
                    Thread.sleep(300);              
                    mBlinkHandler.sendEmptyMessageDelayed(2, 0);
                    Thread.sleep(300);                  

                    }

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }   


}


Handler mBlinkHandler = new Handler(){
        @Override
        public void handleMessage(Message msg){
             super.handleMessage(msg);
            //   mScreen = (LinearLayout)findViewById(R.id.mylinerlayout);
             if(msg.what==1){
             mScreen.setBackgroundColor(Color.RED);
             Vibratoration();
             }else if(msg.what==2){
             mScreen.setBackgroundColor(Color.BLACK);
             }
        }
    };

我想知道什么?

如果有人能找到解决方案,将不胜感激。

我的平台是什么? 服务器PC:Win7 64bits VS2010 C# 安卓平台:4.0三星S2 开发IDE:Motodev SDK API:Android 3

【问题讨论】:

标签: android user-interface tcp tcpclient


【解决方案1】:

一种解决方案是锁定屏幕使其无法旋转? (或者至少在此功能期间将其锁定。)

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

【讨论】:

  • 确实这是最简单的方法。
【解决方案2】:

Android 将在您旋转屏幕时重新创建整个活动 - 因此您的变量“mScreen”可能不会指向旋转后在屏幕上实际可见的实例。

您可以避免,android 重新创建活动,如下所述: http://developer.android.com/guide/topics/resources/runtime-changes.html

【讨论】:

    猜你喜欢
    • 2021-02-07
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2012-08-27
    • 2011-05-17
    • 1970-01-01
    • 2020-09-16
    • 2023-01-21
    相关资源
    最近更新 更多