1

私は水平方向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>
4

4 に答える 4

1

実行時に 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>

実行時にビューを初期化し、TextView の上部パディングを ImageView の高さから設定する

 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));
}
于 2013-09-18T11:56:52.667 に答える
0

テキストビューの上マージンを画像ビューのサイズの半分に設定すると、常に画像ビューの中心から開始されます。

Text View Top Margin = Image view Height /2 
于 2013-09-18T11:57:54.803 に答える
0
<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_gravity="center_vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
</LinearLayout>
于 2013-09-18T11:54:39.880 に答える