2016-04-16 19 views
0

Ich habe ein einfaches Layout, das nur 2 Widgets hat: ein Vollbild ImageView als Hintergrund und eine Button. Der Hintergrund hat kein Problem, aber ich habe es versäumt, & Größe der Schaltfläche zu passen, um in alle Bildschirme passen. Die Schaltfläche soll in der Mitte ausgerichtet auf 2/3 des Bildschirms liegen. HierButtongröße auf verschiedenen Android-Bildschirmgröße

ist mein activity_login.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="hk.goodsight.kitchenlifestyle.LoginActivity"> 


    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:src="@drawable/bg_signin" 
     android:contentDescription="background" 
     android:scaleType="centerCrop" 
     android:layout_centerHorizontal="true" /> 
    <Button 
     android:layout_width="382dp" 
     android:layout_height="66dp" 
     android:text="@string/sign_in" 
     android:id="@+id/btnLogin" 
     android:background="@drawable/btn_signin" 
     android:layout_alignParentBottom="true" 
     android:layout_marginBottom="150dp" 
     android:layout_marginLeft="40dp" 
     android:layout_marginRight="40dp" 
     android:layout_centerHorizontal="true" 
     android:textColor="@android:color/white" /> 
</RelativeLayout> 

Von anderen SO Fragen, einige der folgenden empfehlen:

  1. Convert Pixel dp, um die Größe und Position der Taste zu berechnen
  2. Verwenden Sie ein anderes Layout für verschiedene Bildschirmgrößen

Was soll ich wählen?

p.s. muss Android 4.0 unterstützen, daher kann ich keinen Prozentanteil als Marginbottom verwenden, der in API 23 eingeführt wird.

+0

haben Sie versucht, mit layout_weight? – Yashasvi

+0

Ja, versuchte 'layout_weight'. Da es kein anderes Element gibt, kann 'layout_weight' die korrekte Position nicht berechnen. – Raptor

+0

Eine Lösung unten veröffentlicht. – Yashasvi

Antwort

2

Eine etwas naive Methode schätze ich, aber ich habe diese Vorschau auf vielen Geräten getestet und es zeigt was du willst. Anstelle eines ImageView, habe ich den Bildhintergrund auf dem übergeordneten Layout festgelegt. Ersetzen Sie den Wert durch Ihre ursprüngliche Bildressource.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@mipmap/ic_launcher" 
android:orientation="vertical"> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.3"/> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.3" 
    android:orientation="vertical"> 

    <Button 
     android:id="@+id/btnLogin" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="blah" 
     android:textColor="@android:color/white" /> 
</LinearLayout> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.3"/> 

+0

Du hast mich angedeutet. Am Ende habe ich 'Space' statt' LinearLayout' verwendet, das eine einfachere Logik hat. – Raptor

+0

Gut zu wissen, dass du erreicht hast, was du willst :) – Yashasvi

1

Sie können die Anzeigegröße vom Windowmanager erhalten und dann den Knopf Rand oben 2/3 Bruchteil davon programmatisch sein, so etwas wie:

android.view.Display display = ((android.view.WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    Button btn = new Button(this); 
    LayoutParams params = new LayoutParams(
      LayoutParams.WRAP_CONTENT, 
      LayoutParams.WRAP_CONTENT 
    ); 
    params.setMargins(0,(int)(display.getHeight()*0.666),0,0); 
    btn.setLayoutParams(params); 
Verwandte Themen