2012-04-20 14 views
6

La mia attività ha una barra superiore e una barra in basso. lo spazio tra barra superiore e barra inferiore ha un aspetto lineare con diverse viste in formato interno. Perché non voglio ridimensionare il layout ogni volta che viene visualizzato il pannello di controllo, quindi ho impostato android: windowSoftInputMode = "adjustPan" per la mia attività in manifest. Ma quando si apre la softkey, voglio scorrere verso il basso per selezionare un altro editatext da inserire, non mi permette di farlo. Im solo in grado di selezionare l'edittext in fondo quando chiudo la softkey. È molto fastidioso e scomodo. Come posso far funzionare insieme sia la modalità scrollview che ajustpan per i softkey?Come scorrere il mio layout quando si imposta android: windowSoftInputMode = "adjustPan"?

Please help me out. grazie mille.

+0

Ho lo stesso problema, ma non mi piace fare la codifica che hai fatto per "fingere" ... hmm – Ted

+0

finora questa soluzione ha funzionato bene, ho anche cercato un'alternativa che sia più semplice. Spero che qualcun altro condivida una soluzione migliore per questo problema. – MichaelP

+0

Ma questa soluzione nasconde i pulsanti quando viene visualizzata la tastiera virtuale. Ma a seconda della risoluzione dello schermo, ecc., Potrebbe non essere necessario nascondere il pulsante, giusto? – Ted

risposta

1

messo quelli EditText in un ScrollView come questo:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/scrollView1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <EditText 
      android:id="@+id/editText1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" > 

      <requestFocus /> 
     </EditText> 

     <EditText 
      android:id="@+id/editText2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

     <EditText 
      android:id="@+id/editText3" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 

</ScrollView> 
+0

non mi chiedono come creare un layout in xml, voglio sapere come scorrere il mio layout quando ho impostato android: windowSoftInputMode = "adjustPan" per la mia attività. – MichaelP

4

Finalmente, scopro una soluzione per il mio problema, quindi voglio condividere per qualcuno forse avere lo stesso problema in futuro. Una breve descrizione del mio layout come segue:

<myRelativeLayout> 
<topbar.../> 
<myscrollView> 
    <linearLayout> 
     //all stuff controls:editview,textview,.... 
    </linearLayout> 
</myscrollView> 
<bottombar.../> 

ho creare classe personalizzata myRelativeLayout estendere RelativeLayout

public class myRelativeLayout extends RelativeLayout{ 

public interface OnRelativeLayoutChangeListener { 
    void onLayoutPushUp(); 
    void onLayoutPushDown(); 
} 

private OnRelativeLayoutChangeListener layoutChangeListener; 
public myRelativeLayout(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    final int proposedheight = MeasureSpec.getSize(heightMeasureSpec); 
    final int actualHeight = getHeight(); 

    if (actualHeight > proposedheight){ 
     // Keyboard is shown 
     layoutChangeListener.onLayoutPushUp(); 
    } else if(actualHeight < proposedheight){ 
     // Keyboard is hidden 
     layoutChangeListener.onLayoutPushDown(); 
    }  
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 

public void setLayoutChangeListener(OnRelativeLayoutChangeListener layoutChangeListener) { 
    this.layoutChangeListener = layoutChangeListener; 
} 

public OnRelativeLayoutChangeListener getLayoutChangeListener() { 
    return layoutChangeListener; 
} 

}

E nella mia attività, ho appena impostato setLayoutChangeListener per myRelativeLayout per nascondere il tasto in basso quando viene visualizzata la softkey e viene visualizzato il tasto in basso quando la tastiera nasconde:

myRlayout.setLayoutChangeListener(new OnRelativeLayoutChangeListener() { 

     @Override 
     public void onLayoutPushUp() { 
      // TODO Auto-generated method stub 
      myBottombar.setVisibility(View.GONE);//in my case i need to setVisibility(View.GONE) to bottombar in order for this bar is not displayed when softkeyboard show up. 
     } 

     @Override 
     public void onLayoutPushDown() { 
      // TODO Auto-generated method stub 
      myBottombar.setVisibility(View.VISIBLE);// redisplay myBottombar when keyboard is closed. 

     } 
    }); 

Non dimenticare set android: windowSoftInputMode = "adjustResize" per l'attività. Spero che questo utile per qualcuno abbia avuto lo stesso problema.

+0

molto utile, grazie mille –

+0

Grazie per questo, tuttavia, non c'è un modo per farlo senza la codifica aggiuntiva che "falsa" la funzionalità che vogliamo? – Ted

Problemi correlati