2017-01-18 10 views
0

Когда LinearLayout имеет свою высоту, установленную на wrap_content, а ее дети имеют общую высоту, большую, чем экран, некоторые дети не будут видны. В этом случае я хочу удалить детей, пока все дети не будут видны. Каков эффективный способ сделать это?Как определить, является ли LinearLayout слишком маленьким, чтобы содержать его детей.

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    //when measuring with unspecified, the layout will be as large as it wants to be 
    super.onMeasure(UNSPECIFIED_SPEC, UNSPECIFIED_SPEC); 
    if (getOrientation() == VERTICAL){ 
     wantedLength = getMeasuredHeight(); 

    } else { 
     wantedLength = getMeasuredWidth(); 
    } 

    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    if (getOrientation() == VERTICAL){ 
     measuredLength = getMeasuredHeight(); 

    } else { 
     measuredLength = getMeasuredWidth(); 
    } 


    while (measuredLength < wantedLength){ 
     //todo remove child 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     if (getOrientation() == VERTICAL){ 
      measuredLength = getMeasuredHeight(); 

     } else { 
      measuredLength = getMeasuredWidth(); 
     } 
    } 

} 

Есть ли способ узнать, слишком мал макет, не измеряя дважды? Я нашел MEASURED_STATE_TOO_SMALL в документах, но не знаю, как его использовать. https://developer.android.com/reference/android/view/View.html#getMeasuredHeightAndState()

+0

Почему бы не использовать 'scrollview' для хранения всех? так или иначе, чтобы получить размер отображения из класса 'Display'. Затем вычислите общие размеры ваших предметов. затем удалите другие элементы. –

+0

Я хочу представить информацию в 1 экране без прокрутки. Когда дети не подходят, менее важные могут быть удалены –

ответ

0

Получить размер экрана в пикселях

public Map<String, Integer> deriveMetrics(Activity activity) { 
    try { 
     DisplayMetrics metrics = new DisplayMetrics(); 

     if (activity != null) { 
      activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); 
     } 

     Map<String, Integer> map = new HashMap<String, Integer>(); 
     map.put("screenWidth", Integer.valueOf(metrics.widthPixels)); 
     map.put("screenHeight", Integer.valueOf(metrics.heightPixels)); 
     map.put("screenDensity", Integer.valueOf(metrics.densityDpi)); 

     return map; 
    } catch (Exception err) { 
     ; // just use zero values 
     return null; 
    } 
} 

Тогда Вы можете получить взгляды родителей по телефону viewName.getParent() и с GetWidth() и GetHeight() вы получите пикселы необходимость.

Затем сделайте свой расчет, который нужно сохранить и какой из них удалить.

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

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