2017-04-17 45 views
20

的Android工作室(V 2.3.1)保持與固定DP vanue更換的RelativeLayout的match_parent。例如,當我輸入match_parent作爲寬度時,它用368dp替換它。當我測試應用程序時,我發現RelativeLayout確實是錯誤的。的Android工作室保持與固定DP值替換match_parent

有誰知道如何解決這個問題?

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="be.mawey.lamachat.LoginActivity"> 


    <RelativeLayout 
     android:layout_width="match_parent" <!-- THIS IS BEING REPLACED WITH 368dp --> 
     android:layout_height="match_parent" <!-- THIS IS BEING REPLACED WITH 495dp --> 
     tools:layout_editor_absoluteX="8dp" 
     tools:layout_editor_absoluteY="8dp"> 

     <Button 
      android:id="@+id/buttonLogin" 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:layout_alignParentStart="true" 
      android:layout_centerVertical="true" 
      android:background="@color/colorPrimary" 
      android:text="Login" 
      android:textColor="@android:color/white" 
      android:textSize="18sp" 
      tools:layout_editor_absoluteX="8dp" 
      tools:layout_editor_absoluteY="292dp" /> 

     <EditText 
      android:id="@+id/editTextCode" 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:layout_above="@+id/buttonLogin" 
      android:layout_alignParentStart="true" 
      android:ems="10" 
      android:hint="Secret code here" 
      android:inputType="numberPassword" 
      tools:layout_editor_absoluteX="8dp" 
      tools:layout_editor_absoluteY="234dp" /> 

     <TextView 
      android:id="@+id/textView3" 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:fontFamily="monospace" 
      android:text="example" 
      android:textAlignment="center" 
      android:textColor="@color/colorPrimaryDark" 
      android:textSize="36sp" 
      android:textStyle="italic" 
      tools:layout_editor_absoluteX="8dp" 
      tools:layout_editor_absoluteY="16dp" /> 
    </RelativeLayout> 

</android.support.constraint.ConstraintLayout> 
+0

保持match_parent不使用固定的dp。 –

+0

你是什麼意思?我不使用固定的Dp,Android工作室只是不讓我使用match_parent –

+0

可以分享你的完整的xml文件 –

回答

24

enter image description here

不喜歡它在照片

+0

這工作!謝謝! –

0
<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 


    <Button 
     android:id="@+id/buttonLogin" 
     android:layout_width="0dp" 
     android:layout_height="50dp" 
     android:layout_alignParentStart="true" 
     android:layout_centerVertical="true" 
     android:background="@color/colorPrimary" 
     android:text="Login" 
     android:textColor="@android:color/white" 
     android:textSize="18sp" 
     tools:layout_constraintRight_creator="1" 
     tools:layout_constraintBottom_creator="1" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintRight_toRightOf="@+id/editTextCode" 
     tools:layout_constraintLeft_creator="1" 
     android:layout_marginBottom="169dp" 
     app:layout_constraintLeft_toLeftOf="@+id/editTextCode" /> 

    <EditText 
     android:id="@+id/editTextCode" 
     android:layout_width="0dp" 
     android:layout_height="50dp" 
     android:layout_above="@+id/buttonLogin" 
     android:layout_alignParentStart="true" 
     android:ems="10" 
     android:hint="Secret code here" 
     android:inputType="numberPassword" 
     tools:layout_constraintRight_creator="1" 
     tools:layout_constraintBottom_creator="1" 
     app:layout_constraintBottom_toTopOf="@+id/buttonLogin" 
     android:layout_marginStart="8dp" 
     android:layout_marginEnd="8dp" 
     app:layout_constraintRight_toRightOf="parent" 
     tools:layout_constraintLeft_creator="1" 
     android:layout_marginBottom="8dp" 
     app:layout_constraintLeft_toLeftOf="parent" /> 

    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="0dp" 
     android:layout_height="50dp" 
     android:fontFamily="monospace" 
     android:text="example" 
     android:textAlignment="center" 
     android:textColor="@color/colorPrimaryDark" 
     android:textSize="36sp" 
     android:textStyle="italic" 
     tools:layout_constraintTop_creator="1" 
     tools:layout_constraintRight_creator="1" 
     android:layout_marginStart="8dp" 
     android:layout_marginEnd="8dp" 
     app:layout_constraintRight_toRightOf="parent" 
     android:layout_marginTop="16dp" 
     tools:layout_constraintLeft_creator="1" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintTop_toTopOf="parent" /> 

    </android.support.constraint.ConstraintLayout> 
+0

這使我的佈局變得瘋狂,問題是約束佈局 –

18

如圖簡而言之:

不能使用match_parent作爲的ConstraintLayout兒童的維度。您應該使用0dp這意味着「match_constraint」和約束了雙方家長的面:

android:layout_width="0dp" 
app:layout_constraintStart_toStartOf="parent" 
app:layout_constraintEnd_toEndOf="parent" 

android:layout_height="0dp" 
app:layout_constraintTop_toTopOf="parent" 
app:layout_constraintBottom_toBottomOf="parent" 

一下背景資料的(或 - 從我相信其中混淆莖):

雖然我似乎無法找到一個證明,並且我的同事聲稱我錯了 - 我確定the android documentation for constraintLayout用於指導我們來說,開發者,以使用「要麼0dp或match_parent」作爲layout_widthlayout_height值,以指示使用指定的約束條件(而不是使用指定的固定值,該值對應的視圖的尺寸應該由constraintLayout來確定或通過確定其內容的維度)。我也很確定我以這種方式使用了這個值(match_parent),並且在切換到AndroidStudio 2.3.1之前它已經工作了。

無論我是對還是妄想,但事實是,目前the documentation狀態:

重要:MATCH_PARENT不支持包含在ConstraintLayout窗口小部件,但類似的行爲可以通過MATCH_CONSTRAINT與定義相應的左/右或頂部/底部約束被設置爲「父」。

另外,如我記住它使用的0dp值被認爲相同於:

小部件的尺寸可以通過設置機器人來指定:layout_width和機器人:在3個不同layout_height屬性方法:

(...)

  • 使用0dp,這是 「MATCH_CONSTRAINT」
  • 01相當於

編輯器,使用「推斷約束」作爲Sirnivas的答案實際使用0dp方法。

注意:「match_constraint」似乎不是可以使用的值。 0dp似乎是維度與約束匹配的實際值。

+1

你似乎是完全清醒的(而不是妄想),因爲這是正確的答案,應該被標記爲這樣。我嘗試了接受的答案。它爲子佈局添加了無意義的額外屬性,並且仍然*錯誤地硬編碼了dp值。 –

+0

謝謝@MylesBennett,很高興知道。至於目前接受的答案 - 因爲它使用可視化編輯器,它使我們對開發人員的控制更少,而且確實可以推斷出額外的不需要的值。 –