2013-07-24 26 views
8

Uprościliśmy mój problem do najmniejszego przykładu, kiedy można go odtworzyć.VideoView nie jest poprawnie renderowany po zniknięciu klawiatury Dialog

Więc:

  • 1 aktywność z VideoView i ImageView.
  • Po kliknięciu na ImageView pojawia się AlertDialog.
  • AlertDialog ma 1 pole EditText.
  • Dotykam tego EditText i wyświetlana jest standardowa klawiatura systemu Android.
  • Zamknij klawiaturę.
  • Zamknij okno dialogowe.

problem: Granice VideoView'S (czarny prostokąt), a zatem rozszerzono ImageView nie wykazała już.

Każda pomoc jest doceniana! Dzięki.

BEFORE AFTER

Kod:

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

Myślę, że w tym przypadku jest bezpiecznie dodać do swojej aktywności w manifeście 'android: windowSoftInputMode =" adjustNothing "'. –

Odpowiedz

3

jako rozwiązanie tymczasowe, stworzyłem Runnable, który sprawia, że ​​VideoView Niewidoczny, to sprawia, że ​​widoczne po 200 mili sekundach:

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

nadzieję, że to tymczasowe rozwiązanie pomaga teraz

nazywają to metody ukrywania klawiatury, podobnie jak w przypadku klawisza ENTER, lub po dotknięciu określonego widoku poza klawiaturą, aby go ukryć ... ale nie umieszczaj go w funkcji onTouchEvent() działania lub w akcji onUserInteraction, aby nie migać w dalszym ciągu

+0

1- Przeczytaj mój komentarz na pytanie. 2- Myślę, że wywołanie 'requestLayout();' wystarcza zamiast opublikować opóźnioną operację. –

+0

ale jeśli nic nie dostosuje, mój tekst edycyjny będzie objęty miękką klawiaturą wejściową! ... spróbuję requestLayout(), zamiast publikować uruchamianie ... masz na myśli używanie go w tych samych sytuacjach zamiast ... to, co zrozumiałem od ciebie –

+1

Po prostu baw się z 'android: windowSoftInputMode'. Myślę, że to może zrobić dla ciebie zadanie: http://www.sherif.mobi/2011/10/softkeyboard-problem-with-tabhost-on.html –

Powiązane problemy