0

RelativeLayout の子であるこの LinearLayout と、とりわけ 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>

これらの TextViews にテキストを入れるつもりはありません。背景色の値のためにそこにあるだけです。これら2つのTextViewの幅をプログラムで設定したいのですが、問題はLinearLayoutが初めて表示されたときに描画されないことです。サイズがなく、その中に含まれる TextViews も表示されません。ユーザーがほとんど何をしても (画面をロックする、ホーム ボタンを押す、リスト項目をクリックする、オプション項目を選択するなど)、TextView は適切に表示されます。アクティビティが開いた最初の瞬間に、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

これが機能するかどうかはわかりませんが、次のいずれかを試してください(テキストビューで)。たとえば、最初の幅または重みを割り当ててから、そのコードの実行時にそれに応じてプログラムで調整します...

android:layout_width="40dp"

画面の一部を占めるようにしたい場合は、代わりに weight 属性を使用します。

android:layout_weight="2"
于 2012-07-01T04:09:08.450 に答える