Ho uno scenario in cui quando si verifica un'azione, voglio rendere visibili determinati campi. Funziona bene, tuttavia quando chiamo setVisible (View.VISIBLE) su un LinearLayout che contiene alcuni altri campi, come ad esempio TextEdit, lo stato attivo passa a TextEdit (o almeno lo schermo scorre ad esso).Non si cambia messa a fuoco quando si chiama setVisibility (View.VISIBLE)
C'è un modo per non avere il cambio di messa a fuoco quando si chiama setVisibility (View.VISIBLE)?
Il layout XML del LinearLayout posso chiamare 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>
Il codice che inizializza:
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);
}
e il codice che sta chiamando la setVisibility:
if(sectionFieldView != null && sectionFieldView.getVisibility() != View.VISIBLE)
{
sectionFieldView.setVisibility(View.VISIBLE);
}
Grazie!
UPDATE
Grazie al mio amico qui di seguito, il seguente codice funziona. In pratica, rende tutti i discendenti di LinearLayout non in grado di ottenere la messa a fuoco, il che significa che quando resi visibili lo schermo non scorre verso di loro poiché non ottengono la messa a fuoco. L'unico modo per la data che ho trovato per evitare che ciò accada ...
((ViewGroup) fieldView).setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
fieldView.setVisibility(View.VISIBLE);
((ViewGroup) fieldView).setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
impostazione Prova 'editText.setFocusable (false)' – Jas