overflow android 三个点的布局怎么得到

 我来答
己学好4
2015-02-10 · TA获得超过1.5万个赞
知道大有可为答主
回答量:1.1万
采纳率:91%
帮助的人:5213万
展开全部
方法目前有三种,第一种:在style中静态替换属性,代码如下:

<!-- 重写actionbar中 OverFlow的属性 -->

<style name="OverFlow" parent="@android:style/Widget.Holo.ActionButton.Overflow">

<item name="android:src">@drawable/index_title_more</item>

</style>

<style name="LevelOnePageActionBar" parent="@android:style/Theme.Holo.Light" type="text/css">

<item name="android:actionOverflowButtonStyle">@style/OverFlow</item>

</style>

复制代码

然后把这个style加到minifest中相应的activity中,就可以了。

第二种方法,可以动态的替换这个图标,首先在style中给添加一个name,代码如下:

<style name="OverFlow" parent="@android:style/Widget.Holo.ActionButton.Overflow">

<item name="android:contentDescription">@string/accessibility_overflow</item>

</style>

<style name="LevelOnePageActionBar" parent="@android:style/Theme.Holo.Light" >

<!-- 下面这个属性石替换三个点图标的 -->

<item name="android:actionOverflowButtonStyle">@style/OverFlow</item>

</style>

复制代码

然后在代码中添加如下代码:

// The content description used to locate the overflow button

final String overflowDesc = getString(R.string.accessibility_overflow);

// The top-level window

final ViewGroup decor = (ViewGroup) getWindow().getDecorView();

// Wait a moment to ensure the overflow button can be located

decor.postDelayed(new Runnable() {

@Override

public void run() {

// The List that contains the matching views

final ArrayList<View> outViews = new ArrayList<View>();

// Traverse the view-hierarchy and locate the overflow button

decor.findViewsWithText(outViews, overflowDesc,View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);

// Guard against any errors

if (outViews.isEmpty()) {

return;

}

// Do something with the view

final ImageButton overflow = (ImageButton) outViews.get(0);

overflow.setImageResource(R.drawable.index_title_menu);

}

}, 1000);
复制代码

这个有个缺点,就是图标的大小尺寸貌似不可控,如果图标够大,他就只能显示图片的一部分了,而且,大家也可以看见,其实用起来也比较麻烦。

下面就介绍第三种方法,这个简单易懂,比阿奴理解:
这个我们不用去特意设置style,首先去改变一下menu的布局,代码如下:

<menu xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

tools:context="com.example.normalproject.MainActivity" >

<item

android:id="@+id/action_usercenter"

android:icon="@drawable/index_title_usercenter"

android:orderInCategory="100"

android:showAsAction="always"

android:title="@string/action_usercenter_tx"/>

<item

android:orderInCategory="100"

android:id="@+id/overflow_menus"

android:actionProviderClass="@android:style/Widget.Holo.ActionButton.Overflow"

android:showAsAction="always"

android:title="@string/accessibility_overflow">

<menu>

<item

android:id="@+id/action_messagebox"

android:icon="@drawable/index_title_usercenter"

android:orderInCategory="100"

android:showAsAction="never"

android:title="@string/messagebox_title_tx"/>

<item

android:id="@+id/action_feedback"

android:orderInCategory="100"

android:showAsAction="never"

android:title="@string/feedback_title_tx"/>

<item

android:id="@+id/action_settings"

android:orderInCategory="100"

android:showAsAction="never"

android:title="@string/action_settings_tx"/>

</menu>

</item>

</menu>
复制代码

是的,就是利用menu的嵌套,把我们想要隐藏的菜单用menu标签包起来,再嵌入到一个item里面,这个被嵌入的item的showAsAction属性设置成为always,这样,我们就可以用代码动态的去改变这个item的icon了,如果你不需要动态改变(那么就直接用第一种方法),代码中我们需要在onOptionsItemSelected(MenuItem item)方法中做好事件监听处理,并且,在onPrepareOptionsMenu(Menu menu)中处理图片动态替换,代码如下:

if(DataBaseOptions.getInstance(this).checkNotReadPushMessage()>0){

menu.getItem(1).setIcon(R.drawable.index_title_usercenter);//替换图标

}else{

menu.getItem(1).setIcon(R.drawable.index_title_more);

}
复制代码

需要改变图片的时候,就调用invalidateOptionsMenu();方法,nice,就是这么任性~~~
效果如下:
C:\Users\Administrator\Desktop\11.png
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
柚鸥ASO
2024-03-16 广告
「柚鸥ASO」在ASO这块就做的蛮不错的,一直专注于应用商店优化,因为专注所以专业;专注应用商店下载量优化、评分优化、关键词排名优化、关键词覆盖、产品权重提升等等整体方案优化服务柚鸥网络-全球ASO优化服务商专注ASO优化已11年!(效果说... 点击进入详情页
本回答由柚鸥ASO提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式