2016-07-25 4 views
0

Какой рекомендуемый подход для обеспечения кнопки ImageView правильный размер в соответствии с его родительским?Android - Как изменить размер/изменить изображение в соответствии с родителями?

У меня есть VideoView, установленный на «match_parent» (ширина экрана) и ImageView над VideoView размером 60dp x 60dp, что хорошо на экране, который я тестирую.

Проблема заключается в том, что если я поворачиваю телефон, а VideoView намного меньше, ImageView больше не пропорционален и находится в правильном положении. Такая же проблема подходит и для больших размеров экрана, таких как планшеты.

Я хочу, чтобы ImageView всегда был того же пропорционального размера и отображался в том же положении относительно VideoView (его родителя).

+0

Почему вы отметили C#? Это вопрос, связанный с Хамарином? –

+0

@VadimCaen Я использую Xamarin, но вопрос на самом деле не зависит от языка. Я прошу об общей технике, а не обязательно конкретном коде. – user2966445

+0

Вы посмотрели новый ConstraintLayout? Это может быть то, что вам нужно (даже если есть другое решение). Было бы здорово, если бы вы могли показать рисунок того, чего вы пытаетесь достичь. –

ответ

0

Вы должны рассмотреть возможность использования layout_sum в андроида:

Поскольку я не знаю, как вы точно кодирования это, я могу только представить предположения кода на основе. Я предполагаю, что вы захотите пропорционально выровнять VideoView и ImageView у родителя. (Предполагая, что вам требуется 30% пространства, которое будет занято ImageView, а остальные 70% пространства, которое будет занято VideoView).

Вы можете закодировать файл XML следующим образом:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:weightSum="10" 
    android:orientation="vertical" 
    android:layout_gravity="center"> 

<VideoView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="3"/> 

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="7"/> 

</LinearLayout> 

Это будет вставлять VideoView и ImageView в (вид Parent) LinearLayout.

0

Попробуйте использовать RelativeLayout, wrapContent и избегать использования жестких размеров.

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

Даже если ваша проблема не решена, попробуйте использовать эту библиотеку я часто использую его в своей работы- SDP

+0

Для простой такой проблемы было бы лучше избежать накладных расходов на библиотеку. –

+0

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

+0

Как я уже сказал в своем комментарии к aditya, ConstraintLayout - это новый макет, который может справиться с такой проблемой. –

0

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

var topPadding = Convert.ToInt32(_videoView.Height * .25); 
    _buttonLayout.SetPadding(_buttonLayout.PaddingLeft, topPadding, _buttonLayout.PaddingRight, _buttonLayout.PaddingBottom);