2013-07-24 3 views
8

Ich habe mein Problem auf das kleinste Beispiel vereinfacht, wenn es reproduziert werden kann.VideoView wird nicht richtig gerendert, nachdem die Dialog-Tastatur verschwunden ist

So:

  • 1-Aktivität mit Videoview und Image.
  • Nach dem Klicken auf ImageView wird AlertDialog angezeigt.
  • AlertDialog hat 1 EditText-Feld.
  • Ich berühre diesen EditText und Standard-Android-Tastatur wird angezeigt.
  • Tastatur schließen.
  • Dialogfeld schließen.

Problem: Videoview Grenzen (schwarzes Rechteck) wurden erweitert und damit Image wird nicht mehr gezeigt.

Jede Hilfe wird geschätzt! Vielen Dank.

BEFORE AFTER

Code:

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

Ich denke, dass es in diesem Fall sicher ist, deine Aktivität im Manifest 'android hinzuzufügen: windowSoftInputMode =" adjustNothing "'. –

Antwort

3

als eine temporäre Lösung, habe ich ein Runnable, dass der Videoview unsichtbar macht, dann ist es sichtbar nach 200 Millisekunden macht:

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

Hoffnung diese temporäre Lösung für jetzt

nennt dies hilft Methoden, wenn Ihre Tastatur sich versteckt, wie bei der ENTER-Taste, oder wenn Sie eine bestimmte Ansicht außerhalb der Tastatur berühren, um sie auszublenden ... aber nicht in das onTouchEvent() der Aktivität oder in die onUserInteraction eingeben, um nicht weiter zu blinken

+0

1- Lesen Sie meinen Kommentar zu der Frage. 2- Ich denke, Aufruf von 'requestLayout();' ist genug, anstatt eine verzögerte Runnable zu buchen. –

+0

, aber wenn es nichts anpasst, wird mein Bearbeitungstext von der Soft-Input-Tastatur abgedeckt! ... ich werde das requestLayout() versuchen anstatt ein runnable zu posten ... du meinst es in den gleichen Situationen zu benutzen ... das ist was ich von dir verstehe –

+1

Spiel einfach mit dem 'android: windowSoftInputMode' herum. Ich denke, dass dies die Arbeit für Sie erledigen könnte: http://www.sherif.mobi/2011/10/softkeyboard-problem-with-tabhost-on.html –

Verwandte Themen