2013-07-09 109 views
1

这是正在发生的事情:按钮调整大小上> 2.3.6

button resizes horizontally in gt 2.3.6

这是源图像:

source image

这是XML布局的一部分:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/background_headers" 
    android:orientation="horizontal" > 

    <AutoCompleteTextView 
     android:id="@+id/etNewItem" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:completionThreshold="2" 
     android:dropDownHeight="wrap_content" 
     android:dropDownWidth="wrap_content" 
     android:hint="@string/et_newitemhint" 
     android:inputType="text|textCapSentences" 
     android:layout_centerVertical="true" 
     style="@style/DialogEditText" 
     android:layout_marginRight="10dp" 
     android:singleLine="true" /> 


    <Button 
     android:id="@+id/btnAddNew" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:background="@drawable/btn_add" 
     android:layout_centerVertical="true" /> 
</RelativeLayout> 

这是按钮的选择器xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
<item android:state_focused="true" 
    android:drawable="@drawable/btn_add_pressed"/> 
<item android:state_pressed="true" 
    android:drawable="@drawable/btn_add_pressed"/> 
<item android:drawable="@drawable/btn_add_normal"/> 
</selector> 

为什么此按钮在4.x.x中水平调整大小?源图形确实使用了9个补丁,但它做了完全相同的事情,所以我将其更改为正常的png,但没有任何结果。

奇怪的是,这是唯一显示此行为的图形。我把它放在某个地方的一个操作栏上:同样的事情;我也在对话中说过:同样的事情。

我的2.2.2和2.3.6测试设备显示按钮应该是,但我的任何4.x.x测试设备显示拉长的按钮。

+0

只是在黑暗中刺,但你有没有尝试过使用'ImageButton'而不是'Button',并通过'android:src =“..”'而不是'android:background =“设置drawable。 “'?我想知道是否使用背景属性不允许按钮正确测量其大小,因此,奇怪的结果, –

+0

感谢您的建议@AlexMDC,您的解决方案可能已经工作,但我直接从androbat的代码,它做了。 – DaveSav

回答

1

首先,使这些:

RES /绘制/ button_add_normal.xml

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/btn_add_normal" 
    android:tileMode="disabled" 
    android:gravity="top" > 
</bitmap> 

RES /绘制/ button_add_pressed.xml

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/btn_add_pressed" 
    android:tileMode="disabled" 
    android:gravity="top" > 
</bitmap> 

然后用此作为选择:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_focused="true" 
      android:drawable="@drawable/button_add_pressed"/> 
    <item android:state_pressed="true" 
      android:drawable="@drawable/button_add_pressed"/> 
    <item android:drawable="@drawable/button_add_normal"/> 
</selector> 
+0

谢谢!这在我的所有测试设备中都有效。 – DaveSav

0

我没有设法在我的设备上重现此操作。不过,我还是有一个解决办法:你可以使用精确的尺寸是这样的:

android:layout_width="50dp" 
android:layout_height="50dp" 

通过这种方式,图像看起来应当是一样每个设备上。

+0

感谢您的建议,马尔科姆;但是我表示我有这个图形的ldpi,mdpi,hdpi和xhdpi分辨率的版本;所以设置一个固定的大小不是一个选项。 – DaveSav

+0

@DaveSav但是尺寸是以与密度无关的像素设置的,它会自动缩放。你甚至可以使用一个尺寸,并为每个密度输入不同的数字(尽管这对你的情况来说是一个过度杀伤力)。 – Malcolm

+0

真的吗?但是,图形的视觉质量会不会随着它的扩大而降低?我给出的源代码是用于mdpi;这个外观如何扩展到xhdpi? – DaveSav