2013-07-24 4 views
8

Ho semplificato il mio problema nell'esempio più piccolo quando può essere riprodotto.VideoView non viene visualizzato correttamente dopo la scomparsa della tastiera di Dialog

Quindi:

  • 1 attività con VideoView e ImageView.
  • Dopo aver cliccato su ImageView, viene visualizzato il messaggio di avviso.
  • AlertDialog ha 1 campo EditText.
  • Tocco questo EditText e viene mostrata la tastiera standard di Android.
  • Chiude la tastiera.
  • Chiudi finestra di dialogo.

Problema: i confini di VideoView (rettangolo nero) sono state estese e quindi ImageView non è mostrato più.

Qualsiasi aiuto è apprezzato! Grazie.

BEFORE AFTER

Codice:

MainActivity.java

import android.app.Activity; 
import android.app.AlertDialog; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.VideoView; 

public class MainActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final Activity act = this; 
    final VideoView videoView = (VideoView) findViewById(R.id.videoView1); 
    videoView.setVideoPath("/mnt/sdcard/s1ep01.mp4"); 
    videoView.requestFocus(); 
    findViewById(R.id.imageView1).setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      AlertDialog.Builder builder = new AlertDialog.Builder(act); 
      View view = LayoutInflater.from(act).inflate(R.layout.dialog, null); 
      builder.setView(view); 
      builder.setPositiveButton("Save translation", null); 
      builder.setNegativeButton("Cancel", null); 
      AlertDialog dialog = builder.create(); 
      dialog.show(); 
     } 
    }); 
} 
} 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

<VideoView 
    android:id="@+id/videoView1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" /> 

<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/videoView1" 
    android:src="@android:drawable/btn_dialog" /> 

</RelativeLayout> 

dialog.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

</RelativeLayout> 
+0

Penso che in questo caso sia sicuro aggiungere alla tua attività nel file manifest 'android: windowSoftInputMode =" adjustNothing "'. –

risposta

3

come una soluzione temporanea, ho creato un Runnable che rende il VideoView invisibile, quindi la rende visibile dopo 200 milli secondi:

// Hide the VideoView 
videoLayout.setVisibility(View.INVISIBLE); 

// create a handler to handle the delayed runnable request 
new Handler().postDelayed(new Runnable() { 

    @Override 
    public void run() { 
     // After the 200 millis (which are passes as a second parameter to this postDelayed() method in the last line of the code, this handler will invoke the following method : 

     // run on UI so you can set the Visibitity of the UI elements 
     runOnUiThread(new Runnable() { 
    @Override 
      public void run() {videoLayout.setVisibility(View.VISIBLE);} // make it visible again 
}); 
    } 
}, 200); // this is the second parameter which decides when this handler will run it's run() method 

speranza questa soluzione temporanea aiuta per ora

chiamano questo metodi quando la tastiera si nasconde, allo stesso modo sul tasto INVIO, o quando si tocca una certa vista fuori dalla tastiera per nasconderlo ... ma non metterlo in onTouchEvent() dell'attività o in onUserInteraction in modo da non continuare a lampeggiare

+0

1- Leggi il mio commento sulla domanda. 2- Penso che chiamare 'requestLayout();' sia sufficiente invece di postare un runnable ritardato. –

+0

ma se non regola nulla, il mio testo di modifica sarà coperto dalla tastiera di inserimento software!? ... proverò la requestLayout() invece di pubblicare un runnable ... vuoi dire usarlo nelle stesse situazioni invece ... questo è quello che ho capito da te –

+1

Basta giocare con 'android: windowSoftInputMode'. Penso che questo potrebbe fare il lavoro per te: http://www.sherif.mobi/2011/10/softkeyboard-problem-with-tabhost-on.html –

Problemi correlati