UC浏览器的菜单我们可以发现,UC的菜单就是一个个标签页显示在了PopupWindow上,所以可以想到使用PopupWindow+TabHost来实现类似的效果。首先要重写PopupWindow
public class MyMenu extends PopupWindow {
private TabHost tabHost; //标签页窗口
private LayoutInflater inflater; //用于加载tabhost
private View layout;
private Context context;
//构造函数
public MyMenu(Context context, int width, int height) {
super(context);
this.context = context;
inflater = LayoutInflater.from(this.context);
//创建标签页
initTab();
//设置默认选项
setWidth(width); //宽
setHeight(height); //高
setContentView(tabHost); //把标签页设置到PopupWindow上
}
//实例化标签页
private void initTab(){
layout = inflater.inflate(R.layout.menu,null);
tabHost = (TabHost)layout. findViewById(android.R.id.tabhost); //获取tabhost
tabHost.setBackgroundColor(Color.argb(60,144,144,150)); //设置背景色
tabHost.setup(); //使用findViewById()加载tabhost时在调用addTab前必须调用
/**
* addTab()添加标签页
* tabHost.newTabSpec("Fitst") 创建一个tab
* setIndicator("A") 设置指针
* setContent(R.id.tab1)设置内容
*/
tabHost.addTab(tabHost.newTabSpec("Fitst").setIndicator("A").setContent(R.id.tab1));
tabHost.addTab(tabHost.newTabSpec("SECOND").setIndicator("B").setContent(R.id.tab2));
tabHost.addTab(tabHost.newTabSpec("THIRD").setIndicator("C").setContent(R.id.tab3));
tabHost.setCurrentTab(1); //设置默认选种标签
}
//获取选项卡中的组件
public View getOption(int id){
return layout.findViewById(id);
}
}
下面是布局文件:
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:orientation="vertical"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
android:id="@android:id/tabs"
android:layout_height="40dp"
android:layout_width="fill_parent"
/>
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/tab1">
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Tab one"
android:id="@+id/first_button"
/>
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/tab2">
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Tab two"
/>
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/tab3">
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Tab three"目前菜单的样子还是比较丑陋了,美化大家自己发挥好了!/>
主要的Activity的代码如下:
public class MyActivity extends Activity
{
private MyMenu menu;
private LinearLayout linear;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
//组件初始化
private void init(){
linear = (LinearLayout) findViewById(R.id.popMenu);
int width = getWindowManager().getDefaultDisplay().getWidth()-15; //菜单的宽度
int heigth = getWindowManager().getDefaultDisplay().getHeight()/3; //菜单的高度
menu = new MyMenu(this, width,heigth);
Button button= (Button) menu.getOption(R.id.first_button); //获取菜单第一个标签页中的按钮
//添加点击事件
button.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v) {
Toast.makeText(MyActivity.this,"tab one",Toast.LENGTH_SHORT).show();
}
});
}
//显示菜单
private void show(){
menu.showAtLocation(linear, Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL,0,0);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//按以下菜单按键展示菜单 按两下隐藏菜单
if(!menu.isShowing()&&keyCode == KeyEvent.KEYCODE_MENU){
show();
}
else{
menu.dismiss();
}
return true;
}
}
运行,看一下效果即可,对于菜单布局,可以自定义,不同的布局,实现不同的菜单。
转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/12463.html
微信打赏
支付宝打赏
感谢您对作者Snow的打赏,我们会更加努力! 如果您想成为作者,请点我