中心文本视图不会出现在RelativeLayout中

时间:2015-07-01 22:27:27

标签: android textview relativelayout

我有一个TextView,我需要在正方形内水平和垂直居中。为此,我将它放在RelativeLayout中:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:background="#fff"
    >

    <TextView
        android:id="@+id/centered_text_view_text"
        android:layout_centerInParent="true"
        android:text="test"
        android:background="#00ff00"
        android:textColor="#000"
        android:textSize="16dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</RelativeLayout>

我使用LayoutInflater实例化RelativeLayout,然后在RelativeLayout上调用layout方法将它放置在我需要的位置。

        LayoutInflater inflater = Helpers.getInflater();
        containerLayout = (RelativeLayout) inflater.inflate(R.layout.centered_text_view, null);
        textView = (TextView) containerLayout.findViewById(R.id.centered_text_view_text);
        ... (later in the code)
        containerLayout.layout(dayLeft, weekTop, dayRight, weekBottom);

我的问题是TextView不可见。我可以看到RelativeLayout的白色背景,但看不到TextView的文本和背景。

我也试过摆脱RelativeLayout并在TextView上调用layout方法。然而,由于文本只是在文本视图上设置重力后,文本只是水平而不是垂直对齐,所以我无法使其工作。

1 个答案:

答案 0 :(得分:0)

首先 - 自定义视图应该扩展某种View.class。要扩展的类应该是xml中的根视图。

第二次 - 您保留对containerLayout(根视图)的引用,这是多余的。此类根视图。

containerLayout替换为this或完全删除:

textView = (TextView) findViewById(R.id.centered_text_view_text);

第三次 - 我不能说你的膨胀是怎么回事,但我从来没有这样做过。

不要在layout上调用containerLayout,而是尝试使用inflate()方法进行充气。 (扩展View

的子类时可以访问此内容
inflate(getContext(), R.layout.view_user_tag, this);

注意我如何将this设置为根,并使用视图类中的inflater。

您的课程可能如下所示:

public static class TextInLinear extends RelativeLayout { 

     public TextView textView; 

     //region default constructers 

     public void TextInLinear(Context context){
        this(context, null);
     }

     public void TextInLinear(Context context, AttributeSet attrs){
        this(context, attrs, 0);
     }

     public void TextInLinear(Context context, AttributeSet attrs, int defStyleAttr) {
         super(context, attrs, defStyleAttr);
         if(!isInEditMode()) init();
     }

     //endregion

     private void init(){
         inflate(getContext(), R.layout.view_user_tag, this);
         textView = (TextView) this.findViewById(R.id.centered_text_view_text);
     }


     /* more methods. i.e. setText(), getText() or whatever */
}