Android 重新绘制有关方向更改的视图

Android 重新绘制有关方向更改的视图,android,viewgroup,android-view,android-orientation,Android,Viewgroup,Android View,Android Orientation,我在ViewGroup中使用TextView,并使用该ViewGroup创建类似于图库的可滚动用户界面。TextView的整个背景用单一颜色填充。一切正常,除了当我将方向从纵向更改为横向到纵向时,反之亦然,文本视图的原始大小保持不变,因此,图形看起来没有方向感。但只要我平移或滚动,它就会被重新更正。我的类扩展了ViewGroup,它不负责绘图部分,我尝试了以下方法: 使视图组无效 使显示的当前视图无效 实施onConfigurationChanged(清单中有适当的更改) 当配置更改时,我不

我在
ViewGroup
中使用
TextView
,并使用该
ViewGroup
创建类似于图库的可滚动用户界面。
TextView
的整个背景用单一颜色填充。一切正常,除了当我将
方向
纵向
更改为
横向
纵向
时,反之亦然,
文本视图的
原始大小保持不变,因此,图形看起来没有方向感。但只要我平移或滚动,它就会被重新更正。我的类扩展了
ViewGroup
,它不负责绘图部分,我尝试了以下方法:

  • 使
    视图组无效
  • 使显示的当前视图无效
  • 实施
    onConfigurationChanged
    (清单中有适当的更改)
当配置更改时,我不想在保存当前状态后重新创建
TextView
。下面是我在
ViewGroup
中添加视图的代码片段:-

final int[] backgroundColors = { Color.RED, Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW };
    for (int i = 0; i < 5; i++) {
        TextView textView = new TextView(getApplicationContext());
        textView.setText(Integer.toString(i + 1));
        textView.setTextSize(100);
        textView.setTextColor(Color.BLACK);
        textView.setGravity(Gravity.CENTER);
        textView.setBackgroundColor(backgroundColors[i]);
        mWorkspace.addView(textView);
    }
    //mWorkspace.setSeparator(R.drawable.seperator);
    setContentView(mWorkspace);
final int[]backgroundColors={Color.RED,Color.BLUE,Color.CYAN,Color.GREEN,Color.YELLOW};
对于(int i=0;i<5;i++){
TextView TextView=新的TextView(getApplicationContext());
setText(Integer.toString(i+1));
textView.setTextSize(100);
textView.setTextColor(Color.BLACK);
textView.setGravity(Gravity.CENTER);
setBackgroundColor(backgroundColors[i]);
mWorkspace.addView(文本视图);
}
//M工作空间.固定分离器(R.可牵引分离器);
setContentView(mWorkspace);

您可以尝试在调用setContentView之后而不是之前将textview添加到mWorkspace

在此之前,可能无法确定屏幕方向,因此无法正确计算缩放比例


将文本框添加向下移动到onStart或onResume也会产生效果,尽管我发现缩放在onCreate中效果最好。

这部分代码在我的onCreate()中编写,工作正常。我只是在方向更改期间遇到问题。onCreate是在旋转之后执行的,所以从技术上讲,只有方向与应用程序启动时相同时,它才能正常工作。在将文本视图添加到ContentView之前设置ContentView将导致调用onMeasure,并允许在添加它们时进行适当的缩放。(随后的平移和滚动将使用新的、现在正确的测量值,因此似乎可以对缩放进行排序。)找到解决方案了吗?我有一个类似的问题-我在纵向模式下显示电池图形,使用
setBounds()
将其“切断”,但当我切换到横向并返回纵向时,会显示原来的“满”电池。以前的值不会被记住。