调用setVisibility(View.VISIBLE)时不改变焦点



我有一个场景,当一个操作发生时,我想使某些字段可见。这工作得很好,但是当我在一个包含一些其他字段的LinearLayout上调用setVisible(View.VISIBLE)时,例如TextEdit,焦点转移到TextEdit(或至少屏幕滚动到它)。

是否有一种方法,不有焦点变化时调用setVisibility(View.VISIBLE)?

LinearLayout的XML布局我可以调用setVisible on:

<LinearLayout 
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:focusable="true"
    android:focusableInTouchMode="true">
    <TextView
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textStyle="normal"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:paddingBottom="5dp"
        android:text="" />
     <EditText android:id="@+id/entry"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:gravity="right" /> 
    <View
        android:layout_marginTop="8dp"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/grey"
        android:visibility="gone" />
</LinearLayout>

初始化的代码:

private TextView mName;
private EditText mEntry;

     private void initialize() {
        LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.field_multiline_entry, this);
        // setup fields
        mName = (TextView)findViewById(R.id.name);
        mEntry = (EditText)findViewById(R.id.entry);
        mEntry.addTextChangedListener(textWatcher);
    }

和调用setVisibility:

的代码
        if(sectionFieldView != null && sectionFieldView.getVisibility() != View.VISIBLE) 
        {
            sectionFieldView.setVisibility(View.VISIBLE);
        }

谢谢!

感谢我下面的朋友,下面的代码可以工作。它基本上使所有的LinearLayout的后代无法获得焦点,这意味着当他们没有获得焦点时,屏幕不会滚动到他们。到目前为止,我找到的唯一方法是防止这种情况发生……

        ((ViewGroup) fieldView).setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
        fieldView.setVisibility(View.VISIBLE);
        ((ViewGroup) fieldView).setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);

您可以尝试android:descendantFocusabilitybeforeDescendants参数在您的LinearLayout?

Constant    Value   Description
beforeDescendants   0   The ViewGroup will get focus before any of its descendants.
afterDescendants    1   The ViewGroup will get focus only if none of its descendants want it.
blocksDescendants   2   The ViewGroup will block its descendants from receiving focus.

我发现改变视图。看不见。

最新更新