MinHeight не работает с весом = "1" в Linearlayout

120
8

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


В настоящее время я использую вес с LinearLayout. Он отлично работает с большим экраном, но на маленьком экране его не видно.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/speaker_detail_background"
android:clickable="true"
android:paddingLeft="@dimen/padding_7dp"
android:paddingRight="@dimen/padding_7dp"
android:orientation="vertical"
>
<ImageView
android:id="@+id/down_arrow_image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:padding="@dimen/padding_15dp"
android:src="@drawable/down_arrow_icon" />

<RelativeLayout
android:id="@+id/lytSpeakerDetails"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/down_arrow_image_view"
android:minHeight="200dp"
android:layout_weight="1"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true">
<RelativeLayout
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:visibility="visible"
>

<com.harman.jblconnectplus.ui.customviews.CustomFontTextView
android:id="@+id/speaker_name_title_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@android:color/transparent"
android:drawableLeft="@drawable/edit_name"
android:drawablePadding="@dimen/padding_5dp"
android:ellipsize="end"
android:maxLength="16"
android:text="@string/speaker_name"
android:textColor="@android:color/white"
android:textSize="@dimen/textSize_18sp"
app:font="@string/font_name_opensans_semi"
/>

<com.harman.jblconnectplus.ui.customviews.CustomFontTextView
android:id="@+id/setting_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/speaker_name_title_textview"
android:layout_centerHorizontal="true"
android:text="@string/setting"
android:visibility="invisible"
android:textColor="@color/white"
android:textSize="14sp"
app:font="@string/font_name_opensans_semi"
/>
</RelativeLayout>
<LinearLayout
android:id="@+id/lytSeekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_below="@id/title_bar"
android:layout_marginLeft="@dimen/brightness_margin"
android:layout_marginRight="@dimen/brightness_margin"
android:visibility="visible">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/darker"
android:layout_gravity="center_vertical"
/>
<SeekBar
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:id="@+id/seekBar"
android:thumb="@drawable/knob"
android:progressDrawable="@drawable/seekbar_progressbar"
android:indeterminate="false"
android:splitTrack="false"
android:maxHeight="3dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:progress="0"
android:secondaryProgress="0"
android:max="255"

/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/brighter"
android:layout_gravity="center_vertical"/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>

<LinearLayout
android:layout_width="match_parent"
android:id="@+id/bottom_details_layout"
android:layout_height="wrap_content"
android:background="@drawable/round_border_white_bg"
android:orientation="vertical"
android:layout_marginTop="@dimen/margin_20dp"
>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/padding_5dp"
android:gravity="bottom">

<include layout="@layout/speaker_detail_firmware_layout" />
</LinearLayout>

<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/divider_view" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<include layout="@layout/speaker_detail_voice_layout" />
</LinearLayout>
</LinearLayout>

</LinearLayout>


Прошу предложить.

спросил(а) 2017-03-16T14:29:00+03:00 3 года, 7 месяцев назад
1
Решение
58

Я решил эту проблему. установить вес "1" макета в XML файле (в моем case XML такой же, как указано выше), он будет работать в случае, если Screen размер большой и также проверяется грамматически, если размер представления меньше чем минимальный размер, тогда задайте высоту представления грамматически. образец Код: -



Установить ViewTreeObserver для просмотра: -


lytSpeakerDetails = (RelativeLayout) view.findViewById(R.id.lytSpeakerDetails);
ViewTreeObserver viewTreeObserver = lytSpeakerDetails.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(globalLayoutListener);

и в обратном вызове Listener проверьте, меньше ли минимальная высота макета, а затем установите высоту на минимум: -


ViewTreeObserver.OnGlobalLayoutListener globalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (!isAdded())
return;
lytSpeakerDetails.getViewTreeObserver().removeGlobalOnLayoutListener(this);

int height = lytSpeakerDetails.getMeasuredHeight();

LinearLayout.LayoutParams imgViewParams = (LinearLayout.LayoutParams) lytSpeakerDetails.getLayoutParams();

/* imgViewParams.setMargins(0, (int) ( x * 1.5f) + (int) getResources().getDimension(R.dimen.card_shadow_y), 0, (int) x );
lytSpeakerDetails.setLayoutParams(imgViewParams);*/

if(height < (int)getResources().getDimension(R.dimen.brightness_minimum_height)) {

LinearLayout.LayoutParams rel_btn = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, (int) getResources().getDimension(R.dimen.brightness_minimum_height));

lytSpeakerDetails.setLayoutParams(rel_btn);
}

}
};

ответил(а) 2017-04-04T09:28:00+03:00 3 года, 6 месяцев назад
42

Ваш View ограничен. minHeight не гарантируется, если ограничение View ограничено. См. Документацию .


андроида: MinHeight

Определяет минимальную высоту представления. Не гарантируется, что представление сможет достичь этой минимальной высоты (например, если ее родительский макет сдерживает его с меньшей доступной высотой).


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

ответил(а) 2017-03-16T17:38:00+03:00 3 года, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема