Textview选框以编程方式

时间:2017-01-29 22:15:55

标签: android android-layout listview textview marquee

尝试从数组中填充textview。我通过下面的代码设法通过XML获得了预期的效果

false

但是我需要在数组中使用其中的几个 - 所以我认为以编程方式创建textviews可能是答案,但是无法将它们带到字幕中。这是我正在处理的代码。

<?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">

    <TextView
        android:id="@+id/marque_scrolling_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:padding="16dp"
        android:scrollHorizontally="true"
        android:singleLine="true"
        android:text="Create a Marquee (Scrolling Text) in Android Using TextView. Android Marquee (Scrolling Text) Tutorial with Example"
        android:textSize="24sp" />
</LinearLayout>

3 个答案:

答案 0 :(得分:6)

试试这个......工作

TextView testing = (TextView) this.findViewById(R.id.testing);
testing.setEllipsize(TextUtils.TruncateAt.MARQUEE);
testing.setMarqueeRepeatLimit(-1);
testing.setSingleLine(true);
testing.setSelected(true);

答案 1 :(得分:2)

试试这个。

final RelativeLayout relativeLayout = new RelativeLayout(this);
final RelativeLayout relativeLayoutbotombar = new RelativeLayout(this);
textView = new TextView(this);
textView.setId(1);

RelativeLayout.LayoutParams relativlayparamter = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.MATCH_PARENT,
                    RelativeLayout.LayoutParams.MATCH_PARENT);

        RelativeLayout.LayoutParams relativlaybottombar = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        relativeLayoutbotombar.setLayoutParams(relativlaybottombar);


        textView.setText("text text text text text, with a long ");
        textView.setEllipsize(TruncateAt.MARQUEE);
        textView.setSelected(true);
        textView.setSingleLine(true);


        relativeLayout.addView(relativeLayoutbotombar);
        relativeLayoutbotombar.addView(textView);
        setContentView(relativeLayout, relativlayparamter);

另一种选择:

TextView textView = (TextView) this.findViewById(R.id.xxx);  
textView.setEllipsize(TruncateAt.MARQUEE);
textView.setText("Text text text text");
textView.setSelected(true);
textView.setSingleLine(true);

答案 2 :(得分:0)

使用此代码。我改进了你的代码,享受复制粘贴。

    val strings = arrayOf("Mark", "James", "Paul")
    val layout = findViewById<View>(R.id.linear) as LinearLayout
    layout.orientation = LinearLayout.VERTICAL
    for (s in strings) {
        val newTextView = TextView(this)

        newTextView.layoutParams = ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT)

        newTextView.text = s
        newTextView.isSingleLine = true
        newTextView.ellipsize = TextUtils.TruncateAt.END
        newTextView.setHorizontallyScrolling(true)
        newTextView.setLines(1)
        newTextView.marqueeRepeatLimit = -1
        newTextView.isSelected = true
        newTextView.textSize = 24f
        
        addMarquee(newTextView)
        
        layout.addView(newTextView)
    }

也将此函数添加到您的类中

    fun addMarquee(textView: TextView) {
    textView.viewTreeObserver.addOnGlobalLayoutListener(object :
        ViewTreeObserver.OnGlobalLayoutListener {
        override fun onGlobalLayout() {
            val pixels = textView.measuredWidth - 1
            val params = textView.layoutParams
            params.width = pixels
            textView.layoutParams = params
            textView.isSelected = true
            textView.ellipsize = TextUtils.TruncateAt.MARQUEE
            textView.isSingleLine = true
            textView.marqueeRepeatLimit = -1
            textView.viewTreeObserver.removeOnGlobalLayoutListener(this)
        }
    })
}