gpt4 book ai didi

java - 如何在每个 Activity 中显示滑动菜单栏?

转载 作者:太空宇宙 更新时间:2023-11-04 13:05:06 24 4
gpt4 key购买 nike

我正在制作一个带有滑动菜单的 Android 应用程序,但我希望它可用于所有 Activity 。

这是我的问题的一个示例:我有 7 个主要选项(主页、翻译器、游览、设置等),名为fragment1 到fragment7,但我在 Tour 中也有一个水平 ScrollView 和其他 Activity ,我希望这些“其他 Activity ”也显示滑动菜单..

这是我的代码

AndroidManifest.xml

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gnirt69.slidingmenuexample">

<application android:allowBackup="true" android:label="@string/app_name"
android:icon="@mipmap/ic_launcher" android:supportsRtl="true"
android:theme="@style/AppTheme">

<activity android:name=".MainActivity" android:label="Tour Guide with Translator">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity android:name=".touring.Hotels" android:label="Tour Guide with Translator">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.TAB" />
</intent-filter>
</activity>

<activity android:name=".touring.Hotspots" android:label="Tour Guide with Translator">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.TAB" />
</intent-filter>
</activity>

<activity android:name=".touring.Leisure" android:label="Tour Guide with Translator">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.TAB" />
</intent-filter>
</activity>

<activity android:name=".touring.Nightlife" android:label="Tour Guide with Translator">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.TAB" />
</intent-filter>
</activity>

<activity android:name=".touring.Resteraunts" android:label="Tour Guide with Translator">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.TAB" />
</intent-filter>
</activity>






</application>


</manifest>

ItemSlideMenu.java

    package com.gnirt69.slidingmenuexample.model;


public class ItemSlideMenu {

private int imgId;
private String title;

public ItemSlideMenu(int imgId, String title) {
this.imgId = imgId;
this.title = title;
}

public int getImgId() {
return imgId;
}

public void setImgId(int imgId) {
this.imgId = imgId;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}
}

MainActivity.java

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBarDrawerToggle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import com.gnirt69.slidingmenuexample.adapter.SlidingMenuAdapter;
import com.gnirt69.slidingmenuexample.fragment.Fragment1;
import com.gnirt69.slidingmenuexample.fragment.Fragment2;
import com.gnirt69.slidingmenuexample.fragment.Fragment3;
import com.gnirt69.slidingmenuexample.fragment.Fragment4;
import com.gnirt69.slidingmenuexample.fragment.Fragment5;
import com.gnirt69.slidingmenuexample.fragment.Fragment6;
import com.gnirt69.slidingmenuexample.fragment.Fragment7;
import com.gnirt69.slidingmenuexample.touring.Hotels;
import com.gnirt69.slidingmenuexample.model.ItemSlideMenu;
import com.gnirt69.slidingmenuexample.touring.Hotspots;
import com.gnirt69.slidingmenuexample.touring.Leisure;
import com.gnirt69.slidingmenuexample.touring.Nightlife;
import com.gnirt69.slidingmenuexample.touring.Resteraunts;

import java.util.ArrayList;
import java.util.List;

/**
* Created by User on 10/18/2015.
*/
public class MainActivity extends ActionBarActivity {

private List<ItemSlideMenu> listSliding;
private SlidingMenuAdapter adapter;
private ListView listViewSliding;
private DrawerLayout drawerLayout;
private ActionBarDrawerToggle actionBarDrawerToggle;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);



//Init component
listViewSliding = (ListView) findViewById(R.id.lv_sliding_menu);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
listSliding = new ArrayList<>();
//Add item for sliding list
listSliding.add(new ItemSlideMenu(R.drawable.homeeee, "Home"));
listSliding.add(new ItemSlideMenu(R.drawable.tourrrr, "Tour Guide"));
listSliding.add(new ItemSlideMenu(R.drawable.trrravel, "Translator"));
listSliding.add(new ItemSlideMenu(R.drawable.settings_black, "Settings"));
listSliding.add(new ItemSlideMenu(R.mipmap.ic_launcher, "Help"));
listSliding.add(new ItemSlideMenu(R.mipmap.ic_launcher, "About"));
listSliding.add(new ItemSlideMenu(R.mipmap.ic_launcher, "Exit App"));
adapter = new SlidingMenuAdapter(this, listSliding);
listViewSliding.setAdapter(adapter);



//Display icon to open/ close sliding list
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

//Set title
setTitle(listSliding.get(0).getTitle());
//item selected
listViewSliding.setItemChecked(0, true);
//Close menu
drawerLayout.closeDrawer(listViewSliding);

//Display fragment 1 when start
replaceFragment(0);
//Hanlde on item click

listViewSliding.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Set title
setTitle(listSliding.get(position).getTitle());
//item selected
listViewSliding.setItemChecked(position, true);
//Replace fragment
replaceFragment(position);
//Close menu
drawerLayout.closeDrawer(listViewSliding);
}
});

actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_opened, R.string.drawer_closed){

@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
}

@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
invalidateOptionsMenu();
}
};

drawerLayout.setDrawerListener(actionBarDrawerToggle);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

if(actionBarDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
actionBarDrawerToggle.syncState();
}

//Create method replace fragment

private void replaceFragment(int pos) {
Fragment fragment = null;
switch (pos) {
case 0:
fragment = new Fragment1();
break;
case 1:
fragment = new Fragment2();
break;
case 2:
fragment = new Fragment3();
break;
case 3:
fragment = new Fragment4();
break;
case 4:
fragment = new Fragment5();
break;
case 5:
fragment = new Fragment6();
break;
case 6:
fragment = new Fragment7();
break;


default:
fragment = new Fragment1();
break;
}



if(null!=fragment) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.main_content, fragment);
transaction.addToBackStack(null);
transaction.commit();
}


}

public void sendHotels(View view) {
Intent startNewActivity = new Intent(this, Hotels.class);
startActivity(startNewActivity);
}
public void sendHotspots(View view) {
Intent startNewActivity = new Intent(this, Hotspots.class);
startActivity(startNewActivity);
}
public void sendLeisure(View view) {
Intent startNewActivity = new Intent(this, Leisure.class);
startActivity(startNewActivity);
}
public void sendNightlife(View view) {
Intent startNewActivity = new Intent(this, Nightlife.class);
startActivity(startNewActivity);

}
public void sendResteraunt(View view) {
Intent startNewActivity = new Intent(this, Resteraunts.class);
startActivity(startNewActivity);
}

}

> main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer_layout"
android:orientation="vertical">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main_content"></RelativeLayout>

<ListView
android:layout_width="200dp"
android:layout_height="match_parent"
android:id="@+id/lv_sliding_menu"
android:background="#FFFFFF"
android:choiceMode="singleChoice"
android:layout_gravity="start"></ListView>
</android.support.v4.widget.DrawerLayout>

> Fragment1.xml

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment1, container, false);
return rootView;
}

> fragment1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Home"
android:textSize="30dp"
android:layout_gravity="center"/>
</LinearLayout>

这是我的问题,我希望滑动菜单也显示在这里(fragment1 内的 Activity )

Hotels.java

       package com.gnirt69.slidingmenuexample.touring;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;

import com.gnirt69.slidingmenuexample.R;


/**
* Created by User on 12/14/2015.
*/
public class Hotels extends FragmentActivity {




@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tourhotels);
}

public void sendHotels(View view) {
Intent startNewActivity = new Intent(this, Hotels.class);
startActivity(startNewActivity);
}
public void sendHotspots(View view) {
Intent startNewActivity = new Intent(this, Hotspots.class);
startActivity(startNewActivity);
}
public void sendLeisure(View view) {
Intent startNewActivity = new Intent(this, Leisure.class);
startActivity(startNewActivity);
}
public void sendNightlife(View view) {
Intent startNewActivity = new Intent(this, Nightlife.class);
startActivity(startNewActivity);

}
public void sendResteraunt(View view) {
Intent startNewActivity = new Intent(this, Resteraunts.class);
startActivity(startNewActivity);
}

}

tourhotels.xml

     <LinearLayout
android:layout_height="fill_parent"
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android" >
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hotelss"
android:id="@+id/Hotelio"
android:onClick="sendHotels"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/resteraunts"
android:onClick="sendResteraunt"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hotspotss"
android:onClick="sendHotspots"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/leisure"
android:onClick="sendLeisure"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/nightlife"
android:onClick="sendNightlife"/>

</LinearLayout>
</HorizontalScrollView>
</LinearLayout>

最佳答案

解决了!对于任何其他想要将 TabHost 添加到 Fragment 中的人,这就是我所做的..

不要忘记导入抽屉导航中包含的所有 fragment

MainActivity.java

DrawerLayout drawerLayout;
RelativeLayout drawerPane;
ListView lvNav;

List<NavItem> listNavItems;
List<Fragment> listFragments;

ActionBarDrawerToggle actionBarDrawerToggle;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerPane = (RelativeLayout) findViewById(R.id.drawer_pane);
lvNav = (ListView) findViewById(R.id.nav_list);

listNavItems = new ArrayList<NavItem>();
listNavItems.add(new NavItem("Home", "MyHome page",
R.drawable.ic_action_home));
listNavItems.add(new NavItem("Translator", "English Cebuano",
R.drawable.ic_action_home));
listNavItems.add(new NavItem("Settings", "Change something",
R.drawable.ic_action_settings));
listNavItems.add(new NavItem("About", "Author's information",
R.drawable.ic_action_about));

NavListAdapter navListAdapter = new NavListAdapter(
getApplicationContext(), R.layout.item_nav_list, listNavItems);

lvNav.setAdapter(navListAdapter);

listFragments = new ArrayList<Fragment>();
listFragments.add(new MyHome());
listFragments.add(new MyTrans());
listFragments.add(new MySettings());
listFragments.add(new MyAbout());

// load first fragment as default:
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.main_content, listFragments.get(0)).commit();

setTitle(listNavItems.get(0).getTitle());
lvNav.setItemChecked(0, true);
drawerLayout.closeDrawer(drawerPane);

// set listener for navigation items:
lvNav.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {

// replace the fragment with the selection correspondingly:
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager
.beginTransaction()
.replace(R.id.main_content, listFragments.get(position))
.commit();

setTitle(listNavItems.get(position).getTitle());
lvNav.setItemChecked(position, true);
drawerLayout.closeDrawer(drawerPane);

}
});

// create listener for drawer layout
actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
R.string.drawer_opened, R.string.drawer_closed) {

@Override
public void onDrawerOpened(View drawerView) {
// TODO Auto-generated method stub
invalidateOptionsMenu();
super.onDrawerOpened(drawerView);
}

@Override
public void onDrawerClosed(View drawerView) {
// TODO Auto-generated method stub
invalidateOptionsMenu();
super.onDrawerClosed(drawerView);
}

};

drawerLayout.setDrawerListener(actionBarDrawerToggle);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the MyHome/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
if (actionBarDrawerToggle.onOptionsItemSelected(item))
return true;

return super.onOptionsItemSelected(item);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onPostCreate(savedInstanceState);
actionBarDrawerToggle.syncState();
}

接下来是我出错的地方,直接将TabHost导入到fragment.java类中,以及onpagelistener(扩展Fragment实现了OnTabChangeListener)

MyTrans.java

    OnPageChangeListener {

private TabHost tabHost;
private ViewPager viewPager;
private MyFragmentPagerAdapter myViewPagerAdapter;
int i = 0;
View v;

@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

v = inflater.inflate(R.layout.tabs_viewpager_layout, container, false);



i++;

// init tabhost
this.initializeTabHost(savedInstanceState);

// init ViewPager
this.initializeViewPager();


return v;
}

// fake content for tabhost
class FakeContent implements TabContentFactory {
private final Context mContext;

public FakeContent(Context context) {
mContext = context;
}

@Override
public View createTabContent(String tag) {
View v = new View(mContext);
v.setMinimumHeight(0);
v.setMinimumWidth(0);
return v;
}
}

private void initializeViewPager() {
List<Fragment> fragments = new Vector<Fragment>();

fragments.add(new Tab1Fragment());
fragments.add(new Tab2Fragment());
fragments.add(new Tab3Fragment());

this.myViewPagerAdapter = new MyFragmentPagerAdapter(
getChildFragmentManager(), fragments);
this.viewPager = (ViewPager) v.findViewById(R.id.viewPager);
this.viewPager.setAdapter(this.myViewPagerAdapter);
this.viewPager.setOnPageChangeListener(this);

}

private void initializeTabHost(Bundle args) {

tabHost = (TabHost) v.findViewById(android.R.id.tabhost);
tabHost.setup();

for (int i = 1; i <= 3; i++) {

TabHost.TabSpec tabSpec;
tabSpec = tabHost.newTabSpec("Tab " + i);
tabSpec.setIndicator("Tab " + i);
tabSpec.setContent(new FakeContent(getActivity()));
tabHost.addTab(tabSpec);
}
tabHost.setOnTabChangedListener(this);
}

@Override
public void onTabChanged(String tabId) {
int pos = this.tabHost.getCurrentTab();
this.viewPager.setCurrentItem(pos);

HorizontalScrollView hScrollView = (HorizontalScrollView) v
.findViewById(R.id.hScrollView);
View tabView = tabHost.getCurrentTabView();
int scrollPos = tabView.getLeft()
- (hScrollView.getWidth() - tabView.getWidth()) / 2;
hScrollView.smoothScrollTo(scrollPos, 0);

}

@Override
public void onPageScrollStateChanged(int arg0) {
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}

@Override
public void onPageSelected(int position) {
this.tabHost.setCurrentTab(position);
}

接下来,使用 inflater 为您的选项卡创建类,具体取决于您需要的数量

@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

View v = inflater.inflate(R.layout.tab1fragment, container, false);

return v;
}

然后你必须制作一个layout.xml文件来实现scrollview、大小等

tabs_viewpager_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

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

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

<HorizontalScrollView
android:id="@+id/hScrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
android:scrollbars="none" >

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

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

<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
</LinearLayout>
</TabHost>

</LinearLayout>

接下来,为每个选项卡创建一个 .xml

tab1fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="Fragment 1" />

最后,不要忘记为每个抽屉导航创建一个 .xml 文件(当然..)

fragment_tour.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tour"
android:textColor="#000"
android:textSize="18sp"
android:textStyle="bold" />

</LinearLayout>

所以基本上,在您想要的 fragment 中制作 tabhost <,<现在听起来很简单..

祝大家新年快乐。

关于java - 如何在每个 Activity 中显示滑动菜单栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34555721/

24 4 0