2015-10-09 32 views
6

Belirli bir alanın görünür olmasını istediğiniz bir eylemin meydana geldiği bir senaryo var. Bu iyi çalışır, ancak TextEdit gibi diğer birkaç alanı içeren bir LinearLayout üzerinde setVisible (View.VISIBLE) olarak adlandırdığımda, odağı TextEdit'e kaydırır (veya en azından ekrana kaydırır).SetVisibility çağrılırken odağı değiştirmiyor (Görünüm.VISIBLE)

SetVisibility (View.VISIBLE) çağrılırken odak değişikliğine sahip olmanın bir yolu var mı?

Ben SetVisible çağıran yapabilirsiniz LinearLayout XML düzeni: it başlatır

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

kodu:

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

    } 

Ve kod bu setVisibility:

numaralı telefonu arıyor
 if(sectionFieldView != null && sectionFieldView.getVisibility() != View.VISIBLE) 
     { 
      sectionFieldView.setVisibility(View.VISIBLE); 
     } 

Teşekkürler!

GÜNCELLEME aşağıda arkadaşıma

Teşekkür, aşağıdaki kod çalışır. Temelde, LinearLayout'un tüm torunlarını odaklama yapamaz hale getirir, bu da görünür hale getirildiğinde ekranın, odaklanmadıkları için onlara kaydırılmaması anlamına gelir. Sadece yolu bugüne kadar ben ... Bunu önlemek için

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

deneyin ayarı '(yanlış) editText.setFocusable' Bu temelde ben görünür LinearLayout içeriğini yapmak gerekir ancak torunları görünürlük elde etmek istemezler ... zamanında olması gereken – Jas

cevap

4

Sen LinearLayout üzerinde android:descendantFocusabilitybeforeDescendants ile parametreyi deneyebilirsiniz bulduk?

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. 
+0

. Görünümde bir yöntem gibi görünmüyor. –

+0

Vay! Aslında işe yaradı ... teşekkürler! Aşağıdakileri yapmak zorundayım: \t \t \t \t ((ViewGroup) alanıView) .setDescendantFocusability (ViewGroup.FOCUS_BLOCK_DESCENDANTS); \t \t \t fieldView.setVisibility (View.VISIBLE); \t \t \t ((ViewGroup) alanıView) .setDescendantFocusability –

+0

Sanırım yukarıda yazdığım parametreyi .xml dosyanızda ayarlayabilir ve iyi çalışmalıdır. Sadece ekle 'android: descendantFocusability = "blocksDescendants" –