Android custom action bar with action buttons

2019-07-17 01:59发布

Here is the action bar that I want to create.

enter image description here

Here is items that I put in menu.

   <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 - collapses search menu on startup.

enter image description here After click on search item it shows edit text like on picture 1. But I need always see it, not only after click.

If I set it to Always it will pop the menu items from the screen because of fill_parent.

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

Is it possible to get width of title bar layout without menu items? In this case I can set fixed width to edittext item.

Is it any other approaches to make it work? In result it must be custom title layout + menu items. This custom layout must fill empty space between menu items and icon.

2条回答
【Aperson】
2楼-- · 2019-07-17 02:28

You can achieve this by setting a custom view in place of the action bar title.

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

The result is an EditText that fills the entire width of the action bar, except for the action buttons. It looks exactly like the first image in the question.

查看更多
Explosion°爆炸
3楼-- · 2019-07-17 02:52

Using Custom ActionBar, you can solve your Problem. For Custom ActionBar you have to create on Custom Layout as per following:

<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>

now you need to create ViewGroup and ActionBar in your java file as per following:

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>
查看更多
登录 后发表回答