0

アプリケーション全体でスライドメニューを使用して、アプリケーションのすべてのアクティビティにアクセスできるようにしたい。このために、この回答で提案されているように、他のすべてのアクティビティが拡張される親アクティビティを作成しました。そのため、1つのアクティビティのみがそのスライドメニュー機能を実装し、そのアクティビティを拡張する他のすべてのアクティビティがその実装を持ちます。しかし、私の問題は、UPボタン(アプリアイコン)を押すと、スライドドロワーが表示され、レイアウト全体が右側に移動することです。これはBaseActivityでは正常に機能しますが、そのクラスを拡張するアクティビティでは機能しません。引き出しが表示されておらず、レイアウトも右にシフトしていません。BaseActivityの適切な方法でトーストを入れてみましたが、トーストは表示されますが、ドロワーが表示されません。何が問題になる可能性がありますか?

レイアウトxmlは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rl_root"
android:layout_width="wrap_content"
android:layout_height="fill_parent" >

<RelativeLayout
    android:id="@+id/ll_lhs_menu"
    android:layout_width="300dip"
    android:layout_height="fill_parent"
    android:background="@color/menu_bg"
    android:orientation="vertical"
    android:visibility="visible" >

    .......
    Sliding drawer goes here.
    .......

</RelativeLayout>


<!-- Following is the actual layout where in the layout for other activities
     will be put in using the java code below. -->
<RelativeLayout
    android:id="@+id/rl_right"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_alignParentRight="true"
    android:background="@drawable/capture_port"
    android:scrollbars="none" >

</RelativeLayout>

</RelativeLayout>

また、オーバーライドさsetContentView()れるメソッドは次のとおりです。

    @Override
public void setContentView(int layoutResID) {
    _completeLayout= (RelativeLayout) getLayoutInflater().inflate(R.layout.menu, null);
    _activityLayout= (RelativeLayout) _completeLayout.findViewById(R.id.rl_right);
    getLayoutInflater().inflate(layoutResID, _activityLayout, true);
    setContentView(_completeLayout);
}

アクションバーのUPボタンをクリックすると、以下のコードが実行されます。BaseActivity

    @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
    _leftLayout.setVisibility(View.VISIBLE);
    int width = _leftLayout.getWidth();
    if (width == 0) {
        width = 300;
    }

    if (!isMenuVisible()) {
        Toast.makeText(this, "Executed successfully...", Toast.LENGTH_LONG).show();
        _leftLayout.setVisibility(View.VISIBLE);

        _rightLayoutParams = new LayoutParams(
            _rightLayout.getWidth(), _rightLayout.getHeight());
        _rightLayoutParams.setMargins(width, 0, -width, 0);
        _rightLayout.setLayoutParams(_rightLayoutParams);

        Animation slideRight = setRightSlidingAnimation();
        _leftLayout.startAnimation(slideRight);
        _rightLayout.startAnimation(slideRight);
    } else {
        Animation slideLeft = setLeftSlidingAnimation();
        _rightLayout.startAnimation(slideLeft);
        _leftLayout.startAnimation(slideLeft);
    }

    setMenuVisible(!isMenuVisible());
    break;
    }
    return false;
}
4

1 に答える 1

2

onOptionsItemSelected問題は解決しました。正しいレイアウトが変更されたため、ビューをもう一度初期化する必要がありました。メソッドは次のようになります。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:

    _rootLayout = (RelativeLayout) findViewById(R.id.rl_root);
    _leftLayout = (RelativeLayout) findViewById(R.id.ll_lhs_menu);
    _rightLayout = (RelativeLayout) findViewById(R.id.rl_right);

    _leftLayout.setVisibility(View.VISIBLE);
    int width = _leftLayout.getWidth();
    if (width == 0) {
        width = 300;
    }

if (!isMenuVisible()) {
    Toast.makeText(this, "Executed successfully...", Toast.LENGTH_LONG).show();
    _leftLayout.setVisibility(View.VISIBLE);

    _rightLayoutParams = new LayoutParams(
        _rightLayout.getWidth(), _rightLayout.getHeight());
    _rightLayoutParams.setMargins(width, 0, -width, 0);
    _rightLayout.setLayoutParams(_rightLayoutParams);

    Animation slideRight = setRightSlidingAnimation();
    _leftLayout.startAnimation(slideRight);
    _rightLayout.startAnimation(slideRight);
} else {
    Animation slideLeft = setLeftSlidingAnimation();
    _rightLayout.startAnimation(slideLeft);
    _leftLayout.startAnimation(slideLeft);
}

setMenuVisible(!isMenuVisible());
break;
}
return false;
}
于 2012-07-17T13:27:50.413 に答える