单击TableRow时将焦点设置为子EditText

时间:2012-12-05 15:35:49

标签: android android-layout android-tablelayout

我有以下布局:

<TableLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:stretchColumns="*">

    <TableRow
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:descendantFocusability="beforeDescendants">

        <TextView
            android:text="Login:"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

        <EditText
            android:id="@+id/password"
            android:background="@null"
            android:duplicateParentState="true"
            android:inputType="text"
            android:maxLines="1"
            android:singleLine="true"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>           
    </TableRow>
</TableLayout> 

我的EditText占用屏幕宽度的一半,我希望它在点击TableRow时获得焦点。我该如何设置呢?没有任何额外的代码可以吗?

1 个答案:

答案 0 :(得分:1)

我最终实现了一个监听器。我改变了布局:

<TableRow
    android:onClick="focusChildEditText">
    ...

    <EditText
        ...
        android:tag="focusable"/>  

</TableRow>

并使用以下监听器:

public void focusChildEditText(View view) {
    try {
        EditText editText=((EditText) ((ViewGroup) view).findViewWithTag("focusable"));
        if (editText!=null) 
            editText.requestFocus();
    } catch (ClassCastException e) {}
}

一切都按照我的需要运作。