2011-03-17 43 views
3

在Android中,我在EditText旁邊有一個EditText和一個Button,每當我按下一個時,我都希望另一個出現在相同的狀態。如何同步兩個視圖的可繪製狀態

我試着在我的EditText和Button上放置android:clickable =「true」和android:duplicateParentState =「true」,但這隻適用於觸摸佈局本身。如果我觸摸我的EditText或Button,則不會發生任何事情。我嘗試在EditText &按鈕上設置android:clickable =「false」,但觸摸事件仍然不會過濾到父項。

如何讓我的視圖透明以觸摸事件,以便傳遞給父項?我想要的是EditText和Button一起工作,所以如果我觸摸任何一個,他們似乎都被按下。

這是我目前使用XML:

<RelativeLayout 
    android:id = "@+id/EnclosingLayout" 
    android:layout_width = "fill_parent" 
    android:layout_height = "120dp" 
    android:clickable = "true"> 
    <EditText 
     android:id = "@+id/MyEditText"              
     android:layout_width = "fill_parent" 
     android:layout_height = "wrap_content" 
     android:layout_weight = "1" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:clickable="false" 
     android:duplicateParentState="true"/> 
    <Button 
     android:id = "@+id/MyButton" 
     android:layout_alignTop="@id/MyEditText" 
     android:layout_alignBottom="@id/MyEditText" 
     android:layout_alignParentRight="true" 
     android:duplicateParentState="true" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:layout_width="31.33dp" 
     android:gravity="center" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:clickable="false"/> 
</RelativeLayout> 
+2

這是不是100%,與此相關的問題,但在一個相關的問題機器人工作時:addStatesFromChildren =「true」幫助我。只是想補充一點,如果有人遇到類似的事情。 – Kevin 2011-03-24 20:04:53

+0

謝謝。花了很多時間來找到這個解決方案。你的評論對我來說非常有用 – alaster 2013-04-16 15:24:56

回答

0

我覺得你在你的RelativeLayout,而不是點擊想要android:focusable="true"。我不確定你的意思是什麼?「我怎樣才能讓我的觀點透明以觸摸事件,以便他們傳遞給父母?當你點擊EditText時,你想要按鈕onClick()被調用?

+0

我真正想要的是如果我點擊按鈕,我希望底層的RelativeLayout處理事件。最後,儘管我用另一種方式解決了這個問題,並且我創建了一個我設置爲EditText的drawableRight的假按鈕,並且這樣它們都同時被按下。 – Kevin 2011-03-22 21:39:31

0

考慮將所有輸入捕獲到編輯文本和按鈕,並將事件重定向到一個普通的視圖控制器,在這種情況下是一種常用方法。然後更新通用方法(視圖控制器)中的編輯文本和按鈕。對於編輯文本,您將需要陷阱都觸摸和點擊創建兩個事件的處理程序爲:

// EDIT TEXT ON TOUCH HANDLER 
editTextPassword.setOnTouchListener(new View.OnTouchListener() {  
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      switch (event.getAction()){ 
       case MotionEvent.ACTION_DOWN: 
        SynchViews(); // view controller 
        break; 
      }   
      return true; 
     } 
    }); 

// EDIT TEXT ON Click HANDLER (No touch screen) 
editTextPassword.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
         SynchViews(); // view controller 
     } 
    }); 
+0

我最終以不同的方式解決了這個問題 - 我使用EditText的drawableRight屬性畫了一個假按鈕,並且操縱了代碼中的邊界以確保其尺寸合適。 – Kevin 2011-03-18 16:58:32

+0

@Kevin好的提示! – JAL 2011-03-18 20:15:58