我试图在我的应用程序中访问我的菜单,而不必将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中说,菜单基本上就是相同的内容等?
现在正在与此争斗几天。非常感谢帮助。
由于
答案 0 :(得分:1)