簡體   English   中英

調用 setVisibility(View.VISIBLE) 時不改變焦點

[英]Not changing focus when calling setVisibility(View.VISIBLE)

我有一個場景,當一個動作發生時,我想讓某些字段可見。 這工作正常,但是當我在包含一些其他字段(例如 TextEdit)的 LinearLayout 上調用 setVisible(View.VISIBLE) 時,焦點會轉移到 TextEdit(或至少屏幕滾動到它)。

有沒有辦法在調用 setVisibility(View.VISIBLE) 時不改變焦點?

我可以調用 setVisible 的 LinearLayout 的 XML 布局:

<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);

您可以在 LinearLayout 上嘗試使用beforeDescendants參數的android:descendantFocusability嗎?

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.

我發現將 View.INVISIBLE 更改為 View.VISIBLE 不會導致焦點發生變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM