如何在Android中的多行Textview之前添加数字行?

时间:2017-05-27 05:22:55

标签: java android android-layout android-studio textview

我最近看到一个Android应用程序,其中在单独的列中的每一行之前添加了数字行。主列也与多行TextView一起滚动。如何添加此类行号以及textview?请参见屏幕截图:

enter image description here

我尝试通过添加2个具有相同fontsize的多行textview来实现它。

 <LinearLayout
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/ct"
        android:layout_weight="0.075"
        android:textColor="@android:color/darker_gray"
        android:layout_width="0dp"
        android:layout_marginRight="1dp"
        android:background="#303133"
        android:layout_height="match_parent"
        android:inputType="textMultiLine"
        android:textSize="15sp"/>
    <ScrollView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"
        android:background="#303133">
        <HorizontalScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:id="@+id/txt"
                android:textColor="@android:color/white"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textMultiLine"
                android:textSize="15sp" />

        </HorizontalScrollView>

    </ScrollView>

</LinearLayout>

但是如何根据其他Textview在NumberLine TextView中添加相同数量的行?以及如何将NumberLine TextView与其他Textview一起滚动? afterall还有其他方法可以实现吗?

2 个答案:

答案 0 :(得分:1)

也许你可以使用两个RecyclerView,一个用于行号,另一个用于代码,其中每一行都是一个项目。

例如tutorial

编辑

我认为你可以为你的文字使用第二个滚动视图,例如:

<LinearLayout
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="match_parent">
    <ScrollView
        android:id="@+id/scroll_view_ct"
        android:layout_width="0dp"
        android:layout_weight="0.075"
        android:layout_height="match_parent"
        android:background="#303133">
        <HorizontalScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                 android:id="@+id/ct"
                 android:layout_weight="match_parent"
                 android:textColor="@android:color/darker_gray"
                 android:layout_width="0dp"
                 android:layout_marginRight="1dp"
                 android:background="#303133"
                 android:layout_height="match_parent"
                 android:inputType="textMultiLine"
                 android:textSize="15sp"/>
       </HorizontalScrollView>
    </ScrollView>
    <ScrollView
        android:id="@+id/scroll_view_txt"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"
        android:background="#303133">
        <HorizontalScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:id="@+id/txt"
                android:textColor="@android:color/white"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textMultiLine"
                android:textSize="15sp" />

        </HorizontalScrollView>

    </ScrollView>

</LinearLayout>

然后协调滚动侦听器

scrollViewCT.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
        @Override
        public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
            scrollViewTxt.scrollTo(scrollx, scrollY)
        }
    });

scrollViewTxt.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
            @Override
            public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
                scrollViewCT.scrollTo(scrollx, scrollY)
            }
        });

另一个解决方案是在同一个滚动视图中直接使用两个文本视图,可能是这样的:

<LinearLayout
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="match_parent">
    <ScrollView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"
        android:background="#303133">
        <HorizontalScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <LinearLayout
                 android:layout_width="match_parent"
                 android:orientation="horizontal"
                 android:layout_height="match_parent">
            <TextView
                android:id="@+id/ct"
                android:layout_weight="0.075"
                android:textColor="@android:color/darker_gray"
                android:layout_width="0dp"
                android:layout_marginRight="1dp"
                android:background="#303133"
                android:layout_height="match_parent"
                android:inputType="textMultiLine"
                android:textSize="15sp"/>
            <TextView
                android:id="@+id/txt"
                android:textColor="@android:color/white"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textMultiLine"
                android:gravity="end"
                android:textSize="15sp" />
            </LinearLayout>
        </HorizontalScrollView>

    </ScrollView>
 </LinearLayout>

希望这有帮助。

答案 1 :(得分:0)

您可以使用TextView中的getLineCount()来获取当前textview在屏幕上显示的实际行数。

getLineCount()在测量和绘制布局后工作,否则返回0.因此,您可以使用以下方法,在TextViw发生布局更改时通知您:

textView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        // call textview.getLineCount() ;
    }
});