8 Stimmen

Wie kann ich einen Android MediaController von Layout-Xml erscheinen?

Ich habe eine layout.xml-Datei mit dem folgenden XML erstellt, aber ich kann den MediaController nicht bekommen, um überhaupt zu erscheinen.

<MediaController android:id="@+id/media_controller"
    android:layout_width="fill_parent"
    android:layout_height="200px"
    android:visibility="visible"/>

Im Code kann ich einen Verweis darauf aus dem Code erhalten, show() aufrufen usw., aber es erscheint nie.

Ich habe in der Android-Entwicklungsdokumentation festgestellt ( MediaController.html ), dass dort steht: "Der Weg, diese Klasse zu verwenden, ist, sie programmatisch zu instanziieren.", vielleicht bin ich also ein Dummkopf und muss nur etwas anders machen, z. B. nicht das tun, was ich gerade tue :)

Ich KANN es anzeigen lassen, wenn ich es programmatisch mache, aber es muss immer auf dem Bildschirm angezeigt werden. Bin ich nur dumm, oder ist es einfach nicht gemeint, über XML aufgeblasen werden?

16voto

CommonsWare Punkte 950864

Von dieses Beispielprojekt :

ctlr=new MediaController(this);
ctlr.setMediaPlayer(video);
video.setMediaController(ctlr);

Sie erscheint dann, wenn Sie den Bildschirm an den unteren Rand des Bildschirms tippen. VideoView .

Was die ständige Anzeige auf dem Bildschirm betrifft, so weiß ich nicht, ob das möglich ist. Du kannst immer deinen eigenen Controller erstellen. Hier ist ein Beispielprojekt das einen eigenen transparenten Pop-up-Controller erstellt. Es ist gar nicht so schwer, und du hast die volle Kontrolle über alles, einschließlich der Einstellung, dass es die ganze Zeit auf dem Bildschirm ist.

10voto

Rob Gorman Punkte 101

Sie können den MediaController daran hindern, sich zu verstecken, indem Sie MediaController erweitern und hide() überschreiben, um nichts zu tun. z.B.:

class UnhideableMediaController extends MediaController
{
    // override whichever contstructors you need to. 
    public UnhideableMediaController(Context context)
    {
      super(context);
    }

    // override hide to do nothing
    public void hide()
    {
      // don't hide
    }
}

3voto

duessi Punkte 5862

Durch die Verwendung von show(0) Mediensteuerung wird angezeigt, bis hide() durch eine Interaktion mit dem Spieler aufgerufen wird. Ich habe leider noch keine Möglichkeit gefunden, hide() zu verhindern;-(

MediaController mc = new MediaController(MPlayer.this);  
 mc.setMediaPlayer(MPlayer.this);  
 mc.setEnabled(true);

 View mMediaControllerView = (View)findViewById(R.id.media_controller); //get it from your layout

 mc.setAnchorView(mMediaControllerView);
 mMediaControllerView.setOnTouchListener(mPlayerTouchListener);//also use show() in onTouchListener

 new Handler().postDelayed(new Runnable() {

     public void run() {
        mc.show(0);
     } }, 1500);

Warten, bis sich der Bildschirm aufgebaut hat, um einen Fehler in Android zu vermeiden (hier 1,5 Sekunden)

2voto

Napolean Punkte 4845

Sie können einen Mediacontroller aus dem Layout xml aufblasen. Auch nach Erhalt eines Verweises auf sie kann ein videoview als Anker setzen.

  • Dies führt jedoch zu einem Absturz, sobald Sie versuchen, den mediacontroller zu berühren (ich versuche herauszufinden, warum das passiert).

Auch in diesem mediaController wird immer erscheinen.

<?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="match_parent"
    android:orientation="vertical" >

    <VideoView
        android:id="@+id/mVideoView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <MediaController
        android:id="@+id/mediaController1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:layout_alignParentBottom="true"
        android:focusable="false"
        android:focusableInTouchMode="false"/>
</RelativeLayout>

In Tätigkeit,

public class AnimationActivity extends Activity implements OnClickListener {

    private MediaController mController = null;
    private VideoView mVideoView = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animation);
        mController = (MediaController) findViewById(R.id.mediaController1);
        mController.post(new Runnable() {
            @Override
            public void run() {
                mVideoView = (VideoView) findViewById(R.id.mVideoView);
                mVideoView.setVideoURI(Uri.parse("android.resource://"
                        + getPackageName() + "/" + R.raw.video0));
                mController.setAnchorView(mVideoView);
                mVideoView.setSoundEffectsEnabled(false);
                mVideoView.start();
            }
        });
    }
}

0voto

dpn Punkte 582

http://www.docstoc.com/docs/9811647/Media-on-the-Android-Platform

In diesem Dokument wird vorgeschlagen, dass Sie den Controller erweitern müssen, um das gewünschte Verhalten zu erreichen.

Man könnte es auch sehr lange zeigen, nehme ich an ;)

Ich kämpfe derzeit damit, dass der Controller überhaupt angezeigt wird, wenn ich eine Taste drücke :\

(auch interessant, wie schnell Google diese Frage zu den Suchergebnissen hinzugefügt hat)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X