Android,RelativeLayout 在同一 RelativeLayout 中更改 ImageView 时重新启动 Marquee-TextView

标签 android textview android-relativelayout marquee

我还没有找到解决我的问题的方法,也许你可以在这里帮助我。

我正在使用带有 ImageView 和 TextView 作为 subview 的 RelativeLayout。 TextView 包含大文本,应从右向左滚动。但是每次当我为 ImageView 设置一个新图像时,选取框从头开始。

我认为通过设置新图像,TextView 会失去焦点,因此选取框会重新开始。我怎样才能防止这种情况发生或者我做错了什么?如果有人能指出我正确的解决方案,那就太好了。

非常感谢!

您可以使用此代码重现我的问题:

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils.TruncateAt;
import android.view.Display;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class RelativeLayoutActivity extends Activity {

    private ImageView mImageView;
    private TextView mTextView;

    private Handler mHandler = new Handler();
    private int mCurrentImage = 0;

    private Runnable mCallback = new Runnable() {
        @Override
        public void run() {
            toggleImage();
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        initLayout();
        setLongText();

        mHandler.postDelayed(mCallback, 5000);
    }

    private void initLayout() {
        RelativeLayout layout = (RelativeLayout) findViewById(R.id.parentLayout);

        Display display = getWindowManager().getDefaultDisplay(); 
        int screenWidth = display.getWidth();
        int screenHeight = display.getHeight();

        mImageView = new ImageView(this);
        mImageView.setScaleType(ScaleType.FIT_XY);
        RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(screenWidth,screenHeight);        
        mImageView.setImageDrawable(this.getResources().getDrawable(R.drawable.red));
        layout.addView(mImageView, rlp);

        // marquee text at the bottom
        mTextView = new TextView(this);
        mTextView.setSingleLine();
        mTextView.setEllipsize(TruncateAt.MARQUEE);
        mTextView.setMarqueeRepeatLimit(-1);
        mTextView.setHorizontallyScrolling(true);
        mTextView.setFocusable(true);
        mTextView.setFocusableInTouchMode(true);
        mTextView.setBackgroundColor(Color.BLACK);
        mTextView.setTextColor(Color.WHITE);

        rlp = new RelativeLayout.LayoutParams(screenWidth, 50);
        rlp.topMargin = screenHeight-100;
        layout.addView(mTextView, rlp);
    }

    private void setLongText() {
        StringBuilder sb = new StringBuilder();
        for (int i=0; i<50; i++) {
            sb.append(" ");
        }
        for (int i=0; i<50; i++) {
            sb.append("A");
        }
        for (int i=0; i<50; i++) {
            sb.append("B");
        }
        for (int i=0; i<50; i++) {
            sb.append("C");
        }
        mTextView.setText(sb.toString());
        mTextView.setSelected(true);
    }

    private void toggleImage() {
        mCurrentImage++;
        if (mCurrentImage % 2 == 0) {
            mImageView.setImageDrawable(this.getResources().getDrawable(R.drawable.red));
        } else {
            mImageView.setImageDrawable(this.getResources().getDrawable(R.drawable.green));
        }

        mHandler.postDelayed(mCallback, 5000);
    }
}

最佳答案

我遇到了同样的问题,我刚刚解决了:)

如果布局 XML 中的 TextView 包含 layout_weight

android:layout_weight="1"

删除它!这个属性会导致跑马灯重启。

希望有帮助:)

关于Android,RelativeLayout 在同一 RelativeLayout 中更改 ImageView 时重新启动 Marquee-TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8203286/

相关文章:

android - 如何检查 TextView 字符串是否已被修剪(选取框)?

android - 无法在不更改其大小的情况下定位 RelativeLayout View 的子项

android - View 未显示在relativeLayout中

java - 相对布局 fill_parent 问题

java - 缓存 BufferedInputStream?明智的?

java - 将可运行对象发布到 UI 线程后调用 wait() 直到完成

java - android - 启动画面上的进度条

android - 在 Android 中像 Marquee 一样滚动 TextView

android - 从收听拨出电话的广播接收器启动 Activity

java - 如何将两种不同的字体应用到TextView?