我有这个LinearLayout,它是RelativeLayout的子项以及ListView等等:
<LinearLayout
android:id="@+id/color_bar"
android:layout_alignParentBottom="true"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="16dp"
android:padding="0dp"
android:orientation="horizontal"
>
<TextView
android:id="@+id/space_used_bar"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="#006688"
android:padding="0dp"
/>
<TextView
android:id="@+id/space_free_bar"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="#444444"
android:padding="0dp"
/>
</LinearLayout>
我不打算在那些TextView中添加任何文本;他们只是为他们的背景颜色值。我想以编程方式设置这两个TextView的宽度,我可以这样做,但问题是第一次呈现LinearLayout时,它不会被绘制。它没有大小,我也看不到其中包含的TextView。当用户几乎做任何事情时(例如锁定屏幕,按主页按钮,单击列表项,选择选项项等),TextViews会正确显示。只是在活动打开的第一时刻,TextViews和布局根本没有显示出来。有谁知道问题可能是什么?
P.S。我已经尝试在LinearLayout以及单个TextViews上调用invalidate。
编辑:这是回调
@Override
public void onCreate(Bundle savedInstanceState)
{
//Log.d(TAG, "onCreate()");
super.onCreate(savedInstanceState);
setContentView(R.layout.browser);
topMenu = getActionBar();
lv = (ListView) findViewById(R.id.file_list);
spaceUsedBar = (TextView) findViewById(R.id.space_used_bar);
spaceFreeBar = (TextView) findViewById(R.id.space_free_bar);
spaceUsed = (TextView) findViewById(R.id.space_used);
spaceFree = (TextView) findViewById(R.id.space_free);
colorBar = (LinearLayout) findViewById(R.id.color_bar);
stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
if (savedInstanceState == null)
{
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
currentDirectory = externalStorageDirectory;
else
{
currentDirectory = new File(ROOT_DIR);
Toast t = Toast.makeText(c, R.string.not_mounted, Toast.LENGTH_SHORT);
t.show();
}
}
else
{
currentDirectory = new File(savedInstanceState.getString("savedPath"));
int savedPosition = savedInstanceState.getInt("savedPosition");
int savedListTop = savedInstanceState.getInt("savedListTop");
if (savedPosition >= 0)
lv.setSelectionFromTop(savedPosition, savedListTop);
}
}
@Override
public void onStart()
{
//Log.d(TAG, "onStart()");
super.onStart();
lv.setOnItemClickListener(this);
lv.setMultiChoiceModeListener(this);
browseTo(currentDirectory);
}
@Override
public void onResume()
{
//Log.d(TAG, "onResume()");
super.onResume();
}
答案 0 :(得分:0)
我猜你在设置TextViews的新宽度之后没有重新绘制布局,并且在用户离开之后系统重新绘制布局然后返回(锁定屏幕,主页按钮,方向更改等)。但我没有看到你的onCreate()和onResume()代码,所以这只是猜测...
答案 1 :(得分:0)
我不确定这是否有效,但请尝试以下方法之一(在textviews上)。例如,为它分配一些初始宽度或重量,然后在代码执行时以编程方式相应地调整它......
android:layout_width="40dp"
如果您希望他们占据屏幕的百分比,请使用权重属性:
android:layout_weight="2"