2012-12-31 20 views
6

Mam przyciski, które wyglądają jak najwyższym obrazu dla orientacji poziomej:Usuwanie Wypełnienie Przycisk obrazu (Android)

screenshot http://i46.tinypic.com/33zb9dj.jpg

chcę wyglądać dole obrazu.

Oto mój kod .xml dla tych przycisków.

<TableRow 
    android:id="@+id/tableRow7" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:weightSum="1.0" > 

    <ImageButton 
     android:id="@+id/appHome" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight=".5" 
     android:background="@null" 
     android:contentDescription="Home" 
     android:cropToPadding="true" 
     android:scaleType="fitEnd" 
     android:src="@drawable/home_bar" /> 

    <ImageButton 
     android:id="@+id/menuHome" 
     android:layout_weight="0" 
     android:background="@null" 
     android:contentDescription="Menu" 
     android:cropToPadding="true" 
     android:scaleType="center" 
     android:src="@drawable/menu_bar" /> 

    <ImageButton 
     android:id="@+id/back" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight=".5" 
     android:background="@null" 
     android:contentDescription="Back" 
     android:cropToPadding="true" 
     android:scaleType="fitStart" 
     android:src="@drawable/back_bar" /> 

</TableRow> 

Odpowiedz

2

skończyło się na ustalenie tego przełączając mój TableLayout do LinearLayout. Oto mój kod chyba że ktoś jest po drugiej stronie tego problemu:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:orientation="vertical"> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:gravity="center" > 

    <ImageButton 
     android:id="@+id/appHome" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@null" 
     android:contentDescription="Home" 
     android:scaleType="fitEnd" 
     android:src="@drawable/home_bar_grey" /> 

    <ImageButton 
     android:id="@+id/menuHome" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@null" 
     android:contentDescription="Menu" 
     android:onClick="menuhome" 
     android:scaleType="fitCenter" 
     android:src="@drawable/menu_bar" /> 

    <ImageButton 
     android:id="@+id/back" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@null" 
     android:contentDescription="Back" 
     android:scaleType="fitStart" 
     android:src="@drawable/exit_bar" /> 
</LinearLayout> 

+0

Problem z ustawianiem tła na wartość null polega na tym, że tracisz szary odcień, który pojawia się po kliknięciu przycisku ImageButton. – sudocoder

0

Wykorzystanie ujemny wyściółka na ImageButton w xml się kurczyć padding używany.

android:paddingLeft="-5dip" 
android:paddingRight="-5dip" 

Uwaga powyższe to tylko przykład ... trzeba zadzierać z numerami w celu dostosowania do konkretnego przypadku, aby rzeczy wyglądać poprawne.

+0

Bez względu na to, jak wysokie są liczby, wciąż otrzymuję ten sam dziwny dopełnienie. –

+0

Może to być margines zamiast wypełnienia ... stosuje się ten sam trik, użyj liczb ujemnych. – Barak

+0

Po prostu próbowałem marży z tym samym rezultatem ... Próbowałem zarówno dla piekła tego też. Wciąż jest cała niewidzialna przestrzeń. –

6

Nie można tego zrobić za pomocą domyślnych przycisków, przyciski 9 mają w sobie dopełnienie (zarówno holo, jak i przyciski pre holo). Możesz zobaczyć, że here.

Jeśli chcesz przycisków bez wyściółki wtedy będziesz musiał zmodyfikować 9 łatek i stworzyć swój własny motyw:

<style name="myTheme" parent="...."> 
    <item name="imageButtonStyle">@style/myImageButton</item> 
</style> 

i swoją imageButtonStyle:

<style name="myImageButton" parent="Widget.ImageButton"> 
    <item name="android:background">@drawable/myCostomizedNinePatchSelectorWithoutPadding</item> 
</style> 
0

// usunąć użycie android:weightSum szerokość jako match_parent

// podać android:layout_weight="1" dla wszystkich obrazówButton

// użyć android:scaleType="fitXY" dla wszystkich

<TableRow 
    android:id="@+id/tableRow7" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    > 

    <ImageButton 
     android:id="@+id/appHome" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:background="@null" 
     android:contentDescription="Home" 
     android:cropToPadding="true" 
     android:scaleType="fitXY" 
     android:src="@drawable/home_bar" /> 

    <ImageButton 
     android:id="@+id/menuHome" 
     android:layout_weight="0" 
     android:background="@null" 
     android:contentDescription="Menu" 
     android:layout_weight="1" 
     android:cropToPadding="true" 
     android:scaleType="fitXY" 
     android:src="@drawable/menu_bar" /> 

    <ImageButton 
     android:id="@+id/back" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:background="@null" 
     android:contentDescription="Back" 
     android:cropToPadding="true" 
     android:scaleType="fitXY" 
     android:src="@drawable/back_bar" /> 

</TableRow> 
+0

To działa, ale rozciąga obrazy, czego nie chcę. –

+0

Następnie usuń Androida: scaleType = "fitXY". –

+0

Kiedy to zrobiłem, osiągnąłem ten sam rezultat, co poprzednio (z przestrzenią wyściełającą) –

0

Łatwiej alternatywa do tworzenia własnego wizerunku 9 łat usunąć margines jest ustawienie tła na null.

Na przykład, aby dodać następujące RES/styles.xml:

<style name="MarginlessImageButton" parent="android:Widget.ImageButton"> 
    <item name="android:background">@null</item> 
</style> 

<style name="AppTheme" parent="AppBaseTheme"> 
    <item name="android:imageButtonStyle">@style/MarginlessImageButton</item> 
</style> 

teraz okaże się, że wszystkie ImageButtons mieć margines zerowy, niezależnie od tego, czy zdefiniowane w formacie XML lub utworzone programowo.