2011-03-17 38 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