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