getLeft()不适用于android中的TextView

时间:2014-10-28 12:02:02

标签: android

我在android中创建了一个自定义控件(按钮),它有一个左图像,中心文本和右箭头图像。使用此自定义控件时,我必须为此按钮绘制上边框和下边框。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical" >

<View
         android:id="@+id/viwupperline"
         style="@style/bsf_viwline"/> 
<RelativeLayout
    android:id="@+id/lytcontrollayout"
    android:layout_width="fill_parent"
    android:paddingLeft="12dp"
    android:paddingRight="12dp"
    android:layout_height="38dip"
    android:layout_margin="5dip" >

    <ImageView
        android:id="@+id/imgrightimage"
        android:layout_width="25dip"
        android:layout_height="25dip"
        android:layout_centerVertical="true"
       />

    <TextView
        android:id="@+id/txttextoncontrol"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="5dp"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/imgrightimage"
        android:textSize="17sp"
        android:textColor="@color/grey" >
    </TextView>

    <ImageView
        android:id="@+id/imgarrow"
        android:layout_width="20dip"
        android:layout_height="20dip"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:src="@drawable/bsfarrowright" >
    </ImageView>

</RelativeLayout>

    <View
         android:id="@+id/viwbottomline"
         style="@style/bsf_viwline"/>

如果我只使用一个按钮,则必须显示完整的上边框和下边框。否则应该与TextView对齐绘制底部边框。我创建了边框视图。我把getLeft()用于TextView。如果底部边框应最小化,我可以为视图设置marginleft,如下所示:

public void AddMarginToLowerBorder()
{
    int margin = _text.getLeft();
    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)_viewlower.getLayoutParams();
    params.setMargins(margin, 0, 0, 0);
    _viewlower.setLayoutParams(params);
}

但是getLeft()无效。

如果我这样设置,

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)_viewlower.getLayoutParams();
    params.setMargins(70, 0, 0, 0);
    _viewlower.setLayoutParams(params);

,然后它正常运作。

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

在视图未显示之前,您不能使用getLeft()(和getTop等)。不要手动计算边距,而是将边框放入RelativeLayout并使用android:layout_below / android:layout_above / android:layout_toRightOf.属性。