如何使TextView的高度匹配ImageView或CompoundDrawable

时间:2014-06-19 21:30:30

标签: android android-layout

我尝试使用ImageView + TextView的布局,也只使用带有CompoundDrawable的TextView,但无法使TextView的文本高度与ImageView的高度对齐。这就是我所拥有的:

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="@dimen/default_padding" />

    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/image"
        android:layout_alignBottom="@+id/image"
        android:layout_toRightOf="@+id/image"
        android:layout_marginRight="@dimen/default_padding" />
</RelativeLayout>

2 个答案:

答案 0 :(得分:1)

做起来并不是很简单......但是我尝试了并提出了这个解决方案,但要注意,这样做肯定不是定义UI的简洁方法。我宁愿将字体大小设置为适合的东西,而不是ImageView的大小。

所以这是它的工作原理:

在布局中,另外将此参数设置为TextView以禁用其他填充:

  android:includeFontPadding="false"

在您的Activity中,您必须在OnGlobalLayoutChangeListener的帮助下设置字体大小,因为要获得视图的大小,必须首先进行布局。在我们改变字体大小之前我们需要大小(这里简化为简短):

private boolean layouted = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.some_layout);

    final TextView t = (TextView) findViewById(R.id.name);
    final ImageView i = (ImageView) findViewById(R.id.image);

    t.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
           //check if already did this, as changing the textSize will cause another layout to happen
           if(!layouted){
               t.setTextSize(TypedValue.COMPLEX_UNIT_PX, i.getHeight());
               layouted=true;
           }
        }
    });

答案 1 :(得分:1)

试试这种方式,希望这可以帮助您解决问题。

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

    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="demo text demo text demo textdemo textdemo textdemo textdemo textdemo textdemo textdemo textdemo textdemo textdemo textdemo textdemo text demo textdemo textdemo textdemo"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:scaleType="fitXY"
        android:src="@drawable/ic_launcher"/>
</LinearLayout>