2016-06-27 63 views
0

是否有可能加載不同的XML佈局基於其當前的方向,而不是僅僅通過縱向/橫向?如何設置基於不同方向的視圖重力(0,90,180,270)?

我正在寫一個前置攝像頭功能的應用程序。 當設備旋轉180度時,我的CAPTURE按鈕現在就位於相機旁邊。當我嘗試點擊CAPTURE按鈕時,這會導致相機被我的手指擋住。

在我的景觀XML中,按鈕總是在右側。我喜歡將它對準主屏幕按鈕(遠離前置攝像頭)。

如果不能通過XML完成,是否有另一種方法來實現這一點?

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <SurfaceView 
     android:id="@+id/surfaceView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <ImageButton 
     android:id="@+id/image_capture" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:layout_margin="24dp" 
     android:background="@drawable/rounded_button_primary" 
     android:padding="28dp" 
     android:src="@drawable/ic_camera_black_48dp" 
     android:tint="@color/icons" /> 

</RelativeLayout> 
+0

你解決你的活動方向爲橫向: Android將通過覆蓋onConfigurationChanged方法這樣

@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks the orientation of the screen if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); } }' 

編輯

可以設置重力自動重新加載XML? –

回答

1

是的,你可以爲景觀視圖分別設計一個同名的xml文件,創建一個名爲layout-land的文件夾,並在其中放置xml。

private int getScreenOrientation() { 
    int rotation = getWindowManager().getDefaultDisplay().getRotation(); 
    DisplayMetrics dm = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(dm); 
    int width = dm.widthPixels; 
    int height = dm.heightPixels; 
    int orientation; 
    // if the device's natural orientation is portrait: 
    if ((rotation == Surface.ROTATION_0 
      || rotation == Surface.ROTATION_180) && height > width || 
     (rotation == Surface.ROTATION_90 
      || rotation == Surface.ROTATION_270) && width > height) { 
     switch(rotation) { 
      case Surface.ROTATION_0: 
       orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; 
       break; 
      case Surface.ROTATION_90: 
       orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; 
       break; 
      case Surface.ROTATION_180: 
       orientation = 
        ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT; 
       break; 
      case Surface.ROTATION_270: 
       orientation = 
        ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; 
       break; 
      default: 
       Log.e(TAG, "Unknown screen orientation. Defaulting to " + 
         "portrait."); 
       orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; 
       break;   
     } 
    } 
    return orientation; 
} 
+0

不,我的意思是有2個不同的景觀xmls。一個攝像機位於右側,另一個攝像機位於左側。 –

+0

好吧,現在我明白了我正在編輯我的文章 – SaravInfern