2

假设我有一个包含以下元素的字符串列表:“一”、“二”、“三”、“四”

我想将它们放在屏幕中间,但我想以每个单词的开头彼此相邻的方式来做到这一点。

像这样:

                                      One
                                      Two
                                      Three
                                      Four

考虑到字体每个字符的长度可能不同,我如何在 Android 中做到最好?

4

4 回答 4

1

你可以设置gravity你想成为中心的元素和细节

android:gravity="center_horizontal"
于 2010-07-10T16:37:09.067 回答
1

我不确定您的应用程序的行为方式以及是否严格要求 ListView,但您可以使用TableLayoutTableRows来实现您想要的效果。如您所描述的,TableLayout 将为每一行的每一列中的元素排列。

话虽如此,TableLayout 不支持在行或网格线之间设置线条(尽管我似乎有一些巧妙的技巧,包括将 TableRow 的背景颜色更改为黑色,然后将 TableRow 中 View 对象的填充和背景颜色更改为白色以获得黑色分隔线 - 但这并不总是有效,具体取决于您的 View 对象)。

我处于类似的泡菜中,这是我检查的第一条途径。它没有针对我的情况的解决方案,但这可能对您有用。如果您确实找到了一种在列表中排列文本的方法,我很想听听。

编辑:我还觉得值得一提(根据对话的进展情况),您还可以row.setOnClickListener()在 TableView 中设置并使整行可点击。一旦你将它包装在一个 ScrollView 中,它就很像列表了。

于 2010-07-10T18:45:30.780 回答
0

听起来您想将您的项目放在一个父级中,layout_width="wrap_content"并以整个父级为中心。

大概是这样的吧?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <TextView android:text="Content above..."
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <LinearLayout android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal">
        <TextView android:text="One"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView android:text="Two"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView android:text="Three"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <TextView android:text="Content below..."
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />    
</LinearLayout>

gravity记住和之间的区别layout_gravity。该gravity属性是指视图的内容。layout_gravity(以及所有其他以 为前缀的属性layout_)指的是视图在其父视图中的布局。

编辑:如果您希望类似地格式化 ListView 项目,请尝试使用类似这样的方法作为列表项布局,ListView 本身使用layout_width="fill_parent"and layout_height="fill_parent"

<LinearLayout android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:weightSum="2"
    android:gravity="center">
    <TextView android:id="@+id/text" 
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>

text以通常的方式更改每个列表项中带有 id 的 TextView 的内容。从当前主题中提取的minHeight设置将确保它保持适合触摸的大小。

在这种情况下,统一居中由LinearLayout 和TextView上的weightSum和的组合处理。TextView 的权重除以其父级的 weightSum 将确定 LinearLayout 将给予它的水平空间百分比。在上面的示例中,它将获得可用水平空间的 1/2,但居中。gravitylayout_weight

由于 ListView 永远不知道当前不在屏幕上的列表项的内容,因此无法让它测量适配器中每个项目的文本以完美地居中内容。您将不得不使用类似上面示例的列表项布局来近似它。

于 2010-07-11T07:34:36.050 回答
0

使用 layout_gravity="center_horizo​​ntal" 将您的 ListView 包装在 LinearLayout 或

nvm:这显然行不通..

所以等等..你想要一个列表,每行在屏幕的整个宽度上都是可点击的,你想将所有行向左对齐,并且还要在不破坏对齐的情况下将所有对齐的文本居中?

于 2010-07-11T11:09:38.243 回答