Мне нужно создать динамический вид с шириной и высотой, которые являются процентом родительского размера. Поэтому мне нужно добавить вес для ширины и высоты для одного вида. Возможно ли это?Как установить вес для ширины и высоты?
0
A
ответ
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.
Вы еще что-нибудь пробовали? – Soma
Да. Я попытался поместить его в Linear Layout (горизонтальный) с весом для ширины, а затем в линейную компоновку (по вертикали) с весом для высоты. Но я думаю, что это не очень хорошая идея. – sofi37