Android UI小部件垂直对齐问题

时间:2012-05-29 11:58:09

标签: android user-interface widget alignment

我正在尝试创建一个布局(使用eclipse),我需要垂直对齐各种控件,如TextView和Button。我试图保持所有小部件完全左对齐。即使我为控件指定了相同的左边距/填充,仍然可以在不同类型的控件之间看到1-2个像素的差异。

问题是小部件的边框(eclipse中的蓝色矩形)与小部件的内容/图形之间的距离因小部件而异(比如TextView和Button)。

我可以通过为TextView指定左边距或减少按钮容器的左边距来应用变通方法。但我正在寻找更清洁的解决方案。我无法找到任何控制小部件边框和内容之间差异的属性。 关于如何控制这种差距的任何指示?

显示问题的快照如下。这是我用于此问题的布局XML: -

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Dummy Button" />

</LinearLayout>

下图显示了虚拟应用程序的快照。请注意“Hello World”TextView和“Dummy Button”的左侧边距之间的差异。

第二张图片显示了在Eclipse中选择时的按钮小部件。蓝色矩形表示小部件边界/边框。按钮的边框(蓝色矩形)和内容(灰色矩形)之间的区别是由某些属性控制的吗?

Dummy Application Snapshot Button with boundary

1 个答案:

答案 0 :(得分:2)

这是一个很难的TextView和其他Android小部件可能他们自己的一些内在风格(也取决于Android版本)。

因此,为了解决这个问题,你必须创造自己的风格。

在创建自己的风格时,请始终引用此主题的Android源代码:

https://github.com/android/platform_frameworks_base/tree/master/core/res/res/values

https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/themes.xml

https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml

有多种方法可以创建自己的风格。

一种方法是在您的清单中主题化您的活动。 首先,在/ values /文件夹中需要一个styles.xml文件。 在这里你会宣布你的新风格:

<style name="Theme.MyTheme.Dark" parent="@android:style/Theme.NoTitleBar">
    <item name="android:textViewStyle">@style/Widget.TextView.Black</item>
</style>

<style name="Theme.MyTheme.Light" parent="@android:style/Theme.NoTitleBar">
    <item name="android:textViewStyle">@style/Widget.TextView.White</item>
</style>

它上面的样式继承了隐藏标题栏的Android风格,你可以继承其他东西。 在这个主题中,我们覆盖textViewStyle,这允许我们为TextView设置自定义值并覆盖一些内在值。

<style name="Widget.TextView.White" parent="@android:style/Widget.TextView">
    <item name="android:textColor">#FFFFFF</item>
</style>

<style name="Widget.TextView.Black" parent="@android:style/Widget.TextView">
    <item name="android:textColor">#000000</item>
</style>

最后,您将在AndroidManifest.xml中主题化您的活动:

     <activity
        android:name=".ui.phone.FirstActivity"
        android:theme="@style/Theme.MyTheme.Dark" />

     <activity
        android:name=".ui.phone.SecondActivity"
        android:theme="@style/Theme.MyTheme.Light" />

现在,当你在FirstActivity中使用TextView时,它的文本默认为黑色,而在第二个活动中它将是白色。

针对您的具体问题:

您必须查看我在顶部链接的源代码文件,看看是否有任何填充或minWidth或大小属性影响您的小部件和布局。