我刚创建了这样的菜单作为底栏
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/bb_menu_recents"
android:icon="@drawable/floor"
android:title="Floor 1" />
<item
android:id="@+id/floorNumber"
android:icon="@drawable/floor"
android:title="Floor 2" />
<item
android:id="@+id/bb_menu_nearby"
android:icon="@drawable/floor"
android:title="Others" />
</menu>
并创建了一个getter和setter类,我还创建了一个带有holder的适配器,这是我的适配器类
package abtech.waiteriano.com.waitrer.adapters;
import android.app.Activity;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import abtech.waiteriano.com.waitrer.R;
import abtech.waiteriano.com.waitrer.getters_and_setters.BottomBarItem;
/**
* Created by dell on 2/27/2017.
*/
public class CustomBottomBarAdapter extends ArrayAdapter<BottomBarItem> {
Context context;
int layoutResourceId;
ArrayList<BottomBarItem> data = new ArrayList<BottomBarItem>();
public CustomBottomBarAdapter(Context context, int layoutResourceId, ArrayList<BottomBarItem>data) {
super(context, layoutResourceId,data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
floorRecordHolder floorHolder = null;
if (row == null){
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
floorHolder = new floorRecordHolder();
floorHolder.floorNo = (TextView)row.findViewById(R.id.floorNumber);
}else {
floorHolder = (CustomBottomBarAdapter.floorRecordHolder) row.getTag();
}
BottomBarItem bottomBarItem = data.get(position);
floorHolder.floorNo.setText(bottomBarItem.getFloorNo());
return row;
}
static class floorRecordHolder{
TextView floorNo;
ImageView floorImage;
}
}
这是活动代码
我只想在菜单中设置图标,就像我设置文本一样,菜单也在这个
中package abtech.waiteriano.com.waitrer;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import com.roughike.bottombar.BottomBar;
import java.util.ArrayList;
import java.util.List;
import abtech.waiteriano.com.waitrer.adapters.CustomBottomBarAdapter;
import abtech.waiteriano.com.waitrer.fragments.TablesFragment;
import abtech.waiteriano.com.waitrer.getters_and_setters.BottomBarItem;
public class TabsActivity extends AppCompatActivity {
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
private BottomBar mBottomBar;
CustomBottomBarAdapter customBottomBarAdapter;
ArrayList<BottomBarItem> bottomBarArray = new ArrayList<BottomBarItem>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tabs);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mBottomBar = BottomBar.attach(this, savedInstanceState);
mBottomBar.setItems(R.menu.bottombar_menu);
customBottomBarAdapter = new CustomBottomBarAdapter(this,R.menu.bottombar_menu,bottomBarArray);
viewPager = (ViewPager) findViewById(R.id.viewpager);
/**
* Initializing the viewpager with fragments
*/
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new TablesFragment(), "Progress");
adapter.addFragment(MyFragment.newInstance("Example1"), "Example1");
adapter.addFragment(MyFragment.newInstance("Example2"), "Example2");
adapter.addFragment(MyFragment.newInstance("Example3"), "Example3");
viewPager.setAdapter(adapter);
tabLayout = (TabLayout) findViewById(R.id.tabs);
//adding viewpager to the tablayout
tabLayout.setupWithViewPager(viewPager);
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
}
floorHolder.floorNo = (TextView)row.findViewById(R.id.floorNumber);
但是对于不是textview的图标,如果有任何不清楚的地方,请告诉我抱歉英文不好
答案 0 :(得分:1)
我只想在菜单中设置图标,就像我设置文字一样
你究竟在哪里设置文字?这个适配器没有被使用......
customBottomBarAdapter = new CustomBottomBarAdapter(this,R.menu.bottombar_menu,bottomBarArray);
你实际上是用这个设置文本......
mBottomBar.setItems(R.menu.bottombar_menu);
基本上,R.menu
资源不会加载到ArrayAdapter
,通常只有R.layout
个值。
在你的活动中,你需要这样的东西
mBottomBar = BottomBar.attach(this, savedInstanceState);
mBottomBar.setItems(R.menu.bottombar_menu);
BottomBarTab tab = mBottomBar.getTabWithId(R.id.floorNumber);
mBottomBar.setIconResId(R.drawable.new_img); // This method doesn't work, though
正如我评论的那样,这不起作用,因为该方法不公开(实际上根本不更新图标)。
有一个未解决的问题。
https://github.com/roughike/BottomBar/issues/659
总的来说,您似乎对“水平”视图有TabLayout
,因此我会使用它来代替和 a BottomBar
。
您实际上可以非常轻松地设置TabLayout
的图标。
或者使用实际的Android支持BottomNavigationView
,它再次可以更改图标。