0

我有这个 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 和 Layout 根本没有出现。有谁知道问题可能是什么?

PS 我已经尝试在 LinearLayout 以及各个 TextView 上调用 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();
}
4

2 回答 2

0

我猜您在为 TextViews 设置了新宽度之后以及当系统在用户离开然后返回(锁定屏幕、主页按钮、方向更改等)后重新绘制布局时,您还没有重新绘制布局。但我没有看到你的 onCreate() 和 onResume() 代码,所以这只是一个猜测......

于 2012-07-01T04:09:07.537 回答
0

我不确定这是否可行,但请尝试以下方法之一(在 textviews 上)。例如,您为其分配一些初始宽度或重量,然后在该代码执行时以编程方式相应地调整它......

android:layout_width="40dp"

如果您希望它们占据屏幕的百分比,请使用 weight 属性:

android:layout_weight="2"
于 2012-07-01T04:09:08.450 回答