2017-04-17 47 views
0

假设我有这样的粉红色框:如何使EditText的父级可点击?

pinku bokkusu

它由LinearLayout与其子:TextView的字段名和EditTextEditText被故意禁用。我想要的是,用户可以在用户想要的粉红色框上点击任何地方。顺便说一句,请忽略任何您发现奇怪的UI/UX事物。

我试过,但用户无法发掘这一EditText占地面积。用户必须点击TextView或粉红色框上的空白区域,以便应用程序获得“点击”。但是如果用户点击EditText的地区,什么都不会发生。

我试着用XML的性能有一定的东西,比如设置LinearLayout打的clickabletrue,和所有的孩子或只是EditText'的clickablefocusablefocusableInTouchModefalse,一切都是徒劳的属性。 EditText区域仍然无法点击。

有什么想法?难道只能通过xml达到吗?应该以编程方式完成,只是为了绕过EditText的点击?

+0

你的描述很混乱。 – RATHI

+0

发布edittext的布局代码 – rafsanahmad007

回答

0

您需要通过的意见,要求父布局(LinearLayout中,不管)和循环,如果你不想将它们绑定所有。如果你使用数据绑定更容易。无论如何,这里是一个解决方案(一小段代码是需要!)。

布局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical"> 

    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="out of focus"/> 

    <LinearLayout 
     android:id="@+id/linearTest" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     > 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="test for clicking" 
      /> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="another clicking test" 
      /> 

     <EditText 
      android:id="@+id/editTest" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="focus edittext when clicking linearlayout or other elements inside" 
      /> 
    </LinearLayout> 

</LinearLayout> 

代码:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     setContentView(R.layout.linear_focus_test); 

     final EditText editText = (EditText) findViewById(R.id.editTest); 

     LinearLayout linearTest = (LinearLayout) findViewById(R.id.linearTest); 
      for (int i = 0; i < linearTest.getChildCount(); i++) 

      View v = linearTest.getChildAt(i); 
      v.setOnClickListener(new View.OnClickListener() { 
       @Override public void onClick(View v) { 
        editText.requestFocus(); 
       } 
      }); 
     } 
} 

如果你不喜欢的样板,你也可以使用拉姆达如果您至少使用API​​(使用1.8功能)

for (int i = 0; i < linearTest.getChildCount(); i++) 
      linearTest.getChildAt(i).setOnClickListener(v1 -> editText.requestFocus()); 

24你甚至可以缩短:

IntStream.range(0, linearTest.getChildCount()).forEach(i -> linearTest.getChildAt(i).setOnClickListener(v1 -> editText.requestFocus())); 
1

您可以简单地添加onTouch监听器,而不是点击监听器。