Android的,RelativeLayout的改变同样的RelativeLayout ImageView的时候重新启动选取框的TextView [英] Android, RelativeLayout restarts Marquee-TextView when changing ImageView in same RelativeLayout
问题描述
我还没有找到我的问题的解决方案,也许你可以帮助我在这里。
我使用的RelativeLayout带的ImageView和一个TextView儿童。 TextView的包含了大量的文字,应该由右至左滚动。但每次当我设置一个新的形象的ImageView的,从开始。选取框启动
我认为,通过设置新的形象的TextView失去其重点,因此选取框重新开始。我怎样才能prevent认为还是有别的东西,我做错了什么?将是巨大的,如果有人可以点我正确的解决方案。
非常感谢!
您可以复制我的问题与此code:
进口android.app.Activity;
进口android.graphics.Color;
进口android.os.Bundle;
进口android.os.Handler;
进口android.text.TextUtils.TruncateAt;
进口android.view.Display;
进口android.widget.ImageView;
进口android.widget.ImageView.ScaleType;
进口android.widget.RelativeLayout;
进口android.widget.TextView;公共类RelativeLayoutActivity延伸活动{ 私人ImageView的mImageView;
私人TextView的mTextView; 私人处理程序mHandler =新的处理程序();
私人INT mCurrentImage = 0; 私人Runnable接口mCallback =新的Runnable(){
@覆盖
公共无效的run(){
toggleImage();
}
}; @覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState); 的setContentView(R.layout.main); InitLayout在();
setLongText(); mHandler.postDelayed(mCallback,5000);
} 私人无效InitLayout在(){
RelativeLayout的布局=(RelativeLayout的)findViewById(R.id.parentLayout); 显示显示= getWindowManager()getDefaultDisplay()。
INT屏幕宽度= display.getWidth();
INT screenHeight = display.getHeight(); mImageView =新ImageView的(本);
mImageView.setScaleType(ScaleType.FIT_XY);
RelativeLayout.LayoutParams RLP =新RelativeLayout.LayoutParams(屏幕宽度,screenHeight);
mImageView.setImageDrawable(this.getResources()getDrawable(R.drawable.red));
layout.addView(mImageView,RLP); //在底部滚动字幕文本
mTextView =新的TextView(本);
mTextView.setSingleLine();
mTextView.setEllipsize(TruncateAt.MARQUEE);
mTextView.setMarqueeRepeatLimit(-1);
mTextView.setHorizontallyScrolling(真);
mTextView.setFocusable(真);
mTextView.setFocusableInTouchMode(真);
mTextView.setBackgroundColor(Color.BLACK);
mTextView.setTextColor(Color.WHITE); RLP =新RelativeLayout.LayoutParams(屏幕宽度,50);
rlp.topMargin = screenHeight-100;
layout.addView(mTextView,RLP);
} 私人无效setLongText(){
StringBuilder的SB =新的StringBuilder();
的for(int i = 0; I< 50;我++){
sb.append();
}
的for(int i = 0; I< 50;我++){
sb.append(A);
}
的for(int i = 0; I< 50;我++){
sb.append(B);
}
的for(int i = 0; I< 50;我++){
sb.append(C);
}
mTextView.setText(sb.toString());
mTextView.setSelected(真);
} 私人无效toggleImage(){
mCurrentImage ++;
如果(mCurrentImage%2 == 0){
mImageView.setImageDrawable(this.getResources()getDrawable(R.drawable.red));
}其他{
mImageView.setImageDrawable(this.getResources()getDrawable(R.drawable.green));
} mHandler.postDelayed(mCallback,5000);
}
}
我有一个同样的问题,我固定它刚才:)
如果您的TextView这在布局XML包含layout_weight
的android:layout_weight =1
删除!这attibute原因选取框重启。
希望有所帮助:)
I have not found a solution for my problem, maybe you can help me here.
I am using a RelativeLayout with an ImageView and a TextView as children. The TextView contains a large text and should scroll from right to left. But everytime when I set a new image to the ImageView, the marquee starts from beginning.
I think that by setting a new image the TextView looses its focus and so the marquee starts again. How can I prevent that or is there something else I am doing wrong? Would be great if someone could point me to the correct solution.
Thanks a lot!
You can reproduce my problem with this code:
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);
}
}
I had a same problem and I fixed it just now:)
If your TextView which in layout XML contains layout_weight
android:layout_weight="1"
Remove it!This attibute cause marquee restart.
Hope helpful:)
这篇关于Android的,RelativeLayout的改变同样的RelativeLayout ImageView的时候重新启动选取框的TextView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!