Android UI小部件垂直对齐问题

我正在尝试创建一个布局(使用
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中选择时的按钮小部件.蓝色矩形表示小部件边界/边框.某些属性可以控制按钮边框(蓝色矩形)和内容(灰色矩形)之间的区别吗?

最佳答案 这是一个艰难的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或大小属性影响你的小部件和你的布局.

点赞