2011-03-17 4 views
3

안드로이드에서 EditText와 EditText 옆에 Button이 있으며, 누를 때마다 다른 하나도 같은 상태로 나타나게하고 싶습니다.두 뷰의 드로어 블 상태를 동기화하는 방법

둘러싼 레이아웃에 android : duplicateParentState = "true"를 삽입하려고 시도했습니다. EditText 및 Button에서이 레이아웃을 터치하면 작동합니다. EditText 나 ​​Button을 만진다면 아무 일도 일어나지 않습니다. 나는 EditText & Button에서 android : clickable = "false"를 설정하려고 시도했지만 터치 이벤트는 여전히 부모에게 걸러지지 않습니다.

부모님에게 전달하기 위해 내 일정을 터치 이벤트에 투명하게 표시하려면 어떻게해야하나요? 내가 원하는 것은 EditText와 Button이 함께 작동하도록하기 위해서 하나를 만지면 둘 다 눌려진 것처럼 보입니다.

<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

+0

감사합니다. 이 솔루션을 찾기 위해 많은 시간을 보냈습니다. 귀하의 의견은 나를 위해 매우 유용했습니다 – alaster

답변

0

나는 당신이 당신의 RelativeLayout의 대신 클릭에 android:focusable="true"을 원하는 생각 : 여기

내가 현재 사용하고있는 XML이다. "내 견해를 터치하여 부모에게 전달할 수 있도록 내 견해를 투명하게 만들려면 어떻게해야합니까?" EditText를 클릭하면 버튼 onClick()이 호출되기를 원합니까?

+0

내가 원했던 것은 버튼을 클릭하면 기본 RelativeLayout에서 이벤트를 처리하기를 원했던 것입니다. 결국에는 문제를 다른 방법으로 해결했지만 EditText의 drawableRight로 설정 한 가짜 버튼을 만들었습니다. 그런 식으로 두 버튼을 동시에 누르는 것처럼 보입니다. – Kevin

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

+0

@ 케빈 좋은 팁! – JAL

관련 문제