2011-12-03 59 views

回答

1

我假設你想設置焦點的一段時間....

這裏是你如何能做到這一點:

button01.setFocusableInTouchMode(true); 
    button01.requestFocus(); 

在一些HTC手機這凸顯了按鈕,綠色一些LG手機黃色。焦點顏色基本上是設備屬性。

此後,您可以應用您的邏輯,在適當的時間後將焦點設置爲某個其他對象,因此button01將失去焦點並再次成爲其正常自身。

someOtherView.setFocusableInTouchMode(true) 
    someOtherView.RequestFocus(); 
+0

非常感謝您的答案!我現在的問題是:「在適當的時間後將焦點設置到其他對象」! 我正在創建一種卡拉OK應用程序。每個字是一個按鈕,欲突出顯示它們在同步,而他們的玩法,所以使用循環: 對(INT I = 1; I 只有最後一個按鈕是突出顯示!有任何想法嗎??? – user1068400

+0

我得到了問題.... for循環實際上設置所有按鈕的焦點,但幾乎立即刪除焦點...當它去到最後一個按鈕焦點停留在那裏,因爲循環結束....我會推薦使用android的CountDownTimer或AlarmManager(不知道有關警報管理器),在將焦點移動到下一個子按鈕之前給予一定的延遲....另一種方法是使用處理程序.....你可以發送message.sendEmptyMessage(3) textToSpeech完成後,然後你可以設置焦點到其他按鈕或視圖... – drulabs

+0

sendEmptyMessage(3)只是一個例子....你可以訪問3內部處理程序爲(msg.what == 3) – drulabs

1

我找到了使其工作的解決方案。如果有人有興趣創造一種卡拉OK,這是我的代碼:

public void playKaraoke(final FlowLayout fl) { 
     //KARAOKE 
     mTts.setLanguage(Locale.FRENCH); 
      // Do something long 
      Runnable runnable = new Runnable() { 
       @Override 
       public void run() { 
        for (int i = 1;i<fl.getChildCount();++i) { 
         final Button btn = (Button) fl.getChildAt(i); 
         btn.setFocusableInTouchMode(true); 
         try { 
          Thread.sleep(800); 
         } catch (InterruptedException e) { 
          e.printStackTrace(); 
         } 
         handler.post(new Runnable() { 
          @Override 
          public void run() { 
           //progress.setProgress(value); 
           btn.requestFocus(); 
           mTts.speak((String) btn.getText(), 
              TextToSpeech.QUEUE_FLUSH, // Drop all pending entries in the playback queue. 
              null); 
          } 
         }); 
        } 
       } 
      }; 
      new Thread(runnable).start(); 

    } 
+0

美妙的工作,我會記住這一點。 – drulabs

相關問題