【问题标题】:How to show scrollbars on a TextView programmatically如何以编程方式在 TextView 上显示滚动条
【发布时间】:2013-10-29 03:51:19
【问题描述】:

我已经搜索并搜索以找到有关如何将垂直(或水平)滚动条添加到 TextView 而不必使用 XML 来添加行的答案:android:scrollbars="vertical"。

必须有一种无需将其粘贴在另一个 ScrollView 中的编程方式来执行此操作。

我刚刚发现了如何以及因为我对此感到兴奋并想帮助其他遇到同样问题的人,这里是:

【问题讨论】:

    标签: android scroll textview scrollview


    【解决方案1】:

    Rusian Yanchyshyn,在Android: Enable Scrollbars on Canvas-Based View 上发布了答案中的关键

    在匿名类和初始化块的帮助下,我们现在可以执行以下操作:

                TextView textViewWithScrollBars = new TextView(context)
                {
                    {
                        setVerticalScrollBarEnabled(true);
                        setMovementMethod(ScrollingMovementMethod.getInstance());
                        setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
    
                        // Force scrollbars to be displayed.
                        TypedArray a = this.getContext().getTheme().obtainStyledAttributes(new int[0]);
                        initializeScrollbars(a);
                        a.recycle();                        
                    }
                }
    

    【讨论】:

    • 不确定这是否适用于 API 级别 21 及更高级别,因为已删除 initalizeScrollbars 方法..
    • 对于现有的 TextView?
    【解决方案2】:
    // try this
    activity_main.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
    
    </LinearLayout>
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            TextView textView = new TextView(this);
            textView.setText("demotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotext");
            textView.setVerticalScrollBarEnabled(true);
            textView.setLines(3);
            textView.setMovementMethod(new ScrollingMovementMethod());
    
            addContentView(textView,new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
    }
    

    【讨论】:

    • 嗨,Haresh,重点是“setVerticalScrollBarEnabled(true)”不会单独显示滚动条。
    • 你还必须设置这个属性 setMovementMethod(new ScrollingMovementMethod());
    • @HareshChhelana Cool,我们如何启用自动滚动到最后一行?用户通常希望看到更新的消息,但不总是希望看到旧消息。
    【解决方案3】:

    仅在滚动时显示

    Xml(在 textView 元素中):

    android:scrollbarAlwaysDrawVerticalTrack="true" 
    android:scrollbars="vertical"
    

    创建时:

    textView.movementMethod = ScrollingMovementMethod()
    

    【讨论】:

    • 你读过这个问题吗?问题是如何不使用使用xml来做到这一点。
    • 是的,但是所有这些 xml 元素都以编程方式进行了模拟!
    【解决方案4】:

    首先 - 制作一个 style.xml

    <style name="VerticalScrollableTextView">
        <item name="android:scrollbars">vertical</item>
        <item name="android:scrollbarFadeDuration">0</item>
    </style>
    

    第二个 - 使用 ContextWrapper

    val textView = TextView(
            ContextThemeWrapper(context, R.style.VerticalScrollableTextView)
        )
        textView.movementMethod = ScrollingMovementMethod.getInstance()
    

    就是这样!

    【讨论】:

      猜你喜欢
      • 2018-06-01
      • 1970-01-01
      • 2014-01-17
      • 2015-11-14
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      相关资源
      最近更新 更多