2016-07-09 5 views
2

Привет всем, кто в настоящее время работает над моим первым приложением и им сталкивается с какой-то странной проблемой. У меня есть 5 кнопок в моем макете, высота которых вычисляется функцией, чтобы получить нужный размер для каждого экрана.Как правильно вычислить высоту моего макета (размер) относительно размера экрана?

Функция работает нормально и почти правильно устанавливает высоту для каждой кнопки, за исключением маленькой маленькой строки внизу, я думаю, что это какая-то ошибка округления?

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

DisplayMetrics displayMetrics = new DisplayMetrics(); 
    WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); 
    wm.getDefaultDisplay().getMetrics(displayMetrics); 
    int minusthis = 0; 

    Context context = this; 
    int resource = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); 
    if (resource > 0) { 
     minusthis = context.getResources().getDimensionPixelSize(resource); 
    } 

    int screenHeight = displayMetrics.heightPixels - minusthis; 

    int tilesize = (screenHeight/5); 

Как вы можете видеть, я получаю displayMetrics и разделить их на 5, потому что у меня есть 5 фрагментов, которые должны быть точно 1/5 экрана. «Палитра» будет применена к кнопкам в коде позже.

app running on Nexus6p

В картине я attatched вы можете увидеть кнопки растянуться почти правильно над экраном для крошечной белой линии я кружился в красном цвете, за исключением. Линия может показаться маленькой, но я не могу заставить ее исчезнуть, и это действительно меня раздражает, также она становится более очевидной в других действиях, где у меня разные кнопки и панели.

Итак, если вы зачитали это далеко, спасибо! Если вы видите какой-либо способ улучшить свой код, пожалуйста, скажите мне :)

ответ

4

Вместо расчета размера динамически использовать линейного компоновщика и ребенок Text View с с весом собственности. Это решит вашу проблему.

Вот пример кода

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

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="@android:color/holo_orange_light" 
     android:gravity="center" 
     android:text="item1" 
     /> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="@android:color/holo_blue_light" 
     android:gravity="center" 
     android:text="item2" 
     /> 

</LinearLayout> 
0

У нас есть лучший вариант, чтобы отобразить представление с таким же весом. Вы можете использовать LinearLayout с android:orientation="vertical". Добавьте все TextView в LinearLayout и установите для всех свойств TextView android:layout_width="0dp", android:layout_height="match_parent" и android:layout_weight="1".

С LinearLayout и весом мы можем легко разделить экран поровну.

0

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

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

android:orientation="vertical"> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:background="@android:color/holo_orange_light" 
    android:gravity="center" 
    android:text="item1" 
    /> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:background="@android:color/holo_blue_light" 
    android:gravity="center" 
    android:text="item2" 
    /> 

если и хотят, чтобы добавить кнопки по горизонтали, чем использование горизонтальной ориентации и weightsum собственности

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

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="5" 
    android:background="@android:color/holo_orange_light" 
    android:gravity="center" 
    android:text="item1" 
    /> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:layout_weight="5" 
    android:background="@android:color/holo_blue_light" 
    android:gravity="center" 
    android:text="item2" 
    />