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>

 

 

 

 

---恢復內容結束---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM