如何使TextView定位响应?

时间:2016-07-07 05:33:59

标签: android responsive-design textview

enter image description here

在上图中,黑色气泡及其背后的红色背景为单个ImageView,横跨垂直手机屏幕的宽度。 “Hello”是TextView,布局是相对的。使用边距,我能够在我的Android模拟器中将“Hello”定位在语音气泡中 - 但是当我模拟不同的手机时定位关闭。

  1. 有没有更好的方法来定位我的TextView
  2. 有没有办法让它响应(所以Hello总是在 讲话泡泡,无论装置是什么)?
  3. 这是我的xml:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/relativeLayout"> 
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/mainGraphic"
            android:src="@drawable/finished2"
            android:layout_marginBottom="97dp"
            android:layout_above="@+id/enterValue"
            android:layout_alignParentStart="true" />
    
        <TextView
            android:maxWidth="200dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Medium Text"
            android:id="@+id/helloText"
            android:textColor="#FFFFFF"
            android:layout_marginEnd="29dp"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true"
            android:layout_marginTop="45dp" />
    
    </RelativeLayout>
    

5 个答案:

答案 0 :(得分:0)

我会使用 FrameLayout 而不是像图片一样大小的 RelativeLayout 。 然后使用属性android:layout_gravity="center"android:gravity="center"作为TextView。

答案 1 :(得分:0)

试试这个:

...
    <TextView
        android:maxWidth="200dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Medium Text"
        android:id="@+id/helloText"
        android:textColor="#FFFFFF"
        android:layout_alignTop="@+id/mainGraphic"
        android:layout_alignBottom="@+id/mainGraphic"
        android:layout_alignLeft="@+id/mainGraphic"
        android:layout_alignRight="@+id/mainGraphic"
        android:gravity="center" />
...

答案 2 :(得分:0)

最佳方法是使用9-patch image&amp;将其设置为Textview的背景。如果您使用普通的png文件,我们无法保证它将在所有分辨率上正确对齐&amp;拉伸时会变得模糊。

9-Patch图像自动调整大小以适应视图内容和屏幕大小。 Android SDK提供了一个用于创建9-patch图像的工具,该工具位于 SDK sdk / tools目录中。见https://developer.android.com/studio/write/draw9patch.html

答案 3 :(得分:0)

您应该使用 9-patch 作为邮件形状。您可以做的是将布局的根视图作为 FrameLayout ,然后向其中添加 TextView 。设置消息形状Nine-patch作为 TextView 的背景。

由Roman Nurik创建9-patch访问https://romannurik.github.io/AndroidAssetStudio/nine-patches.html。只需上传图像资源的png文件,然后选择 xhdpi 定义以获得最佳效果。 Nine-patch有3个主要属性 -

拉伸区域:定义资产的哪些区域可以拉伸以适应不同的屏幕密度。

内容填充:定义将在图像中显示的内容(文本)的填充区域。

光学界限:定义资产周围应该有多少光学可见区域。

使用Nine-patches的优点:

  • 可扩展
  • 易于使用
  • 轻型
  • 可以放入任何数量的内容。

希望这有帮助。

答案 4 :(得分:0)

理想情况下,您应该使用相对于RelativeLayout的完整红色背景,以及TextView的黑色语音9patch图像。 但是如果你真的希望RelativeLayout的背景为带有语音气泡的红色,你必须在运行时设置它。

分别在运行时计算RelativeLayout的高度和宽度,分别为150px300px。 仔细查看背景图像,并从顶部,右侧,底部和左侧确定气泡的边缘点。例如,如果图片高度为100px 200px,并且气泡顶部位于30px,而底端位于70px,则右边缘从150px开始并向左结束于250px。还要计算TextView的宽度和高度。

在运行时,根据上面的数字更改TextView的位置。