如何在忽略兄弟图像的同时对齐文本?

时间:2016-08-15 04:38:42

标签: android xml android-layout android-studio

考虑以下布局:

<LinearLayout
    android:id="@+id/headerLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
         android:contentDescription="@string/pipboyImage_contentDescription"
        android:id="@+id/pipboyIcon"
        android:layout_height="40dp"
        android:layout_width="40dp"
        android:src="@drawable/pipboy"/>

    <TextView
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="@string/title"
        android:textAlignment="center"
        android:textSize="20sp"
        android:textStyle="bold"/>
</LinearLayout>

在示例中,我正在尝试为大学练习重新创建界面。两个相关的要求是我们必须使用LinearLayout,我们必须兼容API 15.我无法复制文本的确切对齐方式,虽然我已经确认我到目前为止所接受的内容是可以接受的老师对精确复制所提供界面的定义,让我感到困惑的是,我似乎无法弄清楚对齐文本的正确方法。

文本需要与中心对齐。但是,此对齐似乎不会确认直接放在其左侧的图像。在示例中,文本与屏幕中心完全对齐。在我的例子中,我能得到的最好的是在设置图像后将文本对齐到剩余空间的中心。

What I have vs What I am trying to do

我玩过android:layout_weight,最终以图像的重量为1,文本的权重为4。最好的情况是,我现在拥有相同的布局。我也和android:layout_gravity一起玩过,但我似乎能够做的就是让我的对齐远离我的意图。

在线进行一些研究,有人建议我使用RelativeLayout。这不是一个选项,因为老师坚持我们只使用LinearLayout。一位学生建议使用android:paddingLeft。这绝对是一个选择,但我觉得这不会给出完美的定位。它只是“模仿”我正在测试的环境中所需的布局。

我也关注android:textAlignment="center"的使用,因为这报告了API 17的支持,并且我们被特别告知使用API​​ 15的支持。再次,未能修复这种轻微的错位不会失去我标记,所以我并不担心我只是没有正确地实现它'到规范'。也就是说,该示例是“按规范”提供的,因此我很好奇如何使用API​​ 15支持和LinearLayout执行此操作。

如何以忽略同级对象的方式对齐文本,仅使用LinearLayout并强制执行A​​PI 15兼容性?

3 个答案:

答案 0 :(得分:1)

你可以试试这个。它可能有用:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

<TextView
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:gravity="center"
    android:text="@string/app_name_full"
    android:textAlignment="center"
    android:textSize="20sp"
    android:textStyle="bold" />

<ImageView
    android:layout_width="40dp"
    android:layout_height="40dp" 
    android:src="@drawable/app_icon"/>

</RelativeLayout>

答案 1 :(得分:1)

放一个假人View&amp;设定宽度和宽度高度与ImageView相同。尝试

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/pipboyIcon"
        android:layout_height="40dp"
        android:layout_width="40dp"
        android:src="@drawable/pipboy"/>

    <TextView
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:text="Exercise 2 Going mad"
        android:gravity="center"
        android:textSize="20sp"
        android:textStyle="bold"/>

    <View
        android:layout_width="40dp"
        android:layout_height="40dp"/>

</LinearLayout>

丑陋的是为您的TextView设置负余量。同时删除android:textAlignment&amp;添加android:gravity

<TextView
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:text="@string/title"
    android:layout_marginLeft="-40dp"
    android:gravity="center"
    android:textSize="20sp"
    android:textStyle="bold"/>
  

注意:这适用于小文本。如果长度很长,这将是   重叠图像。

答案 2 :(得分:0)

我能够使用发布的备用答案实现所需的对齐,关于幻像视图以平衡图像。然而,虽然作者坚持认为它应该按原样运行而没有任何额外的重量,但我发现我仍然需要使用重量以达到所需的对齐。

这是我的最终布局,经过调整以提供所需的结果,在我发布的问题示例图片中。

<LinearLayout
    android:id="@+id/main_headerLayout"
    android:orientation="horizontal"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    >

    <ImageView
        android:id="@+id/main_pipboyIcon"
        android:layout_width="0dp"
        android:layout_height="40dp"
        android:layout_weight="1"
        android:src="@drawable/pipboy"
        />

    <TextView
        android:id="@+id/main_headerText"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="4"
        android:text="@string/main_title"
        android:gravity="center"
        android:textSize="20dp"
        android:textStyle="bold"
        />

    <View
        android:id="@+id/main_headerCounterBalance"
        android:layout_width="0dp"
        android:layout_height="40dp"
        android:layout_weight="1"
        />
</LinearLayout>

作为旁注,我在此处发现了一个问题,该问题解决了使用android:layout_weightandroid:layout_widthandroid:layout_height的问题,并建议weight要求设置相应的维度到0dp,否则生成的尺寸将复合,其尺寸为wrap_contentmatch_parent。果然,将所需的weight设置为0dp给了我一个更清晰的对齐方式,之后我注意到通过上面.xml显示的文本中的直线对齐。

我还可以使用android:gravity="center"代替android:textAlignment,这会提供相同的居中对齐,而不会引发与所需API 15不兼容的警告。