java隐藏菜单_Android开发 ---代码创建选项菜单、隐藏菜单项、菜单的生命周期,菜单按钮图标设置、搜索框、xml中设置子菜单...

packagecom.nf.android_menu_2;importandroid.app.ActionBar;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.widget.SearchView;importandroid.widget.TextView;importjava.lang.reflect.Method;public class Main2Activity extendsActivity {privateTextView searchText;//SearchView是Android原生的搜索框控件,它提供了一个用户界面,用于用户搜索查询

/**SearchView属性

属性名称 相关方法 描述

android:iconifiedByDefault setIconifiedByDefault(boolean) 设置搜索图标是否显示在搜索框内

android:imeOptions setImeOptions(int) 设置输入法搜索选项字段,默认是搜索,可以是:下一页、发送、完成等

android:inputType setInputType(int) 设置输入类型

android:maxWidth setMaxWidth(int) 设置最大宽度

android:queryHint setQueryHint(CharSequence) 设置查询提示字符串*/

privateSearchView search;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main2);

//创建导航栏并给导航栏设置返回上一级界面按钮

ActionBar bar=getActionBar();if (bar!=null){

//设置显示返回主界面按钮

bar.setHomeButtonEnabled(true);

//设置显示返回上一级按钮

bar.setDisplayHomeAsUpEnabled(true);

}

searchText=(TextView)findViewById(R.id.searchText);

}

@Overridepublic booleanonCreateOptionsMenu(Menu menu){

//当创建菜单时调用被类中最下面定义好的setIconEnable()方法传入参数,设置显示图像

setIconEnable(menu,true);//设置显示图像

//目录中创建了一个专门放menu资源的鹅menu包,包中创建了一个menu_option.xml文件,这里将那个文件投影进来     //将菜单资源文件投影进来

getMenuInflater().inflate(R.menu.menu_option,menu);//先取出资源文件中的搜索项search

MenuItem item =menu.findItem(R.id.search);//从Item中取出绑定的SearchView搜索框控件

search =(SearchView)item.getActionView();//给搜索控件绑定获取焦点事件

search.setOnQueryTextFocusChangeListener(newView.OnFocusChangeListener(){

@Overridepublic void onFocusChange(View v,booleanhasFocus){if(hasFocus){

//如果获得焦点则将searchText的设置为可见

searchText.setVisibility(TextView.VISIBLE);

}else{

//否则设置为隐藏

searchText.setVisibility(TextView.GONE);

}

}

});

//给搜索控件绑定查询文本内容事件

search.setOnQueryTextListener(newSearchView.OnQueryTextListener(){

@Overridepublic booleanonQueryTextSubmit(String query){return false;

}

//如果控件中文本内容发生改变则,在searchText中将“搜索:内容”显示出来

@Overridepublic booleanonQueryTextChange(String newText){

searchText.setText("搜索:"+newText);return false;

}

});return super.onCreateOptionsMenu(menu);

}

//当用户点击menu item,将会触发onOptionItemSelected()回调函数

//控制返回上一级菜单的方法

@Overridepublic booleanonOptionsItemSelected(MenuItem item){

//通过itemId判断具体是那个菜单项被用户点击

//当用户点击了左上角的返回按钮,与系统中的返回键的id匹配,则finishif (item.getItemId() ==android.R.id.home)this.finish();return super.onOptionsItemSelected(item);

}//通过反射获取menu,然后修改属性设置图像可以显示

private void setIconEnable(Menu menu,booleanenable){try{

Class> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");

//通过setAccessible()方法设置为true,才能进一步设置菜单的图标显示问题

//修改访问修饰符,让方法可以被访问

Method m= clazz.getDeclaredMethod("setOptionalIconsVisible",boolean.class);

m.setAccessible(true);//下面传入参数,要想给方法传参必须得能够访问这个方法,所以上面必须修改访问修饰符,在上面创建菜单时调用了setIconEnable()方法,传了true

m.invoke(menu,enable);

}catch(Exception e){

e.printStackTrace();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值