2015-04-17 3 views
4

Что я пытаюсь сделать?Разделение динамического экрана Android

активности начинается с ImageView взятия верхней 9/10 экрана, а остальные ListView нижней 1/10: enter image description here

Как добавили больше деталей к ListView, изменения соотношения, получая ListView 1/10 большую часть экрана для каждого элемента, и ImageView сжимается, соответственно, до соотношении 50:50 (добавления других элементов после того, что сохраняет соотношение фиксированное): enter image description here

что уже знаю: Лучшая практика статического деления экрана, использует атрибут LinearLayoutandroid:weightSumViewandroid:layout_weight). Это должно быть возможно и с динамическим использованием AbsListView.LayoutParams, в сочетании с регистрацией обратного вызова где-то в ArrayAdapter. Однако он заполняется как злоупотребление статическим признаком (весом). Более того, я бы предпочел постоянно переключаться между отношениями (используя Property Animation).

Вопросы:

  1. Должен ли я предпочитаю использовать getWindowManager() .getDefaultDisplay().getHieght(); один раз, и вычисления коэффициента динамически по желанию?

  2. Что касается коэффициента обновления обратного вызова, есть ли какой-либо параметр, кроме ArrayAdapter.registerDataSetObserver()?

ответ

1

я делаю что-то вроде того, что вы хотите от:

1) Настройка макета:

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

    <LinearLayout 
     android:id="@+id/ll_forImage" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" />  
    </LinearLayout> 
    <LinearLayout 
     android:id="@+id/ll_forList" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <ListView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

     </ListView>  
    </LinearLayout> 
</LinearLayout> 

2) написать некоторые методы утилита для Оформление печатных изданий.

private int dpToPx(int dp) { 
    return (int) (dp * getResources().getDisplayMetrics().density + 0.5f); 
} 

private static void setLayoutSize(View view, int width, int height) { 
    ViewGroup.LayoutParams params = view.getLayoutParams(); 
    params.width = width; 
    params.height = height; 
    view.setLayoutParams(params); 
} 

3) код:

int screenWidth = dpToPx(getResources().getConfiguration().screenWidthDp); 
int screenHeight = dpToPx(getResources().getConfiguration().screenHeightDp); 
int ratio = ....;// 
setLayoutSize(ll_forImage, screenWidth , screenHeight/ratio); 
setLayoutSize(ll_forList, screenWidth , screenHeight - screenHeight/ratio); 
2

Если вы хотите сохранить соотношение всегда 10% и 90%, используйте вес 1 и вес 9. В противном случае лучше писать код XML, чтобы проверить

+0

Ну, я не хочу, чтобы сохранить соотношение, это точка :) Что ты имеешь в виду под «писать XML-код для проверки»? @Ahmad Ebrahimi – nobatlinux

 Смежные вопросы

  • Нет связанных вопросов^_^