2015-10-08 5 views
1

Я работаю над экраном входа для своего приложения. Проблема в том, что я получаю белую строку внизу экрана на каждом устройстве и на эмуляторе. Здесь вы можете проверить вывод: http://www.imgur.com/cTMu4Ap Это мой xml-код для макета. Обратите внимание, что я использую свойство layout_weight для равного пространства между всеми устройствами.Белая линия внизу экрана (LinearLayout)

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    > 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_weight="0.5" 
     android:src="@mipmap/ic_launcher" 
     android:layout_gravity="center" 
     /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:orientation="vertical" 
     android:paddingLeft="55dp" 
     android:paddingRight="55dp" 
     android:background="@color/colorPrimary" 
     > 
     <EditText 
      android:id="@+id/edtEmailOrMobileNumber" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:hint="@string/email_or_mobile_number" 
      android:background="@null" 
      android:inputType="textEmailAddress" 
      android:textColor="@android:color/white" 
      android:textColorHint="@android:color/white" 
      android:drawableLeft="@drawable/ic_clear" 

      android:layout_marginTop="64dp" 
      /> 
     <View 
      android:layout_width="match_parent" 
      android:layout_height="1dp" 
      android:background="@android:color/white" 
      android:layout_marginTop="10dp" 
      android:layout_marginBottom="10dp" 
      /> 
     <EditText 
      android:id="@+id/edtPassword" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:hint="@string/password" 
      android:background="@null" 
      android:inputType="textPassword" 
      android:textColor="@android:color/white" 
      android:textColorHint="@android:color/white" 
      android:drawableLeft="@drawable/ic_clear" 
      android:drawableRight="@drawable/ic_clear" 

      android:layout_marginBottom="20dp" 
      /> 
     <Button 
      android:id="@+id/btnSignIn" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/sign_in" 
      android:layout_gravity="center" 
      android:textColor="@color/blue_login_button" 
      android:background="@drawable/rounded_corner_button_login_background" 
      android:textAllCaps="false" 
      /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:text="@string/dont_have_an_account" 
      android:layout_gravity="center" 
      android:gravity="center|bottom" 
      android:paddingBottom="30dp" 
      android:textColor="@android:color/white" 
      /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="0.2" 
     android:orientation="vertical" 
     android:gravity="center" 
     android:background="@drawable/button_create_account_background" 
     android:clickable="true" 
     > 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/create_an_account" 
      android:textColor="@android:color/white" 
      /> 
    </LinearLayout> 

</LinearLayout> 
+2

Это может быть в @ drawable/button_create_account_background. Кроме того, попробуйте добавить android: weightSum = "1.7" к вашему основному LinearLayout. – natario

+0

Вы можете попробовать поставить 'backgroundColor'on вы первый (и главный)' LinearLayout' в тот же цвет 'Create Account Button' – Aspicas

+0

@Aspicas: да его работа, спасибо. Но я хочу знать причину этой белой линии, пожалуйста. Что я делаю не так? – Shaw

ответ

1

Где вина

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.2" 
    android:orientation="vertical" 
    android:gravity="center" 
    android:background="@drawable/button_create_account_background" 
    android:clickable="true" 
    > 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/create_an_account" 
     android:textColor="@android:color/white" 
     /> 
</LinearLayout> 

На самом деле Ваш последний макет не purely нижние боковые .Thats почему проблема .Another проблемы android:layout_weight="0.2" .The андроид: layout_weight не является правильным для множества нижней боковая сторона .

Попробуйте

Я думаю, вы должны попробовать относительную layout.If у вас есть относительное расположение, которое заполняет весь экран, вы должны быть в состоянии использовать android:layout_alignParentBottom для перемещения кнопки в нижней части экрана. Courtesy

Или

Вы можете использовать LinearLayout android:weightSum Property.

What is android:weightSum in android, and how does it work?

+1

да, я могу это сделать, но я хочу свойство layout_weight, которое недоступно в RelativeLayout. Благодарю. – Shaw

+0

@ user2787602 Другая причина. Обычно при использовании set 'android: layout_marginBottom =" 20dp "' thats why have problem .Avoid Hard закодированное значение. Вы можете использовать свойство 'android: weightSum' –

0

Самый простой способ я нашел фиксации проблемы 1DP линии заключается в масштабе до значений, которые вы используете для весов.

Самый простой способ сделать это, чтобы масштабировать каждый вес, пока нет десятичной точки, так, например:

android:layout_weight="0.2" 

станет

android:layout_weight"2" 

При условии применения этого множитель для каждого веса в вашем макете они должны поддерживать одинаковый масштаб, но без нижней линии.

Я не могу сказать наверняка, но мое предположение заключается в том, что использование меньших десятичных значений приводит к некоторой ошибке округления на Android - оставляя ненужную линию 1dp в нижней части макета.

0

У меня была такая же проблема и изменение android:layout_height="match_parent" от LinearLayout до android:layout_height="fill_parent" решила проблему.

Белая рамка показывала только на одном «слайде» в моем приложении. Я не уверен, но я думаю, что изображение, которое мы показываем, может повлиять на это.

Конечно, изменение layout_height - это не то, что мы всегда можем сделать. Это скорее похоже на работу, а не на правильное решение.