2016-07-25 3 views
0

Was ist der empfohlene Ansatz, um sicherzustellen, dass eine ImageView-Schaltfläche die richtige Größe gemäß ihrer übergeordneten Größe aufweist?Android - Wie verkleinere/Repositioniere ImageView nach Eltern?

Ich habe ein VideoView auf "match_parent" (Bildschirmbreite) und ein ImageView über das VideoView, das ist 60dp x 60dp, das ist in Ordnung auf dem Bildschirm, den ich testen.

Problem ist, wenn ich das Telefon drehen und der VideoView viel kleiner ist, ist der ImageView nicht mehr proportional und in der richtigen Position. Dies gilt auch für größere Bildschirmgrößen wie Tablets.

Ich möchte das ImageView immer die gleiche proportionale Größe haben und in der gleichen Position relativ zu dem VideoView (sein Eltern) angezeigt werden.

+0

Warum haben Sie C# getaggt? Ist das eine Xamarin-bezogene Frage? –

+0

@VadimCaen Ich benutze Xamarin, aber die Frage ist nicht wirklich sprachspezifisch. Ich bitte um eine allgemeine Technik, nicht unbedingt spezifischen Code. – user2966445

+0

Haben Sie sich das neue ConstraintLayout angesehen? Es könnte sein, was Sie brauchen (auch wenn es eine andere Lösung gibt). Es wäre großartig, wenn Sie zeigen könnten, was Sie versuchen zu erreichen. –

Antwort

0

Sie sollten mit layout_sum in Android betrachten:

Da ich weiß nicht, wie Sie genau diese codieren, ich nur Annahmen Code zur Verfügung stellen kann. Ich gehe davon aus, dass Sie eine VideoView und ImageView in einem Elternteil proportional ausrichten möchten. (Angenommen, Sie benötigten 30% des von ImageView zu belegenden Speicherplatzes und der Rest 70% des vom VideoView belegten Speicherplatzes).

Sie können die XML-Datei Code wie folgt:

<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> 

Dies wird die Videoview und Image in die Linearlayout (Parent-Ansicht) einbetten.

0

Versuchen Sie, RelativeLayout, wrapContent zu verwenden, und vermeiden Sie hardCoded Größen.

Oder besser ein separates Layout für Querformat und Hochformat definieren, das Ihr Problem lösen könnte.

Auch wenn Ihr Problem nicht Versuchen Sie es mit dieser Bibliothek gelöst ich es oft in meinem Projekten- verwenden SDP

+0

Für ein einfaches Problem wäre es besser, den Overhead einer Bibliothek zu vermeiden. –

+0

Ja, ich weiß ... hat nur über eine solche Bibliothek getippt, die unsere Arbeit erleichtern kann, um Layout kompatibel zu verschiedenen Bildschirmen zu machen. –

+0

Wie ich in meinem Kommentar zu Aditya gesagt habe, ist ConstraintLayout ein neues Layout, das mit dieser Art von Problem umgehen kann. –

0

ich diese programmatisch mit ViewTreeObserver GlobalLayout Zuhörer tun endete. Es funktioniert großartig und ich brauche es nur für eine Ansicht auf dem Bildschirm, also keine große Sache. Die Taste erscheint in der richtigen Position relativ zu ihrer Elterngröße, selbst wenn das Telefon gedreht wird.

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