android - 在 TextView 中对齐第一行

标签 android android-layout

我有水平方向的 LinearLayout,里面有 ImageViewTextView(左边是图片,右边是文本)。我想将 TextView 的第一行(即使它有多行)与 ImageView 的中心对齐。我怎样才能做到这一点?

我当前的代码,它使整个 TextView 居中,而不仅仅是第一行:

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

        <ImageView
            android:id="@+id/icon_distance"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/icon_distance" />

        <TextView
            android:duplicateParentState="true"
            android:gravity="center_vertical"
            style="@style/taskAddressText"
            android:id="@+id/task_address"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
</LinearLayout>

最佳答案

您可以通过在运行时获取 ImageView 的高度将 TextView 的第一行设置到 ImageView 的中心,并将该高度分成 2 以获得 ImageView 的中心,然后将上边距或填充设置到 TextView,如下所示:

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

    <ImageView
        android:id="@+id/icon_distance"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:background="@color/colorPrimary"
        android:src="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/task_address"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="sample address "/>

</LinearLayout>

初始化 View 并在运行时从 ImageView 高度设置 TextView 顶部填充

 iconDistance = (ImageView) findViewById(R.id.icon_distance);
 taskAddress = (TextView) findViewById(R.id.task_address);

 ViewTreeObserver vto = iconDistance.getViewTreeObserver();
 vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
     public boolean onPreDraw() {
        iconDistance.getViewTreeObserver().removeOnPreDrawListener(this);
        int finalHeight = iconDistance.getMeasuredHeight();
        taskAddress.setPadding(0,(convertPixelsToDp(finalHeight)/2),0,0);
        return true;
     }
 });

将像素转换为dp

public int convertPixelsToDp(int px){
   DisplayMetrics metrics = getResources().getDisplayMetrics();
   return (int) (px / ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT));
}

关于android - 在 TextView 中对齐第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18871420/

相关文章:

java - 避免'Layer exceeds max dimensions supported by the GPU in Android

android - 如何使两个不同的布局具有相同的高度?

java - E/libEGL : validate_display:99 error 3008 (EGL_BAD_DISPLAY) API 24 or higher

android - 如何从 fragment 中获取 EditText

android - BaseLayerAndroid 创建销毁日志消息

java - 安卓工作室;底部导航 View = 空

android - 在 ListView 顶部包含 float 操作按钮

java - Android - 在 TableRow 上设置固定高度似乎不起作用

android - 在列表的每一行添加溢出图标

java - 将gradle classpath依赖关系更新为3.1.1导致找不到符号类 list 错误