如何在父ImageView上居中TextView?

时间:2014-08-09 03:54:40

标签: java android android-layout

我已经尝试了几种方法,每次都失败了。

我想要实现的是将ImageView(水平和垂直)集中在ImageView上,而是命令android:layout_centerInParent =" true"导致整个区域的垂直和水平居中,而不是ImageView。请帮助我将父级附加到TextView或其他解决方法。

这是我的xml代码:

 <ImageView
    android:id="@+id/imageView1"
    android:layout_width="170dp"
    android:layout_height="46dp"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="10dp"
    android:contentDescription="Your Height BG"
    android:src="@drawable/textareabg" />

     <TextView
    android:id="@+id/textView00"

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"

    android:text="Your Height"
    android:textColor="#d88b6d"
    android:textSize="20sp" />

6 个答案:

答案 0 :(得分:1)

使用ConstraintLayout可以轻松实现。 Android最近推出了ConstraintLayout。它允许我们使用“约束”来布局子视图,以定义在布局中找到的不同视图之间基于位置的关系。它类似于RelativeLayout,但比它强大得多,因为ConstraintLayout在更大程度上减少了视图层次结构。现在回到你的问题,这是为你工作的示例xml代码

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   xmlns:app="http://schemas.android.com/apk/res-auto">

   <ImageView
       android:id="@+id/image"
       android:layout_width="200dp"
       android:layout_height="200dp"
       android:src="@mipmap/ic_launcher"
       app:layout_constraintRight_toRightOf="parent"
       app:layout_constraintLeft_toLeftOf="parent"
       app:layout_constraintTop_toTopOf="parent"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintVertical_bias="0.1"/>

   <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Image"
       android:textSize="20sp"
       app:layout_constraintRight_toRightOf="@+id/image"
       app:layout_constraintLeft_toLeftOf="@+id/image"
       app:layout_constraintTop_toTopOf="@+id/image"
       app:layout_constraintBottom_toBottomOf="@+id/image"/>

</android.support.constraint.ConstraintLayout>

设备上的输出视图

device_output

您可以使用 app:layout_constraintHorizo​​ntal_bias app:layout_constraintVertical_bias 将TextView放置在ImageView的任意位置。默认情况下,这些值将设置为 0.5 。因此,如果我们不指定任何值,它将默认为中心对齐。

  

向视图的两侧添加约束(以及视图大小   对于相同的维度,可以是“固定”或“包装内容”),视图   默认情况下,它们会在两个锚点之间居中。

注意:偏差属性仅在您指定边界的约束时有效(例如,垂直偏差的顶部和底部,水平偏差的左侧和右侧)

有关ConstraintLayout的更多信息

ConstraintLayout

Sample Project

Blog on ConstraintLayout

答案 1 :(得分:0)

也许这可以帮助您解决问题

Android TextView text won't center

此处有人使用android:gravity="center"提及。

答案 2 :(得分:0)

请尝试这种方式,希望这有助于您解决问题。

<FrameLayout
   android:layout_width="wrap_content"
   android:layout_height="wrap_content">
   <ImageView
      android:id="@+id/imageView1"
      android:layout_width="170dp"
      android:layout_height="46dp"
      android:layout_marginLeft="10dp"
      android:layout_marginTop="10dp"
      android:contentDescription="Your Height BG"
      android:src="@drawable/textareabg" />

   <TextView
      android:id="@+id/textView00"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center"
      android:text="Your Height"
      android:textColor="#d88b6d"
      android:textSize="20sp" />
</FrameLayout>

答案 3 :(得分:0)

这就是我要做的事情

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="170dp"
    android:layout_height="46dp"
    android:layout_centerHorizontal="false"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="10dp"
    android:contentDescription="Your Height BG" />

 <TextView
     android:id="@+id/textView00"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignLeft="@+id/imageView1"
     android:layout_alignTop="@+id/imageView1"
     android:layout_centerHorizontal="true"
     android:layout_centerInParent="true"
     android:layout_centerVertical="true"
     android:layout_marginLeft="30dp"
     android:layout_marginTop="10dp"
     android:text="Your Height"
     android:textColor="#d88b6d"
     android:textSize="20sp" />

答案 4 :(得分:0)

你需要做的是使用FrameLayout。文档说:

FrameLayout旨在阻挡屏幕上的某个区域以显示单个项目。通常,FrameLayout应该用于保存单个子视图,因为以可以扩展到不同屏幕大小而儿童不会相互重叠的方式组织子视图可能很困难。但是,您可以使用android:layout_gravity属性将多个子项添加到FrameLayout并通过为每个子项分配重力来控制它们在FrameLayout中的位置。

子视图以堆栈形式绘制,最近添加的子项位于顶部。 FrameLayout的大小是其最大子项(加填充)的大小,可见或不可见(如果FrameLayout的父母许可)。仅当setConsiderGoneChildrenWhenMeasuring()设置为true时,GONE视图才会用于调整大小。

所以你需要像psuedo布局代码一样:

<FrameLayout>
   <ImageView gravity="center">
   <TextView gravity="center">
</FrameLayout>

答案 5 :(得分:0)

在您的布局下再添加一个相对布局,如下所示:

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true">

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/imageView"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/textView"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

检查所需的宽度和高度。例如。如果需要图像的特定高度和宽度,请更改此相对布局的高度和宽度。

多数民众赞成......