菜单栏符号的选择
Android studio中自带有很多菜单符号,选中drawable
就可以随便选择需要的符号
代码实现
public class CrimeListFragment extends Fragment {
public static final String SUBTITLE = "subtitle";
private RecyclerView mRecyclerView;
private CrimeAdpater mCrimeAdpater;
private boolean mSubtitleVisible;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//接受菜单选项回调
setHasOptionsMenu(true);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.crime_list_fragment,container,false);
if(savedInstanceState!=null){
mSubtitleVisible=savedInstanceState.getBoolean(SUBTITLE);
}
mRecyclerView=(RecyclerView)view.findViewById(R.id.crime_recycler);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
updateUI();
return view;
}
private class CrimeHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
private TextView list_title;
private TextView list_date;
Crime mCrime;
public void bind(Crime crime){
mCrime=crime;
list_title.setText(crime.getTitle());
list_date.setText(crime.getDate().toString());
}
public CrimeHolder(LayoutInflater inflater,ViewGroup parent){
super(inflater.inflate(R.layout.crime_list_item,parent,false));
list_title=(TextView)itemView.findViewById(R.id.list_title);
list_date=(TextView)itemView.findViewById(R.id.list_date);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// Toast.makeText(getActivity(), mCrime.getTitle()+"click!", Toast.LENGTH_SHORT).show();
// Intent intent= new Intent(getActivity(),CrimeActivity.class);
// Intent intent=CrimeActivity.newIntent(getActivity(),mCrime.getId());
Intent intent= CrimePagerActivity.newIntent(getActivity(),mCrime.getId());
startActivity(intent);
}
}
private class CrimeAdpater extends RecyclerView.Adapter<CrimeHolder>{
private List<Crime> mCrimes;
public CrimeAdpater(List<Crime> crimes){
mCrimes=crimes;
}
@Override
public CrimeHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater=LayoutInflater.from(getActivity());
return new CrimeHolder(layoutInflater,parent);
}
@Override
public void onBindViewHolder(CrimeHolder holder, int position) {
Crime crime=mCrimes.get(position);
holder.bind(crime);
}
@Override
public int getItemCount() {
return mCrimes.size();
}
}
@Override
public void onResume() {
super.onResume();
updateUI();
}
private void updateUI(){
CrimeLab crimeLab=CrimeLab.getCrimeLab(getActivity());
List<Crime> crimes=crimeLab.getCrimes();
// mCrimeAdpater=new CrimeAdpater(crimes);
// mRecyclerView.setAdapter(mCrimeAdpater);
if(mCrimeAdpater==null){
mCrimeAdpater=new CrimeAdpater(crimes);
mRecyclerView.setAdapter(mCrimeAdpater);
}else{
mCrimeAdpater.notifyDataSetChanged();
}
updateSubtitle();
}
//创建菜单,传入菜单资源
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.fragment_crime_list,menu);
MenuItem subtitleItem=menu.findItem(R.id.show_subtitle);
if(mSubtitleVisible){
subtitleItem.setTitle("show");
}else{
subtitleItem.setTitle("hide");
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.new_crime:
Crime crime=new Crime();
CrimeLab.getCrimeLab(getActivity()).addCrime(crime);
Intent intent=CrimePagerActivity.newIntent(getActivity(),crime.getId());
startActivity(intent);
return true;
case R.id.show_subtitle:
mSubtitleVisible=!mSubtitleVisible;
getActivity().invalidateOptionsMenu();
updateSubtitle();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
//显示有多少条项目
public void updateSubtitle(){
CrimeLab crimeLab=CrimeLab.getCrimeLab(getActivity());
int crimeCount=crimeLab.getCrimes().size();
String subtitle=getString(R.string.subtitle_format,crimeCount);
if(!mSubtitleVisible){
subtitle=null;
}
AppCompatActivity activity=(AppCompatActivity)getActivity();
activity.getSupportActionBar().setSubtitle(subtitle);
}
//屏幕旋转时数据丢失,通过bundle保存,再在onCreateView方法中获取
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(SUBTITLE,mSubtitleVisible);
}
}
创建menu文件
选中res
最后自动会生成menu的文件夹及其xml文件
代码:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/new_crime"
android:icon="@drawable/ic_menu_add"
android:title="@string/new_crime"
app:showAsAction="ifRoom|withText"/>
<item
android:id="@+id/show_subtitle"
android:title="@string/show_subtitle"
app:showAsAction="ifRoom"/>
</menu>
app:showAsAction=”ifRoom|withText”:
意思是只要空间足够,菜单栏图标及文字描述都会显示在工具栏上,如果空间仅够显示图标,文字描述就不会显示,或是仅够显示文字描述,图标不会显示
ifroom:让操作系统决定如何显示菜单栏