在styles.xml中更改android:layout_height和android:gravity

3

我刚开始学习安卓开发,遇到了一个问题,现有的StackOverflow问题无法解决。

在自定义项列表中我正在加载一个TextView对象,它可以使用2种不同的样式(都在styles.xml中定义)-如果有一个次要的TextView对象,则应用的样式是itemHeadingText_Medium,否则是itemHeadingText_Large。我在ListItemAdapter类中以编程方式更改样式。

<!-- Heading in each list item -->
<style name="itemHeadingText_Large" parent="@android:style/TextAppearance.Large">
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">@android:color/black</item>

    <!-- Testing height and gravity -->
    <item name="android:layout_height">100dp</item>
    <item name="android:gravity">center_vertical</item>
</style>

<!-- Heading in each list item -->
<style name="itemHeadingText_Medium" parent="@android:style/TextAppearance.Medium">
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">@android:color/black</item>
</style>

很遗憾,android:layout_heightandroid:gravity未应用于该视图,整个应用程序看起来像这样。以下是两个TextViews的定义:
        <TextView
            android:id="@+id/heading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@android:color/darker_gray"/>
        <TextView
            android:id="@+id/secondary"
            style="@style/itemSecondaryText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@android:color/holo_red_light"/>

我想垂直居中第二个项目截图中提供的Lorem Ipsum标题。
编辑:2017年6月25日
我通过使用getLayoutParams().height以编程方式更改高度,并在TextView xml定义中添加android:gravity属性来实现了所需的效果 - 毕竟,在两种样式中,文本都可以在其TextView中垂直居中。
尽管如此,我如何在styles.xml中完成这项任务的问题仍然存在!

请问您能否发布该布局的完整XML文件代码? - Zohaib Hassan
@ZohaibHassan 当然,这是链接:https://pastebin.com/y8nA2tbh - Kacperito
我会检查你的代码,并尽快给你回复。 - Zohaib Hassan
同时,我通过在项目中添加一些Java代码(2017年6月25日的编辑)来实现所需的效果。不过我还是很好奇怎样在XML文件中实现这个效果! - Kacperito
2个回答

0

android:gravity 会指定 TextView 中文本超出 View 大小时的布局方式。

android:layout_gravity 会指定 View 在其 ViewGroup 中的布局方式。

我建议尝试使用 layout_gravity 替换 gravity。


当使用layout_gravity时,没有任何变化。我在这里使用gravity,因为我的原始想法是使TextView变大,然后将文本居中显示在其中。 - Kacperito

0
我看到你代码中的问题是:
 <TextView
        android:id="@+id/secondary"
        style="@style/itemSecondaryText" // Look at this line
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_red_light"/>

你正在使用“itemSecondaryText”样式来设置你的TextView,但是在你的styles.xml文件中并没有任何名为“itemSecondaryText”的样式。你的styles.xml文件中有“itemHeadingText_Medium”和“itemHeadingText_Large”,但是没有名为“itemSecondaryText”的样式。
我猜这就是问题所在,否则一切看起来都很好。

这是另一个TextView,用于显示次要文本(在我提供的截图中为"Ipsum Ipsum Lorem Ipsum"),它完美地工作。就像我说的,我只是通过编程方式更改第一个TextView的样式。所以这不是问题。 - Kacperito
被更改样式的TextView正在使用“heading” ID。 - Kacperito

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接