2013-03-08 54 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