titlebar和actionbar上的按钮设置
---恢复内容开始---
Actionbar加按钮:
在res文件夹下新建menu文件夹(如果你没有),然后添加一个XML文件
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
<!-- action items --> <!-- showAsAction默认为never --> <item android:id="@+id/delete1" android:icon="@android:drawable/ic_menu_camera" android:showAsAction="always" android:title="拍照"/> <item android:id="@+id/add" android:icon="@android:drawable/ic_menu_add" android:showAsAction="ifRoom" android:title="添加"> </item> <item android:id="@+id/delete2" android:icon="@android:drawable/ic_menu_edit" android:showAsAction="ifRoom" android:title="编辑"/> <item android:id="@+id/share" android:icon="@android:drawable/ic_menu_share" android:showAsAction="never" android:title="分享"/> <item android:id="@+id/call" android:icon="@android:drawable/ic_menu_call" android:showAsAction="never" android:title="呼叫"/> <item android:id="@+id/delete3" android:icon="@android:drawable/ic_menu_help" android:showAsAction="never" android:title="帮助"/> <!-- action views --> <item android:id="@+id/search" android:actionViewClass="android.widget.SearchView" android:showAsAction="always" android:title="查询"/> <item android:id="@+id/clock" android:actionLayout="@layout/actionbar_layout_menu" android:showAsAction="always" android:title="时钟"/>
</menu>
时钟布局文件actionbar_layout_menu.xml:
<?xml version="1.0" encoding="utf-8"?> <AnalogClock xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > </AnalogClock>
现在在activity里设置
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar = getActionBar(); // 是否显示应用程序图标,默认为true actionBar.setDisplayShowHomeEnabled(true); // 是否显示应用程序标题,默认为true actionBar.setDisplayShowTitleEnabled(true); /* * 是否将应用程序图标转变成可点击的按钮,默认为false。 * * 如果设置了DisplayHomeAsUpEnabled为true, * * 则该设置自动为 true。 */ actionBar.setHomeButtonEnabled(true); /* * 在应用程序图标的左边显示一个向左的箭头, * * 并且将HomeButtonEnabled设为true。 * * 默认为false。 */ actionBar.setDisplayHomeAsUpEnabled(true); forceShowOverflowMenu(); } /** * 如果设备有物理菜单按键,需要将其屏蔽才能显示OverflowMenu */ private void forceShowOverflowMenu() { try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class .getDeclaredField("sHasPermanentMenuKey"); if (menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); } } catch (Exception e) { e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.actionbar_menu, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { /* * 将actionBar的HomeButtonEnabled设为ture, * * 将会执行此case */ case android.R.id.home: finish(); break; case R.id.menu_setting: Toast.makeText(this, "设置", Toast.LENGTH_LONG).show(); break; // 其他省略... default: break; } return super.onOptionsItemSelected(item); } @Override public boolean onMenuOpened(int featureId, Menu menu) { setOverflowIconVisible(featureId, menu); return super.onMenuOpened(featureId, menu); } /** * 显示OverflowMenu的Icon * * @param featureId * @param menu */ private void setOverflowIconVisible(int featureId, Menu menu) { if (featureId == Window.FEATURE_ACTION_BAR && menu != null) { if (menu.getClass().getSimpleName().equals("MenuBuilder")) { try { Method m = menu.getClass().getDeclaredMethod( "setOptionalIconsVisible", Boolean.TYPE); m.setAccessible(true); m.invoke(menu, true); } catch (Exception e) { Log.d("OverflowIconVisible", e.getMessage()); } } } } }
转自:http://blog.csdn.net/zhangzeyuaaa/article/details/40783681
Titlebar加自定义按钮:
在activity的onCreate()里加入代码,这几行代码添加的时候要注意顺序
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.activity_main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.title);
title.xml的话就放自己需要的东西
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="48dp"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="test"/> </LinearLayout>
在清单文件中需要设置的activity里添加theme属性
android:theme="@style/titlebarstyle"
这是个自定义的style
<style name="CustomizedWindowTitleBackground"> <item name="android:background">#047BF0</item> </style> <style name="titlebarstyle" parent="android:Theme"> <item name="android:windowTitleSize">48dp</item> <item name="android:windowTitleBackgroundStyle">@style/CustomizedWindowTitleBackground</item> <!-- All customizations that are NOT specific to a particular API-level can go here. --> </style>
---恢复内容结束---