overflow android 三个点的布局怎么得到
1个回答
展开全部
方法目前有三种,第一种:在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
<!-- 重写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 广告
2024-03-16 广告
「柚鸥ASO」在ASO这块就做的蛮不错的,一直专注于应用商店优化,因为专注所以专业;专注应用商店下载量优化、评分优化、关键词排名优化、关键词覆盖、产品权重提升等等整体方案优化服务柚鸥网络-全球ASO优化服务商专注ASO优化已11年!(效果说...
点击进入详情页
本回答由柚鸥ASO提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询