2013-03-08 56 views
2

這是我想要創建的動作欄。帶有動作按鈕的Android自定義動作欄

enter image description here

這裏是我把菜單項。

<item 
     android:id="@+id/search" 
     android:title="Search" 
     android:showAsAction="ifRoom|collapseActionView" 
     android:actionLayout="@layout/search_layout" 
    /> 

    <item 
     android:id="@+id/search1" 
     android:title="PHOTO" 
     android:showAsAction="ifRoom" 
     android:actionLayout="@layout/search_layout" 
    /> 

collapseActionView - 在啓動時摺疊搜索菜單。

enter image description here 點擊搜索條目後,它會顯示類似於圖片1的編輯文本。但是我不僅需要點擊後才能看到它。

如果我將其設置爲Always,它將因爲fill_parent從屏幕彈出菜單項。

<EditText 
     android:id="@+id/txt_search" 
     android:inputType="text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
    /> 

是否有可能得到沒有菜單項的標題欄佈局的寬度?在這種情況下,我可以設置固定寬度來編輯文本項目。

是否有任何其他方法使其工作? 因此,它必須是自定義標題佈局+菜單項。此自定義佈局必須填充菜單項和圖標之間的空白區域。

回答

2

您可以通過設置自定義視圖來代替操作欄標題來實現此目的。

ActionBar actionBar = getActionBar(); 
actionBar.setCustomView(R.layout.search_layout); 
actionBar.setDisplayShowCustomEnabled(true); 

結果是一個EditText填充操作欄的整個寬度,除了操作按鈕。它看起來完全像問題中的第一個圖像。

+0

完美!謝謝。 – inc 2013-03-08 16:37:52

2

使用自定義操作欄,你可以解決你的問題。對於自定義動作條你必須在自定義佈局創建按如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:enabled="false" 
android:orientation="horizontal" 
android:layout_alignParentRight="true" 
android:layout_gravity="right" 
android:paddingEnd="8dip" 
android:paddingRight="8dip" 
android:paddingLeft="8dip"> 

<EditText 
    android:layout_width="200dip" 
    android:layout_height="wrap_content" 
    android:id="@+id/action_bar_edt_search"/> 
<ImageButton 
    android:layout_width="50dip" 
    android:layout_height="50dip" 
    android:id="@+id/action_bar_img_search" 
    android:background="@drawable/search_ico"/> 
<Button 
    android:id="@+id/action_bar_search" 
    android:layout_alignParentRight="true" 
    android:layout_gravity="right" 
    style="@style/ActionBarButtonWhite" /> 

<Button 
    android:id="@+id/action_bar_photo" 
    android:layout_alignParentRight="true" 
    android:layout_gravity="right" 
    style="@style/ActionBarButtonOffWhite" /> 

<Button 
    android:id="@+id/action_bar_video" 
    android:layout_alignParentRight="true" 
    android:layout_gravity="right" 
    style="@style/ActionBarButtonOffWhite" /> 

<Button 
    android:id="@+id/action_bar_mobile" 
    android:layout_alignParentRight="true" 
    android:layout_gravity="right" 
    style="@style/ActionBarButtonOffWhite" /> 

color.xml

<resources> 
<color name="action_bar">#ff0d0d0d</color> 
<color name="white">#ffffffff</color> 
<color name="off_white">#99ffffff</color> 
</resources> 

styles.xml

<style name="MyActionButtonStyle" parent="android:Widget.ActionButton"> 
    <item name="android:minWidth">28dip</item> 
</style> 


<style name="ActionBarButton"> 
    <item name="android:layout_width">wrap_content</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:background">@null</item> 
    <item name="android:ellipsize">end</item> 
    <item name="android:singleLine">true</item> 
    <item name="android:textSize">@dimen/text_size_small</item> 
</style> 

現在你需要創建你的java文件的ViewGroup動作條按如下:

final ViewGroup actionBarLayout = (ViewGroup) getLayoutInflater().inflate(
      R.layout.actions, 
      null); 

    // Set up your ActionBar 
    final ActionBar actionBar = getActionBar(); 
    actionBar.setDisplayShowHomeEnabled(false); 
    actionBar.setDisplayShowTitleEnabled(false); 
    actionBar.setDisplayShowCustomEnabled(true); 
    actionBar.setCustomView(actionBarLayout); 


    // You customization 

    final int actionBarColor = getResources().getColor(R.color.action_bar); 
    actionBar.setBackgroundDrawable(new ColorDrawable(actionBarColor)); 

    final EditText actionBarEditSearch = (EditText) findViewById(R.id.action_bar_edt_search); 
    actionBarEditSearch.setVisibility(View.GONE); 

    final ImageButton actionBarImgSearch = (ImageButton) findViewById(R.id.action_bar_img_search); 
    actionBarImgSearch.setVisibility(View.GONE); 

    final Button actionBarSearch = (Button) findViewById(R.id.action_bar_search); 
    actionBarSearch.setText("SEARCH"); 

    final Button actionBarPhoto = (Button) findViewById(R.id.action_bar_photo); 
    actionBarPhoto.setText("PHOTO"); 

    final Button actionBarVideo = (Button) findViewById(R.id.action_bar_video); 
    actionBarVideo.setText("VIDEO"); 

    final Button actionBarMobile = (Button) findViewById(R.id.action_bar_mobile); 
    actionBarMobile.setText("MOBILE"); 

    actionBarSearch.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      actionBarEditSearch.setVisibility(View.VISIBLE); 
      actionBarImgSearch.setVisibility(View.VISIBLE); 
      actionBarSearch.setVisibility(View.GONE); 
     } 
    }); 

    actionBarImgSearch.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      actionBarEditSearch.setVisibility(View.GONE); 
      actionBarImgSearch.setVisibility(View.GONE); 
      actionBarSearch.setVisibility(View.VISIBLE); 
     } 
    }); 


<style name="ActionBarButtonWhite" parent="@style/ActionBarButton"> 
    <item name="android:textColor">@color/white</item> 
</style> 

<style name="ActionBarButtonOffWhite" parent="@style/ActionBarButton"> 
    <item name="android:textColor">@color/off_white</item> 
</style> 
+0

如果您需要自定義操作欄,這是最好的方法。 – DKV 2015-04-27 09:36:59