整个应用

时间:2015-08-31 12:52:32

标签: java android xml

我试图在我的应用程序中访问我的菜单,而不必将XML代码添加到我的所有活动以及所有类中的代码。

我已经有了#34; BaseController"处理菜单的某些方面的类,如TabHost和文本等,但我无法推断菜单,因此可以在整个应用程序中使用它而不必一遍又一遍地重新键入我的所有代码?

HomeActivity.class

public class HomeActivity extends BaseController {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_home);
    Log.i(TAG, "onCreate has been called");

    menu();
    mDrawerLayout =(CustomDrawerLayout)findViewById(R.id.home_activity);
    left = (RelativeLayout) findViewById(R.id.left_menu);
    menu_button = (ImageView) findViewById(R.id.menuImageButton)
}

private void openMenu() {
    if (hasLoggedInBefore() == false) {
        goToLogin();
    } else {
        mDrawerLayout.openDrawer(left);
    }
}

activity_home.xml

<com.myapp.app.ui.CustomDrawerLayout
android:id="@+id/home_activity"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg"
tools:context=".MainActivity">

<include
    layout="@layout/home_screen_items"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

<RelativeLayout
    android:id="@+id/left_menu"
    android:layout_width="300dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="@color/bob_orange6">

    <TabHost
        android:id="@+id/menuTabs"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                >
            </TabWidget>

            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <LinearLayout
                    android:id="@+id/menu_tab1_tab"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@color/white"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Tab1 Tab Text"/>
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/menu_tab2_tab"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@color/white"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Tab2 Tab Text"/>
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/menu_tab3_tab"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@color/white"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Tab3 Tab Text"/>
                </LinearLayout>
            </FrameLayout>
        </LinearLayout>
    </TabHost>
</RelativeLayout>

正如您在上面看到的,我的菜单位于HomeActivity XML中,如果我尝试使用标签添加它,菜单会覆盖内容并且不会崩溃。

唯一可行的方法是,如果我按照上面的方式进行操作。

我的BaseController.java

public class BaseController extends Activity {
CustomDrawerLayout mDrawerLayout;
RelativeLayout left;

    public void menu(){
    final TabHost menuTab = (TabHost)findViewById(R.id.menuTabs);
    menuTab.setup();

    TabHost.TabSpec tab1_tab_menu = menuTab.newTabSpec("Tab1");
    tab1_tab_menu.setContent(R.id.menu_tab1_tab);
    tab1_tab_menu.setIndicator("Tab1");
    menuTab.addTab(tab1_tab_menu);

    TabHost.TabSpec tab2_tab_menu = menuTab.newTabSpec("Tab2");
    tab2_tab_menu.setContent(R.id.menu_tab2_tab);
    tab2_tab_menu.setIndicator("Tab2");
    menuTab.addTab(tab2_tab_menu);

    TabHost.TabSpec tab3_tab_menu = menuTab.newTabSpec("Tab3");
    tab3_tab_menu.setContent(R.id.menu_tab3_tab);
    tab3_tab_menu.setIndicator("Tab3");
    menuTab.addTab(tab3_tab_menu);
}
}

根据需要,我已经包含了CustomDrawerLayout代码

CustomDrawerLayout.java

public class CustomDrawerLayout extends DrawerLayout{

public CustomDrawerLayout(Context context) {
    super(context);
}

public CustomDrawerLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomDrawerLayout(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    widthMeasureSpec = MeasureSpec.makeMeasureSpec(
            MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY);
    heightMeasureSpec = MeasureSpec.makeMeasureSpec(
            MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.EXACTLY);
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}

我的想法是将它放在baseController类中,并且几乎在onCreate中调用一个特定活动中的方法,我想要菜单以及在该活动的xml中说,菜单基本上就是相同的内容等?

现在正在与此争斗几天。非常感谢帮助。

由于

1 个答案:

答案 0 :(得分:1)

  • UrMenu的实现应该在BaseControllerActivity中完成,我们的应用程序中的所有其他活动必须包含此BaseControllerActivity。然后您可以使用该菜单,如果想要自定义onClick菜单,则可以覆盖。