2012-12-28 95 views
0

考虑下面的XML和输出:的Android按钮文本对齐问题

<?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:orientation="vertical" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="5" 
     android:gravity="center_vertical|center_horizontal" 
     android:paddingTop="0dp" 
     android:text="Button" 
     android:textSize="100sp" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="30" 
     android:text="Button" 
     android:textSize="100sp" /> 

</LinearLayout> 

enter image description here

有一个在顶部有足够的空间按钮在中间的文本位置,但还是有些部分(在底部)被修剪,为什么?

当我使用以下背景,仍然文本不居中(见的输出波纹管)

<?xml version="1.0" encoding="utf-8"?> 
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" > 
     <shape> 
      <gradient 
       android:endColor="@android:color/darker_gray" 
       android:startColor="@android:color/darker_gray" 
       android:angle="270" /> 
      <stroke 
       android:width="0dp" 
       android:color="@android:color/darker_gray"/> 
      <corners 
       android:radius="0dp" /> 
      <padding 
       android:left="0dp" 
       android:top="0dp" 
       android:right="0dp" 
       android:bottom="0dp" /> 
     </shape> 
    </item> 

    <item android:state_focused="true" > 
     <shape> 
      <gradient 
       android:endColor="@android:color/darker_gray" 
       android:startColor="@android:color/darker_gray" 
       android:angle="270" /> 
      <stroke 
       android:width="0dp" 
       android:color="@android:color/darker_gray"/> 
      <corners 
       android:radius="0dp" /> 
      <padding 
       android:left="0dp" 
       android:top="0dp" 
       android:right="0dp" 
       android:bottom="0dp" /> 
     </shape> 
    </item> 

    <item>   
     <shape> 
      <gradient 
       android:endColor="@android:color/darker_gray" 
       android:startColor="@android:color/darker_gray" 
       android:angle="270" /> 
      <stroke 
       android:width="0dp" 
       android:color="@android:color/darker_gray"/> 
      <corners 
       android:radius="0dp" /> 
      <padding 
       android:left="0dp" 
       android:top="0dp" 
       android:right="0dp" 
       android:bottom="0dp" /> 
     </shape> 
    </item> 
</selector> 

enter image description here

(测试模拟器10.1" WXGA 1280×800屏幕,横向)

回答

4

因为它是th以何种方式呈现视图。按钮视图的代码应用最小的顶部和底部填充。只有当按钮的高度大于文本+默认填充的高度时,渲染器才会开始垂直居中文本。它就像是通过自然设计。

+0

为什么你评价这个答案,我的答案是正确的,其他的不是 – David

+0

可能是因为你没有给出一个适当的解决方案的问题。据我所知,你似乎也是对的。太可惜了 ;) – Omphaloskopie

5

这可能是一个字体填充,你可以通过使用android:includeFontPadding=false来禁用该按钮

+0

我测试了这一点,但是,我不能通过使用android:includeFontPadding = false来看到任何不同。 – siva636

+0

然后,这意味着按钮背景的9个补丁已经为内容定义了区域,并且它的一些空间是为边距保留的。就我所知,它周围没有“正常”的方法。所以你将不得不为按钮创建自己的背景,以实现这一点。不是一个好主意,因为你的按钮是香草android,所以它在不同的设备上是不同的。 –

+0

当我使用自己的背景时,仍然按钮文字不居中。看到我更新的问题。 – siva636