Mam scenariusz, w którym po wykonaniu akcji chcę, aby niektóre pola były widoczne. Działa to dobrze, jednak kiedy wywołuję setVisible (View.VISIBLE) na LinearLayout, który zawiera kilka innych pól, takich jak TextEdit, fokus przesuwa się do TextEdit (lub przynajmniej ekran przewija się do niego).Nie zmienia się fokus podczas wywoływania setVisibility (View.VISIBLE)
Czy istnieje sposób, aby nie zmieniać ostrości podczas wywoływania setVisibility (View.VISIBLE)?
Układ XML z LinearLayout mogę wywołującego setVisible na:
<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>
kod, który inicjuje go:
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);
}
I kod, który dzwoni setVisibility:
if(sectionFieldView != null && sectionFieldView.getVisibility() != View.VISIBLE)
{
sectionFieldView.setVisibility(View.VISIBLE);
}
Dzięki!
UPDATE
Dzięki moim przyjacielem poniżej następujący kod działa. Zasadniczo sprawia, że wszyscy potomkowie LinearLayout nie są w stanie uzyskać fokusa, co oznacza, że gdy jest widoczny, ekran nie przewija się do nich, ponieważ nie uzyskują ostrości. Tylko w ten sposób do tej pory znalazłem utrzymać takiej sytuacji ...
((ViewGroup) fieldView).setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
fieldView.setVisibility(View.VISIBLE);
((ViewGroup) fieldView).setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
spróbuj ustawić 'editText.setFocusable (false)' – Jas