0

我使用的MediaPlayer與該XMLAndroid的 - 不能改變的RelativeLayout寬/高動態

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

</WebView> 
<RelativeLayout 
     android:id="@+id/relativeL" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true"> 
    <SurfaceView 
     android:id="@+id/surfView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
</RelativeLayout> 

我試圖做的是改變relativeL的寬度/高度(等播放機內它)當我按下一個鍵

我在keypress上調用這個函數,但它沒有任何影響,沒有錯誤,沒有任何事情發生。在我的xml中添加webview之前,此功能工作得很好。正如你可以看到webview在玩家的背景中。下面是函數:

public static boolean makePlayerSmall(){ 
     RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(650, 400); 
     params1.setMargins(100, 120, 0, 0); 
     MainActivity.RL.setLayoutParams(params1); 
     MainActivity.RL.invalidate(); 
     return true; 
    } 

而且,這裏是我的MainActivity

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setImmersiveFullScreen(); 
     setContentView(R.layout.activity_main); 
     RL = (RelativeLayout)findViewById(R.id.relativeL); 

     webView = (WebView)findViewById(R.id.webView); 
     assert webView != null; 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setAppCacheEnabled(false); 
     webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 

     webView.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       return false; 
      } 
     }); 

     webView.addJavascriptInterface(new MyJSInterface(this), "MyJSInterface"); 
     webView.loadUrl("http://85.118.98.251/misho_android/c/?debug&debug_key=4581f079f3629a2a78909251fb402a99&mac=00%3A1A%3A79%3A04%3A97%3A3E"); 

     //setup ui elements 
     vidSurface = (SurfaceView) findViewById(R.id.surfView); 
     vidHolder = vidSurface.getHolder(); 
     vidHolder.addCallback(this); 
    } 

onCreate方法任何幫助將不勝感激,謝謝!

回答

0

我試過很多東西,最後它的工作原理是在運行主線程代碼(但我想它是在主線程運行在首位)。我現在要做一些關於這個話題的研究。

(new Handler(Looper.getMainLooper())).post(new Runnable() { 
        @Override 
        public void run() { 
         Player.makePlayerSmall(); 
        } 
       }); 
0
public static void replace(View target, ViewGroup.LayoutParams params) { 
    if (target == null) { 
     return; 
    } 
    final ViewParent viewParent = target.getParent(); 

    if (viewParent != null && viewParent instanceof ViewGroup) { 
     final ViewGroup parent = (ViewGroup) viewParent; 

     final int index = parent.indexOfChild(target); 
     parent.removeViewInLayout(target); 

     parent.addView(target, index, params); 

    } else { 
     throw new IllegalStateException("ViewStub must have a non-null ViewGroup viewParent"); 
    } 
} 

試試這個替代品