我最近看到一个Android应用程序,其中在单独的列中的每一行之前添加了数字行。主列也与多行TextView一起滚动。如何添加此类行号以及textview?请参见屏幕截图:
我尝试通过添加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还有其他方法可以实现吗?
答案 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() ;
}
});