2015-05-20 5 views
0

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

+1

Вы еще что-нибудь пробовали? – Soma

+0

Да. Я попытался поместить его в Linear Layout (горизонтальный) с весом для ширины, а затем в линейную компоновку (по вертикали) с весом для высоты. Но я думаю, что это не очень хорошая идея. – sofi37

ответ

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> 

Теперь я установить ширину и высоту для каждого представления зависит от ширины экрана и экрана Высота.

int screenWidth = dpToPx(getResources().getConfiguration().screenWidthDp); 
int screenHeight = dpToPx(getResources().getConfiguration().screenHeightDp); 
int ratioW = ....;// 
int ratioH = ....;// 
setLayoutSize(ll_forImage, screenWidth/ratioW , screenHeight/ratioH); 
setLayoutSize(ll_forList, screenWidth/ratioW , screenHeight - screenHeight/ratioH); 
// You can use setTranslation to translate View to expected position. 

с:

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); 
} 
2
<LinearLayout 


    android:layout_width="match_parent" 
     android:layout_height="100dp" 
     android:weightSum="4" 
     android:orientation="horizontal"> 

<ImageView 
       android:layout_width="0dp" 
      android:layout_height="80dp" 
      android:layout_weight="1" 

       android:gravity="center" 

       android:id="@+id/imgtype" 
android:scaleType="fitCenter" 
       /> 

<TextView 
      android:layout_width="0dp" 
      android:layout_height="80dp" 
      android:layout_weight="3" 
      android:id="@+id/txtsubject" 
      android:textStyle="bold" 
      android:textSize="@dimen/lat_sub_text_size" 

      android:textColor="@android:color/black"/> 


<LinearLayout/> 

здесь вы сможете разделить основную часть ширины родительского LinearLayout к в TextView и оставшейся малой части для ImageView это для выравнивания по горизонтали то же самое может быть сделано для вертикали, как well.Weightsum свойство родителя решает количество частей, которое оно будет содержать.

1

Добавление layout_weight хороший подход при использовании LinearLayout. Помните, layout_weight работает только в случае LinearLayout и не может использоваться с RelativeLayout.